所有標籤6.5940 的前兩講先證明問題存在,再給量尺。L1 用一張圖說明模型參數量的成長遠快於 GPU 記憶體,並指出雲端 GPU 有 80GB 記憶體、微控制器只有 320kB。L2 把效率指標分成記憶體與運算兩類:#Parameters、model size、peak activations,以及 MAC、FLOP、OP。以 AlexNet 為例,它有 61M 參數、724M MACs;在微控制器上真正先爆掉的常常是 activation,不是參數。Lab 0 用 CIFAR-10 上的 VGG 變體(9.2M 參數、606M MACs)當之後幾個 lab 的起點。
MIT 6.5940(TinyML and Efficient Deep Learning Computing)教的是讓模型變小、變快、塞進手機和微控制器的技術:pruning、quantization、NAS、distillation、LLM 部署與分散式訓練。2025 年秋季因 Song Han 休假停開,2025 年課頁回 404;Fall 2026 正在上,截至 2026-09-30 只放出 L1–L6 與 Lab 0–1。本系列因此以最近一屆完整的 Fall 2024 為主幹:23 講投影片、23 支錄影、Lab 0–5 都公開,屬 A3;Fall 2026 列 A2,每篇另附對照。
MIT 6.5940 Fall 2024 的最後兩講分成兩半。L22 前半是 13 頁的 Course-Summary.pdf:用推論、訓練、特定應用三塊加上 System/Algorithm 兩軸重畫整門課,再交代期末專題的 7 項評分。L22 後半的 Quantum ML Part I 只有錄影、沒有投影片。L23(Hanrui Wang 主講,99 頁)講參數化量子電路(PQC):資料編碼、parameter-shift 梯度、雜訊下的機率式梯度剪枝(QOC)、TorchQuantum 函式庫,以及用 SuperCircuit 搜尋加閘剪枝的 QuantumNAS。讀起來像把前面學的 supernet 和 magnitude pruning 在量子電路上重演一次。Fall 2026 已把這兩講換成 Guest Lecture。
Diffusion 慢,是因為同一個大網路要從純雜訊一路跑幾十到上千步。L18 先把 DDPM、條件生成、latent diffusion、SDEdit、DreamBooth 講完,再分三條路加速:少跑幾步(DDIM 跳步、progressive distillation 每輪把步數減半)、每步少算(DC-AE 把圖壓 64 倍、只重算被編輯的 1.7% 區域省 8.2 倍 MACs、SVDQuant 把 FLUX 壓到 4-bit)、多卡分攤(DistriFusion 8 張 A100 最多快 6.1 倍)。
GPT-3 的 fp16 權重就要 350GB,一張 80GB 的 A100 放不下,更別說梯度和 Adam 狀態。L19 講怎麼切:資料平行、ring all-reduce、ZeRO-1/2/3(每張卡能訓練的模型從 5B 推到 320B)、GPipe 把 pipeline 利用率從 25% 提到 57%、Megatron 式 tensor parallelism、Ulysses 與 Ring Attention 的 sequence parallelism。L20 講切完之後的通訊瓶頸:Alpa 自動搜平行策略、DGC 把梯度壓 277–608 倍還不掉精度、TernGrad 把梯度量化成三值,以及用延遲更新蓋掉網路延遲的 DGA。
第 16 講談 ViT:高解析度下 attention 成本隨解析度平方成長,window attention(Swin)把計算限制在局部視窗,EfficientViT 用 ReLU linear attention 把複雜度降到線性再補回局部與多尺度能力,SparseViT 剪掉不重要的視窗;自監督(對比學習、CLIP、MAE)解決 ViT 需要大量標註的問題;最後 HART 用離散 token 加殘差 diffusion,比 diffusion 模型高出數倍吞吐量。第 17 講針對三種冗餘:GAN 的 2D 空間冗餘(GAN Compression、AnyCost GAN、DiffAugment)、影片的時間冗餘(TSM 零 FLOPs 的時間建模)、點雲的 3D 稀疏(PVCNN、SPVCNN、BEVFusion)。Fall 2026 排程已拿掉第 17 講。
這篇是 Fall 2026 的材料,不屬於本系列主幹的 Fall 2024。Fall 2026 把 Lab 1 從剪枝換成「Efficient AI Fundamentals」(lab1_gpu_basics.zip):Part 1 手刻三層迴圈的 GEMM、算 MAC/FLOPs/I/O;Part 2 畫 GEMM 與 GEMV 的 roofline;Part 3 拿 gemma-3-270m-it 的 decoder layer 算 attention 與 MLP,比較 prefill 與 decode;Part 4 用 PyTorch Profiler 看 kernel、自己寫 GeLU 體會 kernel fusion、再試 torch.compile 與 CUDA Graph;Part 5 比較 SDPA 與 FlashAttention。主題 80 分,另有 20 分 bonus,Part 5 因為 Colab T4 跑不動整段改成 bonus。
MIT 6.5940 Fall 2024 第 9 講分五段:知識蒸餾(KD)的定義與 temperature、六種可以對齊的東西(logits、權重、特徵、梯度、稀疏模式、關係)、不需要固定大老師的 self/online 蒸餾、偵測/分割/GAN/NLP/LLM 上的 KD,以及專為小模型設計的 Network Augmentation。溫度從 T=1 調到 T=10,老師對「貓 vs 狗」的輸出從 0.982/0.017 變成 0.599/0.401,這一步就是 KD 能傳遞「暗知識」的起點。
Lab 2 是一份 Colab notebook,10 題共 100 分,對象是 CIFAR-10 上預訓練好的 VGG。前 3 題做 K-means 量化:寫量化函數、推算 n bit 有幾個 cluster、寫 centroid 更新,再看 8/4/2 bit 微調前後的準確率。後 7 題做線性量化:寫 q = round(r/S) + Z、推 scale 與 zero point 公式、做 per-channel 權重量化與 bias 量化、寫整數版的全連接層與卷積層,最後把整個模型轉成 INT8 跑推論。本文整理題目、配分、環境需求與校外限制,不附解答。
MIT 6.5940 Fall 2024 Lab 3 給你一個 OFA 方式訓練好的 MCUNetV2 super network(超過 10^19 個子網路)與 Visual Wake Words 資料集,10 題共 100 分加 10 分 bonus:先實作 MACs/peak memory 的 efficiency predictor 與三層 MLP accuracy predictor,再寫 random search 與 evolutionary search,最後在 250KB、60M MACs 的限制下找出準確度 92.5% 以上的子網路。本篇拆題目結構與每題在練什麼,不貼解答。
Lab 4 是 Colab notebook,用 OPT-1.3B 一步步重做 AWQ:先看 3-bit 量化後 perplexity 變多差,再保留 1% 重要 channel(Q1),最後改用縮放保護它們並搜尋最佳縮放(Q2),兩題各 50 分,另有依 perplexity 計分的 bonus。Lab 5 換到 C++:用 TinyChatEngine 在自己的電腦上跑 4-bit 的 LLaMA2-7B-chat,替 W4A8 線性層 kernel 依序寫 loop unrolling、multithreading、SIMD、multithreading+unrolling、全部組合五個版本,每個 20 分,另有最多 20 分的效能 bonus。本文整理兩份作業的題目、配分、環境與校外限制,不附解答。
第 13 講把 LLM 推論變快的方法分成三條路。量化:SmoothQuant 把 activation 的離群值難度搬到權重做 W8A8,AWQ 依 activation 找出約 1% 的重要權重、用縮放保護它們做 W4A16,QServe 再合成 W4A8KV4。稀疏:Wanda 用 |W|·‖X‖ 剪權重,DejaVu 與 MoE 每個 token 只用一部分參數,SpAtten 與 H2O 丟掉不重要的 token。Serving:TTFT/TPOT 指標、PagedAttention、FlashAttention、speculative decoding 與 continuous batching。投影片上 OPT-6.7B 做 INT3 時,RTN 的 perplexity 是 43.16,把重要 channel 放大 2 倍就降到 14.07。
第 14 講分三段。第一段是微調:SFT 用想要的回答做 next-token prediction,RLHF 先訓 reward model 再用帶 KL 懲罰的 RL 微調,DPO 把兩階段壓成一次監督式訓練;接著一路比較 PEFT:BitFit 只調 bias、Adapter 插小層但推論變慢、Prompt/Prefix-Tuning 佔用輸入長度,LoRA 用可併回權重的低秩分支解決推論延遲,QLoRA 再把主幹量化成 NF4,BitDelta 把微調差值壓到 1 bit。第二段是多模態 LLM:Flamingo 用 cross-attention、PaLM-E 與 VILA 把影像當 token、VILA-U 讓模型也能輸出影像。第三段是 prompt engineering:zero/few-shot、CoT 與 RAG。
第 15 講分四段。延長上下文:RoPE 內插可以把 LLaMA 從 2k 拉到 32k,LongLoRA 用 shifted sparse attention 讓長上下文微調變便宜。評估:lost-in-the-middle、Needle-in-a-Haystack 與 LongBench。高效 attention:KV cache 隨長度線性長大,StreamingLLM 發現開頭幾個 token 是 attention sink,保留它們加上最近視窗就能穩定生成;DuoAttention 只讓少數 retrieval head 保留完整 KV cache;Quest 保留全部 KV、依 query 只讀最關鍵的幾頁。最後一段跳出 Transformer:Mamba 用選擇性 SSM 取代 attention,Jamba 把兩者混在一起。
MCU 的 SRAM 約 256–320kB、Flash 約 1MB,比手機小上萬倍,連 int8 的 MobileNetV2 峰值記憶體都超出 5 倍。L10 的答案是 MCUNet:TinyNAS 先挑搜尋空間再搜子網路,MCUNetV2 用 patch-based inference 把 MobileNetV2 的峰值 SRAM 從 1372kB 壓到 172kB,最後看視覺、語音、異常偵測三類 tinyML 應用。
MIT 6.5940 Fall 2024 第 8 講處理 NAS 最貴的一步:評估候選架構。從頭訓練 12,800 個架構要 22,400 GPU-hours,所以課程依序介紹繼承權重、hypernetwork、ProxylessNAS 的單路徑訓練、延遲查表與預測器、Once-for-All 的一次訓練 10^19 個子網路,再到完全不訓練的 zero-shot NAS 與神經網路/加速器共同搜尋 NAAS。本篇照 105 頁投影片走一遍,標出每個主張的頁碼。
第 7 講分三段。先用 MAC 公式複習全連接、卷積、分組卷積、depthwise 與 1×1 卷積;再拆 ResNet bottleneck、ResNeXt、MobileNet、MobileNetV2、ShuffleNet 與 Transformer 各靠什麼省運算,例如 bottleneck 比直接做 2048 通道的 3×3 卷積少 8.5 倍 MAC。最後進入 NAS:搜尋空間分 cell-level 與 network-level(深度、解析度、寬度、kernel size、拓撲),搜尋策略有 grid、random、強化學習、梯度下降、演化五種。投影片的一道算術題顯示,NASNet 的 cell 空間在 M=5、N=2、B=5 時就有 3.2×10¹¹ 個候選。
在裝置上訓練有兩個理由:模型要跟著使用者的新資料調整,資料又不該離開裝置。L21 先證明「只分享梯度」也不安全:Deep Leakage from Gradients 能從梯度還原出原圖和原句。接著處理記憶體:訓練比推論貴,是因為要存 activation,不是參數。TinyTL 只調 bias 再加輕量殘差,省 6.5 倍記憶體;SparseBP 只更新重要的層與通道;QAS 讓真正的 int8 訓練追上 fp32;PockEngine 在編譯期做完 autodiff,最後在 256KB 的 MCU 上把訓練記憶體壓到 141KB。
Pruning 是把神經網路裡不重要的權重或神經元拿掉,目標寫成「在非零權重數不超過 N 的限制下讓 loss 最小」。6.5940 第 3 講先處理其中兩個決定。第一是粒度:從任意位置都能剪的 fine-grained,到整個通道一起剪的 channel pruning,越規則越容易在現有硬體上變快,但能剪掉的比例越小;介於中間的 2:4 sparsity 在 NVIDIA Ampere GPU 上最多快 2 倍。第二是準則:看權重大小、看 Batch Norm 縮放係數、看二階導數、看 activation 有多少是零,或看剪完後輸出重建得多好。
第 6 講處理「量化後精度掉了怎麼辦」。先不重訓:換更細的 scale 粒度(per-channel、group、MX)、裁掉離群值(EMA、校準批次、MSE、KL)、改捨入方式(AdaRound)。不夠再重訓:QAT 保留一份全精度權重,前向做假量化,反向靠 STE 把梯度直接穿過去。投影片引用的白皮書數字裡,MobileNetV1 做 per-tensor INT8 PTQ 準確率掉到 0.1%,改成 per-channel QAT 回到 70.7%,浮點原本是 70.9%。最後兩段談 1–2 bit 的二值/三值網路,以及用強化學習自動分配每層位元數的 HAQ。
演算法把模型縮小之後,系統層還能再榨多少?L11 用同一個矩陣乘法示範:loop reordering 快 12 倍、tiling 快 19 倍(Intel Xeon 4114),CUDA 版在 2080Ti 上端到端快 94 倍。後半講 TinyEngine 用的推論技巧:im2col、in-place depthwise 把峰值記憶體從 2×C×H×W 降到 (1+C)×H×W、pointwise 用 NHWC、depthwise 用 NCHW,以及少 2.25 倍乘法的 Winograd。
6.5940 在第 12 講從 CNN 轉到 Transformer,但重點不在原理,而在哪裡會吃掉記憶體與算力:attention 是 O(N²);Llama-2-70B 若用 MHA,batch 16、長度 4096 的 KV cache 要 160GB;GQA 把它縮 8 倍、MQA 縮 64 倍;MoE 讓總參數變多但每個 token 的計算不變。這篇是進入 L13 LLM 部署前的橋接。