🎯 什麼情境該想到我

當模型品質已經夠用,但回應太慢、長輸入就爆記憶體、每次呼叫太貴——問題出在推論階段而不是模型本身的時候。

⚙️ 怎麼用(步驟 / 公式)

  1. 先分辨瓶頸屬於哪一類:注意力運算(隨序列長度平方成長)/重複計算(每生成一個 token 就重算前面所有 token)/逐字生成(自迴歸天生序列化)。三種瓶頸各有對應解法,別亂套。
  2. 注意力吃記憶體 → Flash Attention。標準注意力要具體化整個 N×N 矩陣,記憶體 O(N²);Flash Attention 用三招繞開:
    • Tiling:把 Q/K/V 切成小塊放進 GPU 的 SRAM 分塊算,不寫回完整矩陣
    • Recomputation:反向傳播時重算而不是存下中間結果,用算力換記憶體
    • Kernel Fusion:把多個運算融成單一 kernel,減少記憶體來回搬運
  3. 重複計算 → KV Cache。把已生成 token 的 key/value 存起來,下一步只算新 token。代價是快取本身佔記憶體,且會隨序列長度成長,需要管理策略。
  4. 逐字生成太慢 → Speculative Decoding。用一個小的 draft 模型一次猜好幾個 token,再讓大模型平行驗證:猜對就一次收好幾個,猜錯就退回。品質不變,速度變快。
  5. 這三者可以疊加,也可以再疊上量化(見 工具-模型量化格式選擇)——量化省記憶體,這裡省時間。

🧪 我實際套用的紀錄

  • 2026-08-01:從 LLM Course 收錄,尚未實際套用。

⚠️ 注意 / 什麼時候不適用

  • 沒量過就別優化。先確認慢在注意力、在快取、還是在逐字生成,否則做白工。
  • Speculative Decoding 的收益取決於 draft 模型猜中率,猜太爛時反而多花一次驗證。
  • KV Cache 是拿記憶體換速度,長上下文情境下它自己就可能變成新的記憶體瓶頸。

🔗 相關工具