CS336——1. Overview

文章目錄

  • 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計算的比例,可以發現:

  1. FFN使用的就是MLP,MHA表示多頭注意力機制層
  2. 隨著scale的增大,MLP層消耗的計算占比越來越大,占據了主導位置,而MHA占比則越來越小(準確的說,是除了MLP之外的層,占比都是越來越少的)。
  3. 因此,如果你只看小語言模型,把大量的時間花在MHA多頭注意力機制的優化上,那么你的優化方向就是錯誤的。。。因為在大語言模型上,MHA的作用很有限

Example 2: emergence of behavior with scale,圖自論文-Emergent Abilities of Large Language Models-鏈接

在這里插入圖片描述
如上圖所示:

  1. 橫軸表示訓練時的flops(越大表示模型越大)
  2. 在一定范圍內時,例如:101810^{18}1018~102210^{22}1022之間,模型在各個任務上的準確率增長都不明顯,幾乎是平的
  3. 但是在模型規模(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]
  • 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]
    • 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]
總結:本次課程會

  1. 重點查看上面所提到的一些關鍵技術組件(ingredients),研究其原理。
  2. 竭盡所能找到最接近前沿模型的最佳實踐,所使用的信息基本都來自開源社區,同時去從閉源模型的一些只言片語的描述中去推理背后的某些內容~

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]
  • 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

作業一大致描述:

  1. 實現一個BPE分詞器(tokenizer)
  2. 實現Transformer, cross-entropy loss, AdamW optimizer, training loop
    • 注意,可以使用pytorch,但是不可以直接用現成的函數~
  3. 提供了huggingface上的TinyStories數據集和OpenWebText的一個子集
  4. 有一個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個左側這樣的東西組成的

  1. 這是GPU
  2. 內存的部分其實是在右圖的兩側(不是綠色格子)的灰色格子
  3. 計算一定是發生在顯存中的,但是數據可以存儲在任何地方,如何有效的組織計算來達到最高的計算效率??

更詳細的圖在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

作業二大致描述:

  1. 使用Triton實現一個fused RMSNorm kernel
  2. 實現分布式的數據并行訓練(distributed data parallel training)
  3. 實現優化器狀態分片(optimizer state sharding)
    • Optimizer state sharding (ZeRO)
    • 一些模型并行(model parallelism),例如FSDP,從頭實現會比較復雜,因此我們只需要實現一個簡化版,但是鼓勵大家去了解完整的版本,課上會講解完整的版本
  4. 對上述實現進行基準測試和性能分析(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 …
根據論文里的以上內容:

  1. NNN表示 模型的參數量
  2. DDD表示 訓練的tokens的數量
  3. 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

作業三大致描述:

  1. 我們基于先前的運行結果定義一個訓練API(超參數 → 損失),輸入一套訓練的超參,輸出損失
  2. 在FLOPs預算范圍內提交“訓練任務”,并收集數據點
  3. 根據數據點擬合一個縮放定律
  4. 提交針對放大后超參數的預測結果
  5. 排行榜:在給定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),如何評價一個模型的好壞,包括以下內容:

  1. Perplexity(困惑度): textbook evaluation for language models
  2. Standardized testing(標準測試/基于基準數據集的測試) (e.g., MMLU, HellaSwag, GSM8K)
    • 如果是基座模型,就使用標準測試
  3. Instruction following(指令跟隨基準數據集測試) (e.g., AlpacaEval, IFEval, WildBench)
    • 如果是對話模型,就使用指令跟隨測試
  4. Scaling test-time compute: chain-of-thought, ensembling
    • 如果包含思維鏈,以及模型集成,該怎么測試
  5. LM-as-a-judge: evaluate generative tasks
    • 以及使用LM作為裁判,來評估生成式的任務
  6. 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(許可)的
  • 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),對齊主要有以下三個作用:

  1. 更好的遵循指令(follow instructions)
  2. 調整風格(指定格式,例如: json/md; 長度,長篇/短篇;語調:嚴謹/詼諧)
  3. 保證安全(拒絕回答有害問題)

對齊通常包含兩個階段

  1. 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)
  2. 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變得更高效。

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的不那么有效。數據的困境,還沒有被完全解決。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921753.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921753.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921753.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ncnn-Android-mediapipe_hand 踩坑部署實錄

目錄 同時有 nanodet 和yolox,可以做到10fps 沒測試:yolox hand ncnn-Android-mediapipe_hand hand 關鍵點21個模型: ncnn版本: 跑通后,手部關鍵點集中在圖像左上角,經過排查,原因是ncnn版本不對。 CMakeLists.txt 同時有 nanodet 和yolox,可以做到10fps 無訓練…

OSPF實驗:外部路由引入

OSPF外部路由引入實驗目的&#xff1a;除了內部通信外&#xff0c;企業還需要與外部網絡進行通信&#xff0c;不同企業網絡之間存在互訪需求。假設A公司網絡部署OSPF協議實現內部通信&#xff0c;因業務發展&#xff0c;需要訪問B公司的一臺WEB服務器。網絡拓撲圖&#xff1a;公…

網絡上那些在線 PDF 轉換工具安全嗎?轉換 PDF 需要注意什么

PDF 格式憑借跨設備兼容、格式穩定的優勢&#xff0c;早已成為個人辦公、企業協作中不可或缺的文件格式。無論是壓縮 PDF 以滿足郵件附件大小限制&#xff0c;還是將 Word 文檔轉成 PDF 確保排版不變&#xff0c;我們總能遇到需要 PDF 工具的場景。也正因如此&#xff0c;網上涌…

生成對抗網絡(GAN)

目錄 1 引言 2 生成對抗網絡的基本原理 2.1 生成器與判別器 2.2 對抗訓練過程 2.3 與傳統生成模型的比較 3 GAN的衍生模型 3.1 架構創新與深度卷積GAN 3.2 損失函數優化與Wasserstein GAN 3.3 條件生成與可控合成 3.4 跨域轉換與CycleGAN 3.5 高分辨率生成與規模化演…

Vue 3.6 Alien Signals:讓響應式性能飛躍式提升

概述 Vue 3.6 引入了革命性的 Alien Signals 技術&#xff0c;這是一種全新的響應式系統&#xff0c;基于細粒度響應式原理&#xff0c;為 Vue 應用帶來了前所未有的性能提升和開發體驗優化。 什么是 Alien Signals&#xff1f; Alien Signals 是 Vue 3.6 內置的輕量級響應式…

React Hooks 報錯?一招解決useState問題

文章目錄問題分析問題 在使用import { useState } from "react";時報錯&#xff1a;Youre importing a component that needs useState. This React Hook only works in a Client Component. To fix, mark the file (or its parent) with the “use client” direct…

數據集成平臺怎么選?從ETL到CDC再到iPaaS的全景對比

前言&#xff1a;一個制造企業的真實困境 近期在為某家制造企業做系統改造時&#xff0c;我們遇到了一個典型的數據集成難題。這家企業運營著獨立的ERP、CRM和MES等30業務系統&#xff0c;看似完備的信息化基礎卻存在嚴重的數據割裂問題。 銷售團隊在CRM中查看的庫存數據總是滯…

驅動開發系列72 - GLSL編譯器實現 - 指令選擇(二)

前面介紹過,在指令選擇時會執行一系列優化過程,本節介紹下“比特級常量傳播優化”的實現。 一:什么是比特級常量傳播優化 舉一個GLSL語言例子: #version 450layout(location = 0) in vec4 inColor; layout(location = 0) out vec4 outColor;void main() {vec4 tmp = inCo…

Redis(緩存)

一 什么是緩存1. 生活上的例子比如有一個行李箱和一個手機&#xff0c;每次把手機放到行李箱在拿出來肯定很麻煩&#xff0c;如果放到褲兜里就會方便很多&#xff0c;所以褲兜算作行李箱的一個緩存&#xff0c;不僅僅是褲兜&#xff0c;甚至可以一直拿在手上等其他有存儲介質的…

openssl簡介

一、openssl是什么 OpenSSL是一個開源的、功能強大的軟件庫和工具包,它實現了傳輸層安全(TLS) 和安全套接層(SSL) 協議以及一個全面的密碼學原語庫。它是用 C 語言編寫的,為其帶來了高性能和跨平臺的特性。 作為庫(Library):開發者可以將其代碼集成到自己的應用程序(…

左值引用與右值引用

左值和右值 左值&#xff08;lvalue&#xff09;&#xff1a;在表達式結束后仍然存在&#xff0c;可以取地址。簡單理解&#xff1a;有名字、有存儲位置。 比如變量、數組元素、對象等。 右值&#xff08;rvalue&#xff09;&#xff1a;臨時值&#xff0c;表達式結束后就消失&…

中小企業SAP B1 HANA部署全解析:成本與云端優勢

目錄 云端部署成本構成與效益分析 軟件許可費 硬件成本 服務費 培訓費 技術優勢 快速部署 彈性擴展 高可用性 云端部署適用場景 IT預算有限的中小企業 分布在不同地區的機構 需要快速上線的情況 本地部署適用場景 數據監管嚴格的行業 擁有完善IT基礎設施企業 …

Django Channels實戰:WebSocket實時通信開發

在當今Web應用開發中&#xff0c;實時通信功能已成為提升用戶體驗的關鍵要素。傳統的HTTP請求-響應模式難以滿足即時聊天、實時通知、協同編輯等場景的需求。本文將深入探討如何利用Django Channels框架實現WebSocket通信&#xff0c;為你的Django項目添加實時交互能力。為什么…

大數據畢業設計選題推薦-基于大數據的懂車帝二手車數據分析系統-Spark-Hadoop-Bigdata

?作者主頁&#xff1a;IT研究室? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

python 通過selenium調用chrome瀏覽器

更新selenium pip install -U selenium 下載瀏覽器和對應的驅動 Chrome for Testing availability 一般選穩定版本的&#xff0c;我是windows的就下win64的&#xff0c; 下載兩個zip包后&#xff0c;把chromedriver.zip中的exe解壓縮放到chrome_win64文件夾中 from selen…

Codeium:免費開源代碼自動補全工具,高效管理代碼片段告別開發卡殼

你有沒有過這種尷尬時刻&#xff1f;寫代碼時突然想不起來常用的函數寫法&#xff0c;比如 Python 的字典推導式&#xff0c;或者 MySQL 的聯表查詢語句&#xff0c;翻之前的項目文件翻半天&#xff0c;好不容易找到又得復制粘貼 —— 要是遇到換電腦&#xff0c;之前存的代碼片…

嵌入式系統學習Day35(sqlite3數據庫)

一.數據庫 1、分類&#xff1a;大型中型小型 ORACLEMYSQL/MSSQL : SQLITE DBll powdb 關系型數據庫 2、名詞&#xff1a; DB數據庫 select update database DBMS數據庫管理系統 MIS管理信息系統 OA辦公自動化 3、嵌入式數據庫&#xff1a; sqlite3www.sqlite.org www.kernal.…

無人機自組網系統的抗干擾技術分析

由多個無人機和地面組成的MESH自組網系統是一種去中心化的無線通信網絡 。系統由多個機載和地面通信終端構成&#xff0c;其核心特點是“無固定中心”&#xff0c;采用去中心化架構&#xff0c;所有節點地位平等 。在這種網狀結構中&#xff0c;所有通信節點都能直接相互通信&a…

mac 安裝 nginx

安裝 nginx &#xff1a;brew install nginx檢查 nginx 安裝是否成功&#xff1a;nginx -vnginx version: nginx/1.29.1查看 nginx 啟動狀態&#xff1a;sudo brew services info nginx可以看到服務還未啟動nginx (homebrew.mxcl.nginx)Running: ?Loaded: ?Schedulable: ?ng…