5

最佳化技術

依據瓶頸、品質預算與 topology 選擇最佳化手段。

10 分鐘閱讀

印刷頁: 117–152

在 GitHub 加星

一口氣讀懂

最佳化首先是診斷問題。Quantization 減少運算量與記憶體流量,但會使用品質預算;speculation 利用 decode 的閒置算力,改善 inter-token latency(ITL)與 tokens per second(TPS);caching 避免重做 prefill,改善 time to first token(TTFT);parallelism 讓模型放得下,或改變跨裝置的延遲與吞吐量;disaggregation 則在規模足夠時,把運算密集的 prefill 與記憶體密集的 decode 分開。先量出瓶頸,再用範圍最窄的合適手段,最後回頭重測整個系統,因為不同技術可能互相增益,也可能互相搶資源。

為何重要

  • 有用的限制能創造專門化機會:固定格式、重複 prefix、已知 topology 或分開的 worker 職責,都能讓 runtime 省略一般化工作。但真實流量不會永遠遵守限制,所以這些設定必須持續觀測與調整,不能部署一次就視為完成。
  • 流量規模會改變哪些技術符合成本效益。Cache-aware routing、多路 model parallelism、獨立 prefill 與 decode pool,都需要足夠 concurrency 工作,才能讓額外硬體與協調成本保持忙碌並轉成單位成本優勢。
  • 不同手段共用同一批資源。縮小 key-value cache 可降低傳輸量並提高 cache residency;speculation 會與大 batch 爭用算力;跨節點 parallelism 可能把原本的容量問題換成通訊瓶頸。設計必須看整組配置,而不是逐項打開功能。
  • 多數技術不改變模型語意,但 post-training quantization 可能改變輸出品質,因此效能驗證必須成對保留品質基線。Attention 狀態會在後續 token 反覆重用,降低其精度時尤其要警惕數值誤差逐步累積。

心智模型

用四種預算思考:運算、記憶體容量與頻寬、通訊,以及可接受的品質變化。每項技術都把壓力從一種預算搬到另一種。Quantization 儲存與搬移較少 bit,代價是數值誤差風險;speculation 花額外算力減少 decode iteration;caching 花記憶體避免 prefill;parallelism 花通訊換容量或 concurrency;disaggregation 花硬體與傳輸頻寬換階段專門化。好的配置會消除主導限制,卻不讓接收壓力的另一項預算立刻成為新瓶頸。

從瓶頸選擇最佳化手段

量測到的瓶頸分支導向不同手段:運算或記憶體壓力對應 Quantization,decode 算力閒置對應 Speculation,重複 prefix 對應 Caching,裝置容量或延遲對應 Parallelism,而高流量下 prefill 與 decode 互相干擾則對應 Disaggregation。

  • 實測瓶頸辨識階段、資源、流量與品質預算
  • Quantization縮小數值寬度與記憶體 footprint
  • Speculation利用閒置算力一次接受多個 token
  • Caching重用先前的 key-value 計算
  • Parallelism把模型工作分散到多個裝置
  • Disaggregation分離 prefill 與 decode worker pool
  • 實測瓶頸Quantization: 運算或記憶體壓力
  • 實測瓶頸Speculation: Decode 算力閒置
  • 實測瓶頸Caching: Prefix 重複
  • 實測瓶頸Parallelism: 容量或單一使用者延遲
  • 實測瓶頸Disaggregation: 高流量下的階段干擾

假設量測顯示 prefill 受算力限制,decode 受頻寬限制,而且 weights 與 buffer 留給 key-value cache 的空間太少。一次經過審慎評估的精度調整,理論上可同時減少矩陣運算成本、weights 搬移 byte 數與 cache footprint,但不能因此把整個模型一口氣降到最低精度。先只轉換較不敏感的 linear weight,與原始模型比較 perplexity、公開 benchmark 及產品 eval;通過後再加入 activation;若長 context 或 disaggregation 真的受 cache 容量與傳輸限制,才評估 key-value state。輸入輸出層、outlier 明顯的區段與 attention 計算可保留較高精度,避免反覆使用的誤差逐 token 累積。每一階段都同時量 TTFT、TPS、記憶體、吞吐量與品質差異。目標不是使用 bit 數最少的格式,而是在品質差異仍落於多次實驗雜訊內時,找出延遲與成本最低的組合。

以互動式程式開發工作負載為例,先把穩定的 system prompt、工具定義與 repository context 放在前面,把目前編輯內容及使用者新問題放後面,讓 prefix caching 可以跳過大量 prefill。router 要盡可能把同一使用者或同一 codebase 的後續請求送回已有 hot cache 的 replica,同時保留負載上限,避免 affinity 讓單一節點過熱。進入低 batch decode 後,程式碼中高度重複的 token 序列可能讓 n-gram speculation 提出很長且常被接受的 draft,進一步減少 target model 的 forward pass。當 concurrency 升高、batch 吃滿算力時,就要縮短或停用 speculation,因為驗證 draft 會與正常請求爭用 compute;prefix cache 仍可繼續節省 prefill。兩項技術作用在不同階段,應分開追蹤跳過的輸入 token、cache hit、draft acceptance、每 iteration 接受 token 數及淨 ITL,而不是共用一個開關或只看總吞吐量。

當模型超過單一 GPU 容量時,先把 weights、runtime workspace、activation、目標 batch 與最長 context 的 cache headroom 全部算進去,再決定平行策略,而不是看到多張卡就直接套一個縮寫。tensor parallelism(TP)把每一層的 tensor 切開,能讓多張 GPU 共同讀 weights 與做 matmul,在高速節點內 interconnect 上通常可降低單一使用者延遲,但每一層都要同步結果;裝置增加到通訊超過節省的運算後,效益就會反轉。expert parallelism(EP)把完整 expert 分散到不同裝置,router 雖要搬移 token,卻不需要像 TP 一樣在每一層 all-reduce,因此較適合把 mixture of experts(MoE)系統吞吐量擴到更多 GPU 甚至多節點。pipeline parallelism(PP)把完整 layer stage 放到不同節點,請求依序穿過 pipeline,容易形成 bubble,主要是在 dense 模型無法用其他方式跨節點放下時解決容量。每增加一張 GPU,都要用 parallel efficiency 與 interconnect trace 證明有更多有效工作;模型若已舒適地放在一個節點,新增硬體建立另一個 replica 往往更簡單、更能服務獨立請求。

當大型模型承受穩定高流量,且大量長而未 cache 的輸入讓 compute-bound prefill 開始干擾 memory-bound decode 時,disaggregation 才進入候選。請求先到 decode 端做 cache check:完整 hit 或短 prefill 就在本機完成,避免為了專門化支付不必要的 queue 與 KV transfer;長而 miss 的輸入才送到 prefill pool。Prefill worker 可採用偏運算導向的 GPU 數、TP 與 batch 設定,產生第一個 token 及 key-value block 後,經選定 interconnect 傳到偏頻寬與 cache 容量導向的 decode worker,後者再生成剩餘 token。Prefill 與 decode 數量不是固定一比一,而是持續營運的控制變數:prefill queue 增長表示前段容量不足;decode cache eviction 或 occupancy 過高表示後段記憶體不足;傳輸時間過高可能需要 cache quantization、較近 topology 或更高 local-prefill 門檻;流量下降則可能表示應合併 worker,避免昂貴 GPU 閒置。

任何手段都先放在受控流量切片後面,保留未最佳化路徑與快速回退。結果要依輸入長度、輸出長度、cache hit 或 miss、batch、concurrency 量、硬體與 topology 切分;整體平均值可能掩蓋少數長 context 使用者的嚴重退步,也可能把低負載收益誤認為尖峰容量。上線 gate 至少同時包含 percentile latency、系統吞吐量、GPU 記憶體、單位成本、錯誤率與品質;quantization 還要比較產品 eval,speculation 要看不同 temperature 下的 acceptance,caching 要看實際跳過 token,而不是只看 hit rate。逐步提高流量前先經過完整尖峰週期,並保留能在前提消失時停用技術的 trigger,例如 batch 過高就關閉 speculation、品質分數越界就切回原始精度、熱門 replica 過載就降低 cache affinity。

Prefill 與 decode 的 worker 比例要隨工作負載調整。長輸入與 prefill-heavy 流量需要更多 prefill 容量;decode-heavy 流量則需要更多 decode 容量。監控 prefill queue 與 decode 端的 key-value cache,並在流量改變時於 runtime 調整比例,不要固定成一個 prefill engine 對一個 decode engine。短輸入或 cache hit 可以透過 conditional disaggregation 留在 decode engine 本地完成 prefill。流量較低時,直接水平擴增 replica 可能比 disaggregation 更有效率,因為後者會增加 GPU、queue 與 cache transfer 成本。

每項手段都留下完整因果鏈:量到哪一個 phase 與資源瓶頸、什麼流量條件讓技術成立、壓力被搬到哪一項預算、預期改善哪個使用者或成本指標、可能新增哪種故障、品質 gate 是什麼、何時自動停用,以及如何 rollback。例如「低 batch decode 有閒置算力,因此啟用短 draft speculation;若 acceptance 或淨 ITL 低於門檻就關閉」比「開啟 EAGLE」更能營運。這份紀錄把一次性設定轉成可觀測政策,也讓另一項最佳化改動同一份 compute、memory 或 communication 預算時,團隊能立刻看出互動與重新驗證範圍。

核心概念

Quantization

降低精度可讓 prefill 使用更快的低精度算力,也能讓 decode 搬移較少 byte。實作應從較不敏感的 weights 與 activation 開始,審慎評估 key-value cache;attention 操作與敏感層則維持較高精度,除非完整 eval 能證明安全。

格式與 granularity

Floating-point 的 exponent 範圍有助保存 outlier;更細的 scaling granularity 更能貼近局部分布,卻要儲存與套用更多 scale factor。2026 年 1 月版快照:8-bit floating-point(FP8)類格式是較有彈性的正式環境起點;Blackwell 專屬 microscaling 與 4-bit floating-point(FP4)路徑仍須依目前硬體軟體重驗。

Speculation

Speculator 先提出 draft token,target model 在一次 forward pass 中平行驗證,接受的連續 prefix 再加上一個 target token 共同推進 decode。它改善 TPS 與 ITL,不改善 TTFT。收益取決於 draft 成本、提議長度、接受率、temperature、領域,以及目前 batch 下是否還有閒置算力。

Speculation 方法

Draft-target 用一個小得多的模型搭配 target,容易開始,但模型額外成本最高。Medusa 在 target 上新增 draft head。EAGLE 訓練一個以 hidden state 為條件的小型 draft model,適合更廣用途。N-gram speculation 重用輸入序列,特別適合重複程式碼;Lookahead Decoding 則在推論時產生候選,代價是額外算力。

Key-value 重用

每個 engine 都會在單一請求內保留 key-value 狀態;prefix caching 則跨請求重用,但只能從完全相同的起始 token 序列一路跳過 prefill,直到第一個差異為止。因此穩定 context 要放在前面、新內容放後面,相關請求則優先 route 到已經擁有 hot cache 的 replica。非 prefix 重用必須校正位置並選擇性重算,因此仍是專門路徑。

Topology-aware parallelism

tensor parallelism(TP)拆分每層內部工作,適合高速節點內連線上的低延遲;expert parallelism(EP)保留完整 expert,可跨更多裝置提高 mixture of experts(MoE)吞吐量;pipeline parallelism(PP)把不同 stage 放到不同節點,但會引入序列化 bubble。

Disaggregation

獨立 prefill worker 計算第一個 token 與 key-value 狀態,傳送狀態後,再由 decode worker 生成其餘 token。Conditional routing 讓 cache hit 或短輸入留在 decode 端本機處理,只有專門化確實有利時才支付傳輸成本。2026 年 1 月版快照:原書建議在每日約 1 億至 10 億 token、模型約 1,000 億參數以上,且長輸入使 prefill 比重較高時開始考慮。

運作機制

  1. 先依 prefill、decode、cache 行為、batch 與 topology 拆解符合正式流量的 profile。啟用任何技術之前,保留延遲、吞吐量、成本與品質基線,否則之後無法辨識收益來自哪個資源轉移。
  2. 做 quantization 時,把要轉換的元件與目標格式分成兩個決策,校正 post-training 轉換,再把 perplexity、公開 task 分數及產品專屬 eval 與原始精度逐一比較。若差異超過測試雜訊,就縮小轉換範圍或提高精度。
  3. 做 speculation 時,用接受率與 draft 成本一起調整方法及序列長度。Batch 使算力飽和時就縮短或關閉;輸入輸出高度重複的程式碼可優先考慮 n-gram,較一般工作若有訓練能力則可評估專用 draft head。
  4. 做 caching 時,先讓穩定 prefix 具有一致 token 排列,刻意配置裝置記憶體,把較冷 block 放到主機或儲存層,再同時依負載與 prefix affinity routing。長 context 也要單獨測,因為 attention 狀態可能成為最大記憶體使用者。
  5. 做 parallelism 時,先估 weights、runtime 與 cache headroom,再把同步動作映射到實體連線。預設先在高速單一節點內用 TP;高吞吐 MoE 可評估 EP;只有容量或工作特性真的需要時,才用通訊較少的策略跨節點。
  6. 做 disaggregation 時,請求先在 decode 端檢查 cache,長而 miss 的工作再送往 prefill worker,計算後傳輸 key-value block,最後分別擴縮 prefill 與 decode pool。營運時要同時觀察 prefill queue 與 decode cache 容量。
cache、parallelism 與 disaggregated serving 流程

請求先從 Cache-aware router 流向 Decode cache check;miss 時再轉到 Parallel prefill workers,KV transfer 接著跨到 Parallel decode workers,最後由 response stream 傳回生成的 token。

  1. Cache-aware router優先選擇已有相符 prefix 狀態的 replica
  2. Decode cache checkhit 或短 prefill 就在本機處理
  3. Parallel prefill workers計算第一個 token 與 key-value 狀態
  4. KV transfer經選定 interconnect 搬移 cache
  5. Parallel decode workers生成其餘 token
  6. Response stream把已接受的輸出 token 傳回使用者
  • Cache-aware routerDecode cache check: 依負載與 prefix routing
  • Decode cache checkParallel prefill workers: miss 或長而未 cache 的輸入
  • Parallel prefill workersKV transfer: 第一個 token 加 cache
  • KV transferParallel decode workers: 跨越 worker 邊界
  • Parallel decode workersResponse stream: 後續 token

關鍵指標

品質差異

perplexity 與 eval 分數

多次執行並與原始精度及產品專屬任務比較。

Draft 接受情形

每 iteration 接受 token 數

必須連同 draft 生成成本、長度、temperature 與 batch 解讀。

Prefix cache 效益

hit rate 與跳過 token 數

只有 hit rate 看不出一次 hit 省了兩個還是數千個 token。

各層 cache residency

GB 與 eviction rate

追蹤 hot device 狀態、卸載狀態、傳輸延遲與 churn。

平行效率

每增加 GPU 的 speedup

把運算收益與同步、interconnect 成本分開。

disaggregated serving 平衡

prefill queue 與 decode occupancy

Queue 持續增加或 decode cache 耗盡,都表示 worker 比例錯誤。

取捨

速度與品質風險

較窄格式能少搬、少算資料,但敏感元件與反覆使用的 attention 狀態可能累積數值誤差。選擇性保留高精度,往往比整個模型全有或全無更合適。

單一使用者速度與系統吞吐量

低 batch 時 speculation 能減少 decode iteration,但它的驗證工作也會消耗大 batch 原本可用來服務更多請求的算力。

cache hit 與負載平衡

Affinity routing 能保留 hot prefix,卻可能讓熱門 replica 過載。共用的低階儲存提升耐久性與可達範圍,但速度仍不如本機裝置 hit。

延遲與通訊

更多裝置增加容量,也可能減少每個請求在單一裝置上的工作;但每次同步與 token routing 都穿越更慢邊界。模型已放得下時,額外節點作為 replica 可能更有效。

專門化與複雜度

高流量下獨立調校及擴縮兩個階段可減少干擾;小型部署則可能因 queue、傳輸、額外 replica 與 cache 壓力而更慢、更貴。

工程檢查表

  • 選手段前先明確指出飽和的階段與資源,不要照功能清單最佳化。
  • 固定代表性流量、品質、延遲、吞吐量、成本、engine、模型、精度與硬體基線。
  • Quantization 逐元件評估,並用多種品質量測與原始精度比較。
  • 在每種預期 batch、temperature 與領域量測接受率及淨效益,並設定關閉門檻。
  • 統一 prefix、配置 cache 層、記錄 eviction,並在 affinity 與 replica 負載間平衡。
  • 用長輸入驗證 chunking、paging 與 attention kernel,避免單一請求壟斷記憶體或算力。
  • 記錄 GPU 與節點連線,再依通訊量和延遲目標選 TP、EP 或 PP。
  • 先證明模型大小、流量與 prefill 比重足夠才用 disaggregation,並觀察 queue、傳輸與 decode cache。
  • 把 2026 年 1 月版的支援與門檻敘述,依目前軟體及單位經濟重新驗證。

術語

Post-training quantization
利用 scale factor 與 calibration,把已完成訓練的模型數值轉成較低精度。
Quantization granularity
共用一個 scale factor 的數值範圍,可從整個 tensor、channel 到小型 block。
Token acceptance rate
Target model 在第一次拒絕之前,驗證通過的 draft token 比例。
Prefix caching
跨請求重用完全相同起始 token 序列的 key-value 狀態。
PagedAttention
用固定大小 page 管理 key-value 狀態,以減少記憶體碎片與重複。
Tensor parallelism
把每一模型層內的操作拆到多個裝置,並頻繁同步。
Expert parallelism
把完整 expert 放到不同裝置,再 routing token,以擴充 MoE 吞吐量。
Disaggregated serving
讓 prefill 與 decode 在可獨立設定及擴縮的 worker pool 上執行。

原書索引

  • 第 117-120 頁

    最佳化限制、規模、互動與五類技術。

  • 第 120-129 頁

    Quantization 格式、範圍、數值風險與品質量測。

  • 第 129-136 頁

    Speculative decoding 機制、演算法、接受率與算力取捨。

  • 第 136-142 頁

    Key-value 重用、cache 層、routing 與長 context 記憶體管理。

  • 第 142-148 頁

    模型 sizing、TP、EP、PP 與 multi-node topology。

  • 第 148-152 頁

    Prefill-decode 分離、conditional routing、門檻與動態 pool。

Optimization principles, traffic scale, interactions, and the five technique families
印刷頁: 117–120; PDF 頁: 119–122
Number formats, quantization scope, quality risk, and evaluation
印刷頁: 120–129; PDF 頁: 122–131
Speculative decoding mechanism, algorithms, acceptance, and batch trade-offs
印刷頁: 129–136; PDF 頁: 131–138
KV cache reuse, storage tiers, routing, and long-context handling
印刷頁: 136–142; PDF 頁: 138–144
Memory sizing, tensor, expert, pipeline, and multi-node parallelism
印刷頁: 142–148; PDF 頁: 144–150
Prefill-decode separation, conditional routing, scale threshold, and dynamic worker ratios
印刷頁: 148–152; PDF 頁: 150–154