文章目錄
- 1. CS336介紹
- 2. 概覽
- 2.1 為什么會有這門課程
- 2.1.1 LLM的參數和訓練成本
- 2.2.2 小語言模型和LLM的區別
- 2.2 你可以學到什么?
- 2.2.1 Intuitions
- 2.2.2 The bitter lesson
- 3. 全景圖(current landscape)/發展歷史
- 4. 可執行的課件說明
- 5. 課程設計
- 6. 課程內容
- 6. 1 basic部分
- 6.1.1 分詞器tokenization
- 6.1.2 架構Architecture
- 6.1.3 training
- 6.1.4 作業一
- 6.2 systems部分
- 6.2.1 kernel(GPU內核)
- 6.2.2 Parallelism(并行)
- 6.2.3 Inference
- 6.2.4 作業二
- 6.3 scaling_laws部分
- 6.3.1 說明
- 6.3.2 作業三
- 6.4 data部分
- 6.4.1 說明
- 6.4.2 作業四
- 6.5 alignment部分
- 6.5.1 說明
- 6.5.2 作業五
- 6.6 回顧總結
1. CS336介紹
B站視頻:
- ?【斯坦福大學 ? CS336】從零開始構建語言模型 | 2025 年春季
- 這個清晰度不行,字幕有點問題
- ?斯坦福CS336:大模型從0到1|第一講:概述和tokenization【中英雙語】
- 這個好點~
- 斯坦福大學《從零開始的語言模型|CS336 Language Modeling from Scratch Spring 2025》中
- 這個可能更好,但是要開月卡似乎
課程主頁: CS336: Language Modeling from Scratch_Stanford / Spring 2025
Github主頁:https://github.com/stanford-cs336/spring2025-lectures
額外說明:
- 課上老師講解用的是py腳本,使用的是一個叫
trace-viewer
的基于React等前端構建的一個瀏覽工具 trace-viewer
就在課程的github里
2. 概覽
以下內容來自: spring2025-lectures/lecture_01.py
trace-viewer瀏覽頁面(最好用谷歌瀏覽器,不然頁面布局顯示會很混亂): Trace-lecture-01
(PS: 如果直接點擊課程主頁里的Course Materials
的py文件,看的時候會位置錯亂,就還不如直接看原始的腳本文件~)
2.1 為什么會有這門課程
2.1.1 LLM的參數和訓練成本
GPT-4據傳有1.8T(萬億)參數, article_link
GPT-4 據傳花了 $100M(百萬)/$1億訓練,article_link
xAI使用了一個20w個H100構成的集群來訓練Grok. article_link
Stargate (OpenAI, NVIDIA, Oracle)四年內投資超過$500B(十億)/$5千億,article_link
2.2.2 小語言模型和LLM的區別
本課程不是為了訓練一個GPT-4,而是為了訓練一個小語言模型(small language models (<1B parameters in this class))
GPT-4 Technical Report中寫道:
- 考慮到像GPT-4這樣的大型模型的競爭格局和安全影響,本報告沒有包含關于架構(包括模型大小)、硬件、訓練計算、數據集構建、訓練方法或類似內容的進一步細節。
Exmaple 1: fraction of FLOPs spent in attention versus MLP changes with scale,圖自鏈接
仔細觀察語言模型隨著規模的增大,MLP層和MHA(multi head attention)層消耗的flops計算的比例,可以發現:
- FFN使用的就是MLP,MHA表示多頭注意力機制層
- 隨著scale的增大,MLP層消耗的計算占比越來越大,占據了主導位置,而MHA占比則越來越小(準確的說,是除了MLP之外的層,占比都是越來越少的)。
- 因此,如果你只看小語言模型,把大量的時間花在MHA多頭注意力機制的優化上,那么你的優化方向就是錯誤的。。。因為在大語言模型上,MHA的作用很有限
Example 2: emergence of behavior with scale,圖自論文-Emergent Abilities of Large Language Models-鏈接
如上圖所示:
- 橫軸表示訓練時的flops(越大表示模型越大)
- 在一定范圍內時,例如:101810^{18}1018~102210^{22}1022之間,模型在各個任務上的準確率增長都不明顯,幾乎是平的
- 但是在模型規模(scale)到達一定規模后,隨著scale的增長,各個任務上的準確率都呈現線性增長的趨勢,這就是所謂的大模型的涌現能力,上下文,思維鏈等~
2.2 你可以學到什么?
🥳課程主要學習的內容:
- Mechanics/運行機制:
- how things work (what a Transformer is, how model parallelism leverages GPUs)
- Transformer模型是什么?如果通過GPUs高效的進行模型并行操作
- Mindset/思維方式:
- squeezing the most out of the hardware, taking scale seriously (scaling laws)
- 盡可能充分利用硬件性能,認真對待
scaling laws
這個東西
- Intuitions:
- which data and modeling decisions yield good accuracy
- 哪些數據和建模決策/訓練方案,可以產生好的結果
2.2.1 Intuitions
目前LLM中的大多數研究/采取的決策,都沒有確切的科學根據,都是進行實驗,以實驗為導向的
例如: GLU Variants Improve Transformer
翻譯: 我們沒有解釋為什么這些架構似乎有效;我們把他們的成功,和其他一切一樣,歸功于神的仁慈。
所以我們理解的程度,就是實驗結果好,就可以用了。。。
2.2.2 The bitter lesson
Wrong interpretation: scale is all that matters, algorithms don’t matter.
- 錯誤的解釋: scale就是最重要的,是一切,算法不重要
Right interpretation: algorithms that scale is what matters.
- 正確的解釋:算法的規模才是最重要的。
accuracy=efficiency×resourcesaccuracy = efficiency \times resourcesaccuracy=efficiency×resources
準確率其實是 效率 和你投入的資源 的乘積。很明顯,如果是大規模模型,efficiency
效率是更重要的(因為負擔不起浪費。。。)
效率其實是硬件(hardware
)和算法(Algorithm
)的結合
- 關于算法的效率:
- 論文-Measuring the Algorithmic Efficiency of Neural Networks
- 這個論文中提到: 從2012年到2019年,7年的時間里,訓練一個在ImageNet上達到AlexNet水平的算法的效率提升了44倍。 比摩爾定律還快,摩爾定律在此期間漲了11倍
- 因此,最關鍵的問題是:
- 在給定計算資源和數據的情況下,最好的模型是什么?
- 考慮的其實是 每個單位資源的準確率(accuracy per resources)
- 如果能拿到更多的計算資源,那模型肯定會更好
- 但是作為研究人員,我們的目標是:maximize efficiency!
3. 全景圖(current landscape)/發展歷史
大語言模型的簡單發展歷史(NLP+transformer)
- Pre-neural (before 2010s, 神經網絡之前)
- 香農把語言模型作為衡量英語熵的一種方式,引用- Prediction and Entropy of Printed English-Shannon 1950
- 其實在2007年的時候,Google就訓練過一個很大的
n-gram
模型(Trained 5-gram model on 2T tokens
), 在超過2萬億詞源(比GPT3的tokens還要多)上建立了5-gram模型。引用-Language Models in Machine Translation-Brants 2007
- Neural ingredients (2010s,神經網絡的組件)
- 第一個神經網絡的語言模型是約書亞Bengio團隊在2003年提出的, 引用-A Neural Probabilistic Language Model-Bengio 2003
- 以及2014年的用于機器翻譯Seq2Seq(Sequence-to-sequence modeling)模型。引用-Sequence to Sequence Learning with Neural Networks-susketver2014
- Adam optimizer, 出現于距今為止10年的2014年,至今還有很多人在使用。引用-Adam: A Method for Stochastic Optimization-Kingma+ 2014
- Attention mechanism (注意力機制,最初是用在機器翻譯領域的machine translation,促成了后來的transformer里的注意力機制架構) , 引用-Neural Machine Translation by Jointly Learning to Align and Translate-Bahdanau+ 2014
- Transformer architecture (for machine translation) ,引用-Attention Is All You Need-Vaswani+ 2017
- 研究如何擴展混合專家(scale Mixture of experts)模型。引用-Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer- Shazeer+2017
- 21世紀10年代末期(即2010年~2020年之間,尤其是2015年之后),大量研究工作開始關注模型并行(
Model parallelism
),致力于研究如何訓練千億(hundreds of million)參數的模型,雖然沒有訓練很久,因為訓練更像是一種系統層面的工作(system work)。引用:- Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer- [Huang+ 2018],
- ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
-Rajbhandari+ 2019, - Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism-Shoeybi+ 2019
- 所以其實在2020年左右,所有大模型需要的訓練要素(ingredients)都已經就位了
- Early foundation models (late 2010s,早期的基座模型)
- 21世紀10年代晚期,除了上面一些模型組件,還出現了另一種趨勢,即:使用大量的文本訓練得到一個基座模型,再通過進一步的微調訓練來得到適應不同的下游任務的模型。
- ELMo: pretraining with LSTMs, fine-tuning helps tasks,引用-Deep contextualized word representations-[Peters+ 2018]
- BERT: pretraining with Transformer, fine-tuning helps tasks,引用-BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding-[Devlin+ 2018]
- Google’s T5 (11B): cast everything as text-to-text ,引用-Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer-[Raffel+ 2019]
- 當年BERT出現的時候,非常令人興奮,只是相對于如今的LLM,可能人們已經忘記了當年的BERT等的超大模型~
- Embracing scaling, more closed(擁抱規模化,走向閉源)
- 促成大模型出現的最關鍵一步:OpenAI整合了上面的神經網絡的組件,順應了基座模型這個趨勢,并且通過出色的工程能力真正應用了規模定律(
scaling laws
) - OpenAI’s GPT-2 (1.5B): fluent text, first signs of zero-shot, staged release,Language Models are Unsupervised Multitask Learners-[Radford+ 2019]
- Scaling laws: provide hope / predictability for scaling , 規模定律——促進了GPT-2和GPT3的出現。Scaling Laws for Neural Language Models- [Kaplan+ 2020]
- OpenAI’s GPT-3 (175B): in-context learning, closed。Language Models are Few-Shot Learners-[Brown+ 2020]
- Google’s PaLM (540B): massive scale, undertrained。PaLM: Scaling Language Modeling with Pathways- [Chowdhery+ 2022]
- DeepMind’s Chinchilla (70B): compute-optimal scaling laws ,Training Compute-Optimal Large Language Models-[Hoffmann+ 2022]
- 促成大模型出現的最關鍵一步:OpenAI整合了上面的神經網絡的組件,順應了基座模型這個趨勢,并且通過出色的工程能力真正應用了規模定律(
- Open models(開源模型)
- 閉源模型的進步,也在促使開源模型的出現
- EleutherAI’s open datasets (The Pile) and models (GPT-J),
- The Pile: An 800GB Dataset of Diverse Text for Language Modeling-Gao+ 2020,
- 中文介紹見:The Pile: An 800GB Dataset of Diverse Text for Language Modeling——一個用于語言建模的800GB多樣化文本數據集
- GPT-J-6B: 6B JAX-Based Transformer_Wang+ 2021, GPT3發布后的一個嘗試。
- Meta’s OPT (175B): GPT-3 replication, lots of hardware issues,Meta的早期嘗試,效果沒有那么好。 OPT: Open Pre-trained Transformer Language Models- [Zhang+ 2022]
- Hugging Face / BigScience’s BLOOM: focused on data sourcing。BLOOM: A 176B-Parameter Open-Access Multilingual Language Model- [Workshop+ 2022]
- Meta’s Llama models
- LLaMA: Open and Efficient Foundation Language Models-[Touvron+ 2023]
- Llama 2: Open Foundation and Fine-Tuned Chat Models-[Touvron+ 2023]
- The Llama 3 Herd of Models- [Grattafiori+ 2024]
- Alibaba’s Qwen models,Qwen2.5 Technical Report-[Qwen+ 2024]
- DeepSeek’s models
- DeepSeek LLM: Scaling Open-Source Language Models with Longtermism
-[DeepSeek-AI+ 2024] - DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model-[DeepSeek-AI+ 2024]
- DeepSeek-V3 Technical Report-[DeepSeek-AI+ 2024]
- DeepSeek LLM: Scaling Open-Source Language Models with Longtermism
- AI2’s OLMo 2, OLMo: Accelerating the Science of Language Models-[Groeneveld+ 2024],2 OLMo 2 Furious-[OLMo+ 2024]
- Levels of openness(開源的層次)
- 閉源模型(例如:GPT-4o),只允許通過API訪問。GPT-4 Technical Report-[OpenAI+2023]
- 開放權重的模型
Open-weight models
,例如: DeepSeek: 開放了權重,帶有架構細節,一些訓練細節,但沒有數據細節的論文。DeepSeek-V3 Technical Report-[DeepSeek-AI+ 2024] - 開源模型
Open-source models
,比如:OLMo: 權重,數據都是開源的,論文里有大多數的細節(但是沒有基本原理necessarily the rationale
以及失敗的實驗failed experiments
)。 OLMo: Accelerating the Science of Language Models-[Groeneveld+ 2024]
- Today’s frontier models(前沿模型:主要是帶有推理功能的模型)
- OpenAI’s o3, https://openai.com/index/openai-o3-mini/
- Anthropic’s Claude Sonnet 3.7,https://www.anthropic.com/news/claude-3-7-sonnet
- xAI’s Grok 3,https://x.ai/news/grok-3
- Google’s Gemini 2.5 ,https://blog.google/technology/google-deepmind/gemini-model-thinking-updates-march-2025
- Meta’s Llama 3.3 ,https://ai.meta.com/blog/meta-llama-3/
- DeepSeek’s r1,DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning——[DeepSeek-AI+ 2025]
- Alibaba’s Qwen 2.5 Max,https://qwenlm.github.io/blog/qwen2.5-max
- Tencent’s Hunyuan-T1,https://tencent.github.io/llm.hunyuan.T1/README_EN.html
[!NOTE]
總結:本次課程會
- 重點查看上面所提到的一些關鍵技術組件(ingredients),研究其原理。
- 竭盡所能找到最接近前沿模型的最佳實踐,所使用的信息基本都來自開源社區,同時去從閉源模型的一些只言片語的描述中去推理背后的某些內容~
4. 可執行的課件說明
原始的.py文件: https://github.com/stanford-cs336/spring2025-lectures/blob/main/lecture_01.py
在瀏覽器打開課件時: Trace-lecture-01 ,如果是首次加載(沒有瀏覽器緩存),可以看到有以下提示:
進一步查看項目的github文件夾:
- https://github.com/stanford-cs336/spring2025-lectures/tree/main/trace-viewer
- 是一個用js類的語言寫的一個前端類的項目,作為viewer來瀏覽/執行.py文件的
5. 課程設計
https://stanford-cs336.github.io/spring2025/
- 不建議上這門課:
- 如果你這學期有研究任務,和你的導師商量一下(因為作業量很大)
- 如果你對最新的技術感興趣,比如:multimodality, RAG,那你應該去選擇,因為這門課關注的是底層原理的實現,而不是最新/最熱的技術。
- 如果你想對自己現有的模型/系統進行優化得到更好的效果(直接使用prompt提示詞工程或者fine-tune微調現有的模型)
- 作業:
- 一共5個作業
- 不提供腳手架(scaffolding code),不給填空的代碼模版,自己從空文件開始搞~
- 但是會提供單元測試(
unit tests
)和適配器接口(adapter interfaces
)來幫助檢查是否正確運行 - 可以直接在本地的筆記本上跑test驗證正確性,使用cluster跑benchmark(不要直接用大參數的模型來debug~)
- 有的作業會有leaderboard,通常是在給定資源的情況下,想辦法降低困惑度(
perplexity
)
- 關于AI tools (e.g., CoPilot, Cursor)
- 可能會讓你的學習效果變差(你的學習效果需要自己負責~),想清楚用/不用/怎么用(老師的意思是:不建議使用)
其他:
- BPE算法
- 《從零構建大模型》系列(12):BPE算法——大語言模型的分詞基石
- 詳解BPE算法(Byte pair encoder )
- CS224N
- https://web.stanford.edu/class/cs224n/
6. 課程內容
課程的內容主要就是圍繞效率(efficiency),即:
- 給定數據(data)和硬件(hardware)的情況下,如何在固定資源的情況下訓練出最好的模型
- 比如:給你
Common Crawl
數據集和可以用兩周的32張H100卡,你會怎么做?
設計決策
- 比如分詞器,架構;比如系統優化;比如數據處理等
- 課程整體被分為上述的五個部分,并且會輪流講述其中的每一個部分~
作業一和作業二是最耗時的,作業三會好一些~
6. 1 basic部分
- 目標:讓整個pipeline能跑起來的一個基礎版本,沒有任何優化或者高級處理~
- 組件:分詞器tokenization, 模型架構model architecture,訓練 training,
6.1.1 分詞器tokenization
分詞器:
課程里主要使用:
- Byte-Pair Encoding (BPE) —— Neural Machine Translation of Rare Words with Subword Units- [Sennrich+ 2015]
- 這種方法相對簡單,同時目前仍然在使用
另外有一些不需要分詞(Tokenizer-free approaches),直接對原始字節進行編碼的很有前景的方法(雖然目前還沒有被應用于前沿模型):
- ByT5: Towards a token-free future with pre-trained byte-to-byte models-[Xue+ 2021]
- MEGABYTE: Predicting Million-byte Sequences with Multiscale Transformers-[Yu+ 2023]
- Byte Latent Transformer: Patches Scale Better Than Tokens-[Pagnoni+ 2024]
- T-FREE: Subword Tokenizer-Free Generative LLMs via Sparse Representations for Memory-Efficient Embeddings-[Deiseroth+ 2024]
6.1.2 架構Architecture
完成分詞后,即把一個序列/一段字符串/文字變成一個整數序列后;
接下來,我們就會在這個整數序列上定義一個模型架構(即:模型的輸入是一串分詞得到的整數序列)。
這里的架構主要的部分就是transformer, Attention Is All You Need-[Vaswani+ 2017]
似乎有一種錯覺,從2017年transformer出現以后,大家好像都只用transformer了,事實上這不是錯覺,是真的。但是從2017年到現在,transformer的主體架構沒有發生大的改變,但是也產生了很多變體(Variants
),這些改變加在一起,就有很大的不同了
- Activation functions: ReLU, SwiGLU(新的激活函數)
- GLU Variants Improve Transformer- [Shazeer 2020]
- Positional encodings: sinusoidal, RoPE(新的位置編碼)
- RoFormer: Enhanced Transformer with Rotary Position Embedding-[Su+ 2021]
- Normalization: LayerNorm, RMSNorm(不再使用層歸一化,而是使用RMSNorm)
- Layer Normalization-[Ba+ 2016]
- Root Mean Square Layer Normalization-[Zhang+ 2019]
- Placement of normalization: pre-norm versus post-norm(norm層放置的位置和原始transformer不同)
- On Layer Normalization in the Transformer Architecture-[Xiong+ 2020]
- MLP: dense, mixture of experts(MLP是稠密的/dense,將MLP換為MOE稀疏)
- Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer -[Shazeer+ 2017]
- Attention: full, sliding window, linear(多種注意力機制:full-attention等,主要是為了防止quadratic blowup(二次爆炸))
- Mistral 7B- [Jiang+ 2023]
- Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention-[Katharopoulos+ 2020]
- 常用的FullAttention性能對比
- Mistral SWA(Sliding window attention)的一些理解
- Lower-dimensional attention: group-query attention (GQA), multi-head latent attention (MLA)(低維度的注意力機制:GQA,MLA)
- GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints-[Ainslie+ 2023]
- DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model-[DeepSeek-AI+ 2024]
- State-space models: Hyena(更激進的替代transformer的模型,不使用注意力機制,基于空間狀態的模型)
- Hyena Hierarchy: Towards Larger Convolutional Language Models-[Poli+ 2023]
6.1.3 training
- Optimizer (e.g., AdamW, Muon, SOAP)
- Adam: A Method for Stochastic Optimization-Kingma+ 2014
- Adam的一個變體
- Decoupled Weight Decay Regularization-[Loshchilov+ 2017]
- Muon: An optimizer for hidden layers in neural networks-[Keller 2024]
- SOAP: Improving and Stabilizing Shampoo using Adam-[Vyas+ 2024]
- Adam: A Method for Stochastic Optimization-Kingma+ 2014
- Learning rate schedule (e.g., cosine, WSD)
- SGDR: Stochastic Gradient Descent with Warm Restarts-[Loshchilov+ 2016]
- MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies-[Hu+ 2024]
- Batch size (e…g, critical batch size)
- An Empirical Model of Large-Batch Training-[McCandlish+ 2018]
- Regularization (e.g., dropout, weight decay)
- Hyperparameters (number of heads, hidden dimension): grid search
訓練當中有很多細節,一個精心調整過的網絡和一個普通的transformer差距還是很大的~
6.1.4 作業一
- Github鏈接: https://github.com/stanford-cs336/assignment1-basics
- 完整的作業描述pdf文件:https://github.com/stanford-cs336/assignment1-basics/blob/main/cs336_spring2025_assignment1_basics.pdf
作業一大致描述:
- 實現一個BPE分詞器(tokenizer)
- 實現Transformer, cross-entropy loss, AdamW optimizer, training loop
- 注意,可以使用pytorch,但是不可以直接用現成的函數~
- 提供了huggingface上的TinyStories數據集和OpenWebText的一個子集
- 有一個leaderboard:
- 你擁有的資源:H100顯卡,90分鐘時間
- 目標:最小化OpenWebText上的困惑度(perplexity)
- 去年的排行榜:stanford-cs336/spring2024-assignment1-basics-leaderboard
- 可以看到,基本都是用的
wandb
這個可視化訓練過程的框架
6.2 systems部分
- 目標:優化basic的內容——主要是如何充分利用硬件
- 組件:內核(kernels), 并行(parallelism), 推理(inference)
6.2.1 kernel(GPU內核)
如上圖所示,右側的GPU其實是由128個左側這樣的東西組成的
- 這是GPU
- 內存的部分其實是在右圖的兩側(不是綠色格子)的灰色格子
- 計算一定是發生在顯存中的,但是數據可以存儲在任何地方,如何有效的組織計算來達到最高的計算效率??
更詳細的圖在NVIDIA的博客文章中: NVIDIA Ampere Architecture In-Depth
- 左圖圖像鏈接:https://developer-blogs.nvidia.com/wp-content/uploads/2021/guc/raD52-V3yZtQ3WzOE0Cvzvt8icgGHKXPpN2PS_5MMyZLJrVxgMtLN4r2S2kp5jYI9zrA2e0Y8vAfpZia669pbIog2U9ZKdJmQ8oSBjof6gc4IrhmorT2Rr-YopMlOf1aoU3tbn5Q.png
- 右圖圖像鏈接:https://developer.download.nvidia.com/devblogs/ga100-full-gpu-128-sms.png
計算和數據的關系,可以類比為:
- warehouse : DRAM :: factory : SRAM
- DRAM就是倉庫,是存儲數據的地方
- SRAM就是工廠,是計算/處理數據的地方
竅門/tricks:通過最小化數據移動來組織計算,以最大限度地利用gpu
使用CUDA/Triton/CUTLASS/ thundercats來寫內核
- 注意,這里使用的Triton是OpenAI開發的。
- Triton是一種并行編程語言和編譯器。它旨在提供一個基于python的編程環境,用于高效地編寫能夠在現代GPU硬件上以最大吞吐量運行的自定義DNN計算內核。
- triton-lang/triton
- https://triton-lang.org/main/index.html
- Introducing Triton: Open-source GPU programming for neural networks: 2021年7月8號就有了
- 而不是之前NVIDIA開發的triton-inference-server/server
- Triton推理服務器是一個開源的推理服務軟件,簡化了人工智能推理。Triton使團隊能夠部署來自多個深度學習和機器學習框架的任何AI模型,包括TensorRT、TensorFlow、PyTorch、ONNX、OpenVINO、Python、RAPIDS FIL等。
6.2.2 Parallelism(并行)
GPU之間的數據移動速度更慢,除非使用NVIDIA特定的一種架構(NVLink
(或者被稱為:NVSwitch
) 高速 GPU 互連)
- NVIDIA NVLink 和 NVLink 交換機
- 軟件/編程角度可以:
- 使用集合操作,例如:gather, reduce, all-reduce等
- 進行跨GPUs間的數據共享,例如:parameters, activations, gradients, optimizer states
- 如何劃分計算,常見的并行方案有:
- data parallelism 數據并行
- tensor parallelism 張量并行
- {pipeline,sequence} 并行
圖自: https://arthurchiao.art博客的文章
- Practical Storage Hierarchy and Performance: From HDDs to On-chip Caches(2024)
- 或者中文文章:GPU 進階筆記(一):高性能 GPU 服務器硬件拓撲與集群組網(2023)
6.2.3 Inference
- 目標: 在實際使用模型時,主要就是對給定的prompt生成tokens
推理也用于強化學習(RL,reinforcement learning), 測試時計算(TTC,test-time compute),評估(evaluation)
- TTC: 從System-1到System-2:AI推理中的Test-Time Compute革命
整體上來看, 使用時的推理計算(inference compute (every use,每次使用)), 遠遠超過了訓練時的計算( training compute (one-time cost, 一次性開銷))
- Prefill階段:
- 給定所有的輸入的prompt的tokens, 然后通過模型的運行,得到一些激活值。
- 由于一次能看到所有輸入,能夠一次性處理完所有,就類似于訓練/training。
- 這種情況很容易通過并行加速,因此
Prefill
階段的瓶頸在于計算——compute-bound(受限于計算)
- Decode階段:
- 通過自回歸的方式每次逐個生成token,無法并行,很難充分利用GPU
- 同時由于一直在移動數據,導致主要受限于內存(memory-bound)
- 針對
Decode
階段的一些加速方案:- 使用更便宜(/更小)的模型(比如通過:裁剪-pruning,量化-quantization,蒸餾-distillation)
- 推測/投機解碼(Speculative decoding)技術: 使用一個更便宜的"draft"模型先產生多個tokens,然后使用"full"模型并行打分(精確解碼),如果在某種規則下,這些tokens剛好是需要的/正確的,那就可以直接接受了~
- 其他系統優化,比如:KV caching, batching
相關參考:
- NVIDIA-blog: Mastering LLM Techniques: Inference Optimization
- huggingface-blog: Topic 23: What is LLM Inference, it’s challenges and solutions for it
- Speculative Decoding 推測解碼方案詳解
- Speculative Decoding: 總結、分析、展望
- 大模型推理加速之Speculative Decoding/投機解碼(上)
6.2.4 作業二
- Github鏈接: https://github.com/stanford-cs336/assignment2-systems
- 完整的作業描述pdf文件:https://github.com/stanford-cs336/assignment2-systems/blob/main/cs336_spring2025_assignment2_systems.pdf
作業二大致描述:
- 使用
Triton
實現一個fused RMSNorm kernel - 實現分布式的數據并行訓練(distributed data parallel training)
- 實現優化器狀態分片(
optimizer state sharding
)- Optimizer state sharding (ZeRO)
- 一些模型并行(model parallelism),例如FSDP,從頭實現會比較復雜,因此我們只需要實現一個簡化版,但是鼓勵大家去了解完整的版本,課上會講解完整的版本
- 對上述實現進行基準測試和性能分析(
Benchmark and profile
)
6.3 scaling_laws部分
6.3.1 說明
- 目標:在小規模上進行實驗,搞清楚原理等內容;預測大規模實驗上的超參/損失(hyperparameters/loss)
- 關鍵問題:
- 如果給了你一定的計算資源(FLOPs budget,flops預算),該選擇什么樣尺寸的模型呢?
- 如果選擇了比較大的模型,那就只能用比較少的數據訓練
- 如果選擇了比較小的模型,就可以用比較多的數據訓練
- 在給定的計算資源下,
模型size
和數據規模
的最佳平衡點是什么?
- 有廣泛的研究回答了這個問題,Compute-optimal scaling laws(計算最優規模定律)
- OpenAI: Scaling Laws for Neural Language Models-[Kaplan+ 2020]
- DeepMind: Training Compute-Optimal Large Language Models-[Hoffmann+ 2022], chinchilla optimal
圖自 Training Compute-Optimal Large Language Models-[Hoffmann+ 2022]
PS: 沒有在論文里直接找到以下結論(可能是我看的太粗了)
𝐿(𝑁, 𝐷) as a function of the number of model parameters 𝑁, and the number of training tokens, 𝐷.
Since the computational budget 𝐶 is a deterministic function FLOPs(𝑁, 𝐷) of the number of seen
training tokens and …
根據論文里的以上內容:
- NNN表示 模型的參數量
- DDD表示 訓練的tokens的數量
- CCC表示 給的計算的FLOPS
計算公式:
D?=20N?D^* = 20N^*D?=20N?
即:模型參數量為NNN的模型,應該用20×N20\times N20×N大小的語料tokens來訓練(這里并沒有考慮推理的情況),例如:1.4B參數量的模型應該在28B tokens的語料上訓練)
6.3.2 作業三
- Github鏈接: https://github.com/stanford-cs336/spring2024-assignment3-scaling
- 或者2025年最新的:https://github.com/stanford-cs336/assignment3-scaling/tree/main
- 完整的作業描述pdf文件:https://github.com/stanford-cs336/spring2024-assignment3-scaling/blob/master/cs336_spring2024_assignment3_scaling.pdf
作業三大致描述:
- 我們基于先前的運行結果定義一個訓練API(超參數 → 損失),輸入一套訓練的超參,輸出損失
- 在FLOPs預算范圍內提交“訓練任務”,并收集數據點
- 根據數據點擬合一個縮放定律
- 提交針對放大后超參數的預測結果
- 排行榜:在給定FLOPs預算下最小化損失
6.4 data部分
6.4.1 說明
數據決定了模型的能力,比如:在多語言(multilanguage)的數據集上訓練的llm就具有多語言能力;在code數據集上訓練的llm就具有code的能力;數學數據集同理~
上圖來論文-arxiv: The Pile: An 800GB Dataset of Diverse Text for Language Modeling
參考:
- Pile
- arxiv: The Pile: An 800GB Dataset of Diverse Text for Language Modeling
- arxiv: Datasheet for the Pile
評估(Evalution),如何評價一個模型的好壞,包括以下內容:
- Perplexity(
困惑度
): textbook evaluation for language models - Standardized testing(
標準測試
/基于基準數據集的測試) (e.g., MMLU, HellaSwag, GSM8K)- 如果是基座模型,就使用標準測試
- Instruction following(
指令跟隨
基準數據集測試) (e.g., AlpacaEval, IFEval, WildBench)- 如果是對話模型,就使用指令跟隨測試
- Scaling test-time compute: chain-of-thought, ensembling
- 如果包含思維鏈,以及模型集成,該怎么測試
- LM-as-a-judge: evaluate generative tasks
- 以及使用LM作為裁判,來評估生成式的任務
- Full system: RAG, agents
- 如果是添加了RAG或者智能體的系統,該如何去進行評測
Data curation(數據監管)
- 數據并不是憑空產生的
- 常見的數據來源:webpage(scrawled from the Internet), books, arXiv papers, GitHub code, etc.
- 互聯網數據,比如:
Common Crawl
爬的數據,遠比你想象的更tra
- 互聯網數據,比如:
- Appeal to fair use to train on copyright data? Henderson+ 2023
- 關于訓練所使用的數據的版權問題
- Might have to license data (e.g., Google with Reddit data), article
- 雖然互聯網上有很多社區,比如知乎,csdn等,但是實際上,想要使用這些社區的數據,是需要購買
license
(許可)的
- 雖然互聯網上有很多社區,比如知乎,csdn等,但是實際上,想要使用這些社區的數據,是需要購買
- Formats: HTML, PDF, directories (not text!)
- 爬取的數據,大多都是HTML,PDF等格式,并不是直接可用的文本
Data processing
- Transformation: convert HTML/PDF to text (preserve content, some structure, rewriting)
- 轉換,把HTML/PDF等格式轉為純文本內容
- 這是一個有損過程(lossy process),
- 關鍵在于保留內容,以及一些結構(目錄/標題,段落等的區分)
- Filtering: keep high quality data, remove harmful content (via classifiers)
- 過濾主要是為了得到更高質量的數據
- 一般會使用分類器來過濾有害內容,比如:敏感信息等~
- Deduplication: save compute, avoid memorization; use Bloom filters or MinHash
- 去重
6.4.2 作業四
- Github鏈接: https://github.com/stanford-cs336/spring2024-assignment4-data
- 完整的作業描述pdf文件:https://github.com/stanford-cs336/spring2024-assignment4-data/blob/master/cs336_spring2024_assignment4_data.pdf
大致描述:
- 會提供原始的
Common Crawl
文件,親自感受下互聯網一手數據的處理難度~- 要求將
Common Crawl HTML
轉為text
- 要求將
- 訓練分類器,用來過濾高質量數據,以及有害信息;
- 使用
MinHash
來進行去重; - Leaderboard: 在給定的token下,最小化困惑度(minimize
perplexity
given token budget);
6.5 alignment部分
6.5.1 說明
有了數據,和基本的一些網絡組件之后,就可以開始訓練模型了。
此時得到的模型是 base model
(基座模型)
- 基座模型的作用,根據當前輸入,預測下一個token。
- 基座模型具有巨大的潛力
為了讓基座模型能夠更好的為人所使用,需要進行對齊/(alignment),對齊主要有以下三個作用:
- 更好的遵循指令(
follow instructions
) - 調整風格(指定格式,例如: json/md; 長度,長篇/短篇;語調:嚴謹/詼諧)
- 保證安全(拒絕回答有害問題)
對齊通常包含兩個階段:
- supervised fine tuning(即: SFT)
def supervised_finetuning():"""Supervised finetuning (SFT)Instruction data: (prompt, response) pairssft_data: list[ChatExample] = [ChatExample(turns=[Turn(role="system", content="You are a helpful assistant."),Turn(role="user", content="What is 1 + 1?"),Turn(role="assistant", content="The answer is 2."),],),]"""Data often involves human annotation.Intuition: base model already has the skills, just need few examples to surface them. [Zhou+ 2023]Supervised learning: fine-tune model to maximize p(response | prompt).
- SFT使用的數據,一般都包含人類標注
- [Zhou+ 2023]——LIMA: Less Is More for Alignment:
base model
已經包含大部分的內容,只需要一些例子來展示(fewshot的作用,舉一反三~) - SFT的目的: 最大化概率
p(response | prompt)
- learning_from_feedback()
- 在SFT得到初步的指令遵循模型后,如果想要改進,可以:1)找更多的SFT數據或者人工標注更多;2)不使用昂貴的標注,考慮使用基于反饋的數據進行訓練,這樣標注更便宜~
- 偏好數據(Preference data):
Data: generate multiple responses using model (e.g., [A, B]) to a given prompt.User provides preferences (e.g., A < B or A > B).preference_data: list[PreferenceExample] = [PreferenceExample(history=[Turn(role="system", content="You are a helpful assistant."),Turn(role="user", content="What is the best way to train a language model?"),],response_a="You should use a large dataset and train for a long time.",response_b="You should use a small dataset and train for a short time.",chosen="a",)]
- Verifiers:①
Formal verifiers
(e.g., for code, math)
比如你要進行數學或者代碼垂直領域的訓練,則可以直接用計算器或者編譯器等執行結果來進行驗證。②Learned verifiers
: train against an LM-as-a-judge(訓練一個llm來作為評價器,即:習得驗證器) - Algorithms:強化學習算法也可以在不標注數據的情況下,進一步優化模型的性能
- Proximal Policy Optimization (PPO) from reinforcement learning
[Schulman+ 2017][Ouyang+ 2022]: 最早開發并用于指令調優的強化學習算法是 PPO - Direct Policy Optimization (DPO): for preference data, simpler
[Rafailov+ 2023]:如果只有偏好數據
,則使用更簡單的DPO算法,也會有很好的效果。(如果是Verifiers data,則必須要用完全的強化學習,不能用DPO) - Group Relative Preference Optimization (GRPO): remove value function
[Shao+ 2024]: Deepseek開發的通過移除PPO的value function,簡化并使的PPO變得更高效。
- Proximal Policy Optimization (PPO) from reinforcement learning
6.5.2 作業五
- Github鏈接: https://github.com/stanford-cs336/spring2024-assignment5-alignment
- 完整的作業描述pdf文件:https://github.com/stanford-cs336/spring2024-assignment5-alignment/blob/master/cs336_spring2024_assignment5_alignment.pdf
大致描述:
- Implement supervised fine-tuning,實現SFT
- Implement Direct Preference Optimization (DPO),實現DPO
- Implement Group Relative Preference Optimization (GRPO),實現GRPO
- 以及上述結果的評估evaluation
6.6 回顧總結
Efficiency drives design decisions
效率是第一設計原則~
Today, we are compute-constrained, so design decisions will reflect squeezing the most out of given hardware.
- Data processing: avoid wasting precious compute updating on bad / irrelevant data
- 數據預處理的時候,會進行比較激進的filter,防止寶貴的計算資源浪費在差的/不想關的數據上
- Tokenization: working with raw bytes is elegant, but compute-inefficient with today’s model architectures.
- 能夠直接對字節數據進行訓練肯定是更好的,但是對于現有的模型架構來說,這樣計算效率不高
- 因而采用分詞的方法,來提升訓練效率(字節數據的粒度更細,需要的計算資源會更多,分詞相當于減少了token總量)
- Model architecture: many changes motivated by reducing memory or FLOPs (e.g., sharing KV caches, sliding window attention)
- 模型結構在設計時,也更多是考慮到計算效率,比如:共享KV caches,以及滑動窗口注意力機制等
- transformers架構本身也是一個高效計算的結構
- Training: we can get away with a single epoch!
- 目的是看到更多的數據,而不是在某個數據點上花費大量的時間
- Scaling laws: use less compute on smaller models to do hyperparameter tuning
- 規模定律則就更是為了效率服務了,目的就是想用更少的計算來確定超參
- Alignment: if tune model more to desired use cases, require smaller base models
- 如果對齊是到更垂直的場景,那么需要的base model可以更小
Tomorrow, we will become data-constrained… (對于頂尖實驗室來說,已經是數據受限,而不是計算資源受限了)
GPT-5發布解讀:期待與現實的落差,AI發展的新轉折點中,提到:
- GPT-5大量使用合成數據、建立數據分級分類體系,以及開發通用的數據質量評估模型,這些工程層面的優化在一定程度上緩解了高質量數據稀缺的問題
一文讀懂GPT-5發布會|價格屠夫、編程驚艷,新功能乏善可陳
- 在o1模型推出時,大家一直猜想的由推理模型產生高質量數據,讓預訓練模型越來越強,再由此通過強化學習加強下一代推理模型的“左腳踩右腳”式訓練方法,被OpenAI證實了。
- 不過從效果上看,這個方法明顯Scaling的不那么有效。數據的困境,還沒有被完全解決。