[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-turboquant-vllm-kv-cache-3bit-storage-zh":3,"article-related-turboquant-vllm-kv-cache-3bit-storage-zh":30,"series-tools-de80c7d2-c4bf-4168-855f-1d5ac9e34151":82},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"de80c7d2-c4bf-4168-855f-1d5ac9e34151","turboquant-vllm-kv-cache-3bit-storage-zh","TurboQuant 把 vLLM KV 快取壓成 3 位元","\u003Cp data-speakable=\"summary\">這篇在講 \u003Ca href=\"\u002Ftag\u002Fturboquant\">TurboQuant\u003C\u002Fa> 怎麼把 vLLM 的 \u003Ca href=\"\u002Ftag\u002Fkv-cache\">KV cache\u003C\u002Fa> 壓到 3-bit，還能直接拿去做部署判斷。\u003C\u002Fp>\u003Cp>我用 vLLM 一陣子後，最常碰到的不是模型不夠強，而是記憶體老是在奇怪的地方爆掉。模型載得進去、prompt 也塞得下去，結果對話一長，KV cache 就開始吃 RAM，吃到你懷疑人生。最煩的是，你明明沒換模型，服務也看起來正常，偏偏一拉長上下文就卡住。這種痛我真的很熟：不是模型太大，是你以為自己已經控住了，結果 cache 才是那個偷吃空間的傢伙。\u003C\u002Fp>\u003Cp>我這次是從 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvarjoranta\u002Fturboquant-vllm\">TurboQuant 的 GitHub repo\u003C\u002Fa> 進去看的，順手也對照了 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvllm-project\u002Fvllm\u002Fpull\u002F38479\">vLLM 的 upstream PR #38479\u003C\u002Fa>，還有作者提到的 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvibhavagarwal5\">vibhavagarwal5\u003C\u002Fa>。這個東西不是空談，repo 本身就把 KV cache 壓縮、權重壓縮、runtime kernel 跟 fallback 路線拆開講，至少不是那種一句「我們做了量化」就想混過去的玩法。\u003C\u002Fp>\u003Ch2>我先講結論：它不是在救模型，是在救記憶體\u003C\u002Fh2>\u003Cblockquote>TurboQuant+ KV cache compression for vLLM. 3.8x smaller KV cache, same conversation quality.\u003C\u002Fblockquote>\u003Cp>白話翻譯就是：它想把注意力狀態的記憶體佔用砍下來，而且不要讓模型講話突然變笨。這件事我很買單，因為很多壓縮方案都很會秀數字，結果一\u003Ca href=\"\u002Fnews\u002Fazure-linux-40-container-linux-ga-zh\">上線\u003C\u002Fa>就開始胡言亂語。對我來說，壓縮有沒有用，不是看它縮了多少，而是看它能不能讓我多撐幾輪對話、多開幾個 session、或是把同一張 GPU 用得更滿。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779286504704-sisl.png\" alt=\"TurboQuant 把 vLLM KV 快取壓成 3 位元\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前在小卡上跑互動式服務時就遇過這種狀況。模型本體看起來沒問題，吞吐也還行，可是一旦上下文拉長，cache 就像水壩破洞一樣慢慢漏。你會先覺得是 batch 設定怪怪的，後來發現根本不是，是 decode 時的記憶體壓力一直在累積。這種問題最陰險，因為 benchmark 看起來很漂亮，真實使用卻很煩。\u003C\u002Fp>\u003Cp>實操寫法很簡單：先把 KV cache 壓縮當成一級選項，不要只盯著模型權重。你的工作負載如果是聊天、多輪問答、長上下文檢索，先測 cache 壓縮，常常比你再縮一點 model size 更有感。\u003C\u002Fp>\u003Ch2>不要把權重壓縮跟 KV cache 壓縮混在一起\u003C\u002Fh2>\u003Cp>TurboQuant 的 repo 很誠實，因為它不只談 KV cache，還把權重壓縮一起包進來。這很容易讓人看花眼，所以我先拆開講。權重壓縮是在縮模型參數，影響的是載入時的記憶體；KV cache 壓縮是在縮生成時的注意力狀態，影響的是推理過程中的記憶體。兩個都重要，但瓶頸位置完全不同。\u003C\u002Fp>\u003Cp>repo 裡提到它用 3-bit TQ3 壓縮，還說可以對 BF16 checkpoint 快速壓縮，而且不需要校準。它也提到 native packed checkpoints、\u003Ca href=\"\u002Ftag\u002Fapple\">Apple\u003C\u002Fa> Silicon、MoE、還有一些舊版 MLA KV cache 的 monkey patch。這些東西放在一起很容易讓人以為是一包萬能工具，但我不會這樣看。我會先問：我現在卡的是載入、解碼，還是特定架構的相容性？\u003C\u002Fp>\u003Cp>我自己比較喜歡這種拆法，因為它逼你把問題講清楚。你如果連瓶頸在哪都沒搞懂，就很容易把「我量化了」當成答案。實際上可能只是改到一半，真正吃資源的那一塊根本沒碰到。\u003C\u002Fp>\u003Cul>\u003Cli>權重壓縮：縮模型本體，對載入時記憶體最有感。\u003C\u002Fli>\u003Cli>KV cache 壓縮：縮生成時狀態，對長對話最有感。\u003C\u002Fli>\u003Cli>runtime kernel：決定你壓縮完之後是不是還跑得動。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>實操寫法：先畫出你的瓶頸圖。載入爆掉，就先看權重壓縮；生成爆掉，就先看 KV cache 壓縮；兩邊都爆，再談混合方案。順序錯了，後面全是在繞路。\u003C\u002Fp>\u003Ch2>我最在意的是 fallback，不是漂亮的 demo\u003C\u002Fh2>\u003Cp>repo 一直提 fused \u003Ca href=\"\u002Ftag\u002Fcuda\">CUDA\u003C\u002Fa> kernels，但也很老實地保留 PyTorch fallback。這句話聽起來像工程細節，實際上很重要。因為我踩過太多次「某張卡上很快、換一張卡就死給你看」的坑。沒有 fallback 的優化，很多時候只是把風險包裝得比較好看而已。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779286507502-ttfa.png\" alt=\"TurboQuant 把 vLLM KV 快取壓成 3 位元\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>白話一點說，TurboQuant 不是把所有希望都押在一條自訂 kernel 上。快路徑跑得動就跑，跑不動至少還能退回 PyTorch，不會直接整個服務掛掉。repo 也有提到 CUDA GEMV 路徑對 sm_80+ 的限制，這種細節我反而喜歡，因為它直接告訴你：不是每張 GPU 都吃得到。\u003C\u002Fp>\u003Cp>我以前很討厭這種「有加速，但你要先祈禱硬體對得上」的東西，後來才知道，真正成熟的方案一定要有退路。沒有退路的優化，最後只會變成 ops 團隊的惡夢。\u003C\u002Fp>\u003Cp>實操寫法：評估任何壓縮\u003Ca href=\"\u002Fnews\u002Fllm-package-hallucinations-frontier-models-2026-zh\">套件\u003C\u002Fa>時，我都會先問兩件事。第一，快路徑是\u003Ca href=\"\u002Fnews\u002Fwhy-kv-cache-compression-will-decide-edge-ai-inference-zh\">什麼\u003C\u002Fa>。第二，快路徑失效時會怎樣。答案如果是「自己改 code」或「直接 crash」，我就先放一邊。答案如果是「自動 fallback」，我才會繼續看。\u003C\u002Fp>\u003Ch2>為什麼這份 repo 一直在講 kernel\u003C\u002Fh2>\u003Cp>TurboQuant 的 README 很直接：Triton 的 GEMV 路徑會把 batch size 1 的情境搞得很浪費，因為它偏向 tensor-core tile 的排法，結果很多 ALU 都空著。它因此改成 runtime dispatch 的 custom op。這種描述很工程，但我反而信，因為只有真的量過，才會知道哪裡在浪費。\u003C\u002Fp>\u003Cp>也就是說，壓縮本身不是終點。你把資料壓小了，如果解壓或矩陣運算那段很爛，最後只是把瓶頸搬家。TurboQuant 比較像是把 memory path 跟 compute path 一起照顧，至少不是只做一半就拍拍屁股走人。\u003C\u002Fp>\u003Cp>我看過不少團隊很愛貼壓縮比，卻不提 runtime 開銷。結果一上線，省下來的 VRAM 又被額外延遲吃掉。這就是我一直盯 kernel 的原因：如果速度掉太多，壓縮就會變成紙上談兵。\u003C\u002Fp>\u003Cul>\u003Cli>壓縮比告訴我省多少記憶體。\u003C\u002Fli>\u003Cli>kernel 行為告訴我能不能真的上線。\u003C\u002Fli>\u003Cli>fallback 告訴我出事時我會不會半夜被叫醒。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>實操寫法：不要只看平均吞吐。請直接用你真正的 batch size 測，尤其是 batch size 1。聊天機器人最常見的產品型態就是單筆請求，不是壓測表上的漂亮數字。\u003C\u002Fp>\u003Ch2>上游整合這件事，比很多人想得重要\u003C\u002Fh2>\u003Cp>我會特別注意 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvllm-project\u002Fvllm\u002Fpull\u002F38479\">vLLM 的 upstream PR #38479\u003C\u002Fa>，因為 repo 的說法是 KV cache 壓縮已經往上游走，代表這不只是某個外掛專案的私房菜。對我來說，這差很多。只要功能進了上游，維護成本、相容性、部署習慣都會變得比較正常。\u003C\u002Fp>\u003Cp>白話翻譯就是：你不用一直背著 fork 跑。很多 serving patch 一開始都很帥，後來變成技術負債，原因很簡單，大家一開始都以為自己只是在試新東西，最後卻把整個線上服務綁死在那個分支上。上游化至少表示，這件事已經不是單點實驗，而是開始進入正常 runtime 的範圍。\u003C\u002Fp>\u003Cp>我也會順手看它支援哪些模型家族。repo 提到像 Qwen、Llama、Mistral、Gemma 這些常見系統，這就比較像真的能拿來評估的東西，不是只在某一顆 checkpoint 上表演。\u003C\u002Fp>\u003Cp>實操寫法：如果你本來就在用 vLLM，先查你的目標模型跟 serving 模式是不是已經被上游涵蓋。能用上游就先用上游，fork 留給實驗。fork 一旦變成基礎設施，後面就是固定繳稅。\u003C\u002Fp>\u003Ch2>我會先拿它用在哪裡，不會亂上\u003C\u002Fh2>\u003Cp>我第一個會試的場景，是長上下文聊天、多租戶推理，還有任何記憶體頭寸已經卡住擴容的服務。這些場景最現實，因為你不是在追論文分數，而是在想怎麼讓同一批 GPU 撐住更多真實請求。尤其是小一點的卡，記憶體常常比算力更先見底。\u003C\u002Fp>\u003Cp>但我不會把它當成萬用解。假如你的瓶頸其實是 CPU 前處理、網路延遲、或 scheduler 設得太爛，KV cache 壓縮救不了你。模型很小、上下文很短的情況也一樣，硬塞壓縮只會增加複雜度，收益卻很有限。\u003C\u002Fp>\u003Cp>也就是說，這東西最適合那種很煩的中間地帶：模型有用、上下文是真的長、GPU 又剛好差那一點點。這種情境下，壓縮才會真的有價值。不是實驗室裡的漂亮 demo，而是產品跟財務在拉扯時，你還能多撐一點的那種工具。\u003C\u002Fp>\u003Cp>實操寫法：先拿一條真實工作流做 before\u002Fafter。量 VRAM、量延遲、也要看回答品質。只要記憶體真的降、品質也還能接受，就值得留。反過來就收手，別硬撐。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># TurboQuant 風格的 vLLM 評估清單\n\n## 1) 先決定你要縮什麼\n- [ ] 模型權重記憶體\n- [ ] KV cache 記憶體\n- [ ] 兩者都要\n\n## 2) 先選 serving 路線\n- [ ] 直接走上游 vLLM\n- [ ] 走 TurboQuant 外掛路線\n- [ ] 只有特定模型才用 monkey patch\n\n## 3) 先確認硬體支援\n- [ ] GPU 架構支援快路徑\n- [ ] 快路徑失效時 PyTorch fallback 可接受\n- [ ] batch size 1 有實測\n\n## 4) 先選壓縮模式\n- [ ] 3-bit 權重壓縮\n- [ ] KV cache 壓縮\n- [ ] 混合模式，但只在你真的量過之後用\n\n## 5) 用一條真實工作流驗證\n- [ ] prompt 長度符合正式環境\n- [ ] 對話品質有人工檢查\n- [ ] 壓縮前後 VRAM 有記錄\n- [ ] 壓縮前後 decode 延遲有記錄\n\n## 6) 可直接改的 serve 範本\nvllm serve &lt;model-name&gt; \\\n  --kv-cache-dtype &lt;compression-mode&gt; \\\n  --dtype bfloat16 \\\n  --trust-remote-code \\\n  --max-model-len &lt;你的上下文長度&gt;\n\n## 7) 上線順序\n- 先挑一個模型\n- 先測一種 GPU\n- 先保留 fallback\n- 再擴到整個 fleet\n\n## 8) 決策規則\n如果記憶體真的降很多，而且品質還在可接受範圍，就保留。\n如果記憶體有降但品質壞掉，就退回去。\n如果快路徑不穩，就先留 fallback，之後再修。\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這段模板是我把 TurboQuant 的思路整理成比較好落地的版本，不是 repo 原文。你可以直接貼進自己的評估文件、PoC checklist，或 deployment runbook，先把問題拆清楚，再決定要不要真的上。\u003C\u002Fp>\u003Cp>來源致謝：原始 repo 是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvarjoranta\u002Fturboquant-vllm\">https:\u002F\u002Fgithub.com\u002Fvarjoranta\u002Fturboquant-vllm\u003C\u002Fa>，上游脈絡可對照 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvllm-project\u002Fvllm\u002Fpull\u002F38479\">vllm-project\u002Fvllm#38479\u003C\u002Fa>。我這篇是把它的做法拆開、重寫成\u003Ca href=\"\u002Ftag\u002F台灣開發者\">台灣開發者\u003C\u002Fa>比較好用的版本，模板與判斷框架是我自己的整理。\u003C\u002Fp>","我拆 TurboQuant 怎麼把 vLLM 的 KV cache 壓到 3-bit，順手整理成可直接套用的部署判斷與模板。","github.com","https:\u002F\u002Fgithub.com\u002Fvarjoranta\u002Fturboquant-vllm",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779286504704-sisl.png","tools","zh","49dbda12-d94e-4e41-99d0-200d57eb97a9",[17,18,19,20,21],"vLLM","KV cache","3-bit 量化","推理壓縮","CUDA kernel",[23,24,25],"KV cache 壓縮和權重壓縮是兩件不同的事，先搞清楚瓶頸再動手。","TurboQuant 的價值不只在壓縮比，還在 fallback、kernel 和上游整合。","最適合先用在長上下文聊天、多租戶推理、記憶體卡住的部署。",4,"2026-05-20T14:14:36.149676+00:00","2026-05-20T14:14:36.101+00:00","c3c88dd2-a940-438a-b359-0e5a24562273",{"tags":31,"relatedLang":41,"relatedPosts":45},[32,34,36,38,40],{"name":18,"slug":33},"kv-cache",{"name":21,"slug":35},"cuda-kernel",{"name":17,"slug":37},"vllm",{"name":19,"slug":39},"3-bit-量化",{"name":20,"slug":20},{"id":15,"slug":42,"title":43,"language":44},"turboquant-vllm-kv-cache-3bit-storage-en","TurboQuant turns vLLM KV cache into 3-bit storage","en",[46,52,58,64,70,76],{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"category":13},"63d8b456-ad6b-475e-86e9-d4677ca226aa","magenta-realtime-2-score-inside-daw-zh","Magenta RealTime 2 讓你在 DAW 裡即時改曲","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781046204038-8tox.png","2026-06-09T23:02:55.9651+00:00",{"id":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"category":13},"f60261ff-a42e-4cfb-9f90-97785e633289","open-source-ai-tools-beat-claude-paid-tiers-zh","開源 AI 工具在價值上已經贏過 Claude 付費方案","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781045266035-on7t.png","2026-06-09T22:47:20.195939+00:00",{"id":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"category":13},"8520cd4f-2531-4808-a95d-26f590239d7a","500-ai-agent-projects-show-where-agents-work-now-zh","500 個 AI agent 專案，現在能做什麼","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781033591132-c0nh.png","2026-06-09T19:32:37.03924+00:00",{"id":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"category":13},"c557ef1c-7fde-4c86-918e-4fb9680ee9df","chocolatey-go-package-policy-installs-zh","Chocolatey 的 Go 安裝變成政策","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781029110289-xkbh.png","2026-06-09T18:18:05.078435+00:00",{"id":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"category":13},"90b2df54-df6e-417d-9e16-91e9ad2f53d7","go-support-policy-turns-releases-into-a-checklist-zh","Go 支援政策把發版變清單","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781028200122-3m4u.png","2026-06-09T18:02:49.50176+00:00",{"id":77,"slug":78,"title":79,"cover_image":80,"image_url":80,"created_at":81,"category":13},"119c23c6-8ae7-4c4e-820e-1eba0730d702","rustdesk-self-hosting-secure-remote-access-zh","RustDesk 自架遠端存取部署指南","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781017373324-g7et.png","2026-06-09T15:02:24.118819+00:00",[83,88,93,98,103,108,113,118,123,128],{"id":84,"slug":85,"title":86,"created_at":87},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]