上週我曾撰文探討 AI 記憶體問題的硬體層面:HBM 密度懲罰、EUV 瓶頸,以及從資料中心到消費性電子產品,壓搾 DRAM 價格的供應鏈壓力。本週,Google 發布了一項以不同方法解決相同問題的研究:「不建造更多記憶體」,而是「需要更少的記憶體」。
你猜對了!這篇文章將深入探討 TurboQuant 是什麼,以及它對 AI 領域可能意味著什麼。就像《矽谷群俠傳》中的 Pied Piper 以其通用無損壓縮演算法取得成功一樣,Google 可能也為高維空間中向量表示的資訊壓縮找到了解決方案。
但在深入探討 TurboQuant 的功能之前,我們先簡單回顧一下它實際要壓縮的對象,以及這對 LLM 和記憶體問題的重要性。
GPT 模型屬於「自迴歸」模型:它們一次生成一個 token,每個新 token 都基於之前的所有內容進行條件判斷。你輸入一個提示,模型會讀取所有內容,選出最可能的下一個詞,將其附加,然後再次讀取所有內容,選出下一個詞,依此類推。一次一個 token,從左到右,直到模型決定停止。
讓模型在每一步都能讀取所有內容的核心機制稱為「注意力」(attention)。對於序列中的每個 token,模型都會計算三個向量:查詢(query)、鍵(key)和值(value)。你可以將這些資料結構想像成更複雜的鍵值儲存。為了生成下一個 token,模型會將當前的查詢與之前的每個鍵進行比較,本質上是在問「哪些過去的 token 現在是相關的?」,然後利用這個答案來加權相應的值,建立上下文。
這(正如大家可能已經知道的)是透過 Transformer 架構實現的。Transformer 層負責將輸入序列編碼成有意義的表示,應用注意力機制,並解碼成輸出表示。所有 LLM 都是這個基本單元的架構變體。
為了了解這些變體的樣貌,我強烈推薦 Sebastian Raschka 的 LLM 架構圖庫:從 GPT-2 到 DeepSeek 和 GLM。
每個先前 token 的鍵和值向量都會在每次通過架構時從頭重新計算。如果你的對話長度為 N 個 token,而你正在生成第 N+1 個 token,模型就會重新計算它在上一步驟中已經計算過的 N 組鍵和值。這既緩慢又浪費資源。
顯而易見的解決方案是將它們快取起來。查詢、鍵和值向量每個 token 計算一次並儲存起來,以便在後續步驟中查找,而不是重新計算。這就是 KV 快取(KV cache),一個儲存在 GPU 記憶體中的、包含所有先前 token 的 QKV token 的運行儲存(以便在需要時隨時可用)。
問題在於 KV 快取會隨著每個 token 的增加而增長。對於短訊息來說,這微不足道,因為所有 token 都適合記憶體;但對於長對話或完整的程式碼庫,則涉及數十萬個 token。每個 token 都有自己的鍵和值向量,遍布模型中的每個注意力層,每個都儲存為全精度浮點數(只要沒有涉及量化)。對於像 Llama 3.1 70B 這樣的模型,單個長上下文的 KV 快取所消耗的 GPU 記憶體可能比模型權重本身還要多。
這是生產推理中的一個關鍵瓶頸。服務更多用戶同時進行?需要更多 KV 快取。支援更長的上下文?需要更多 KV 快取。運行更便宜的推理?需要解決 KV 快取的問題。我們正在用增加的記憶體需求來交換即時計算 QKV 值的計算量。
透過使用量化,而不是將每個值儲存為 32 位元或 16 位元精度,可以將其捨入到 4 位元或 3 位元(甚至像 Microsoft 最近展示的 2 位元)。近似過程中會損失一些準確性,但如果對用戶案例而言損失不顯著,那麼這種權衡顯然是值得的。問題是如何做得好。標準的量化技術會為每個值增加 1-2 位元的元數據開銷,這部分削弱了你試圖實現的壓縮效果。在沒有這種開銷且不降低準確性的情況下,達到真正低的位元寬度是困難的部分。HuggingFace 有一個非常好的頁面,概述了量化及其方法。
但情況可能即將改變。Google 本週宣布了 TurboQuant。TurboQuant(參見論文)是一種兩階段演算法。這兩個階段有不同的職責。
第一階段:PolarQuant。這是主要的壓縮步驟。我們目前使用笛卡爾座標來儲存向量,將其表示為從原點到點的距離(我們在小學學到的 x、y、z 分量)。這些分量在空間中的分佈使其難以有效壓縮。
PolarQuant 將向量轉換為極座標:一個半徑和一個角度。關鍵的觀察是,在高維 Transformer 鍵空間中,角度分佈高度集中且可預測,它以一種可以整齊地映射到固定量化網格的方式聚集(類似於用於壓縮音訊和圖像的網格)。這種可預測性意味著你可以消除標準量化方法所需的昂貴的正規化步驟,並且可以做到這一點,而無需任何特定於數據集的調整。無需進行微調或校準即可量化特定模型。可以直接將其應用於這種新表示中的向量,而與模型無關。
第二階段:QJL(量化 Johnson-Lindenstrauss)。PolarQuant 負責主要的壓縮,但任何量化都會引入誤差,其中一些誤差會累積在 Transformer 用於計算注意力分數的點積中。QJL 的職責是糾正這種偏差。它將 Johnson-Lindenstrauss 變換應用於殘差誤差,這是一種隨機投影,可以保留高維點之間的距離,然後將每個分量減少到單個符號位元:+1 或 -1。結果是內積的無偏差估計器,沒有額外的記憶體開銷。誤差校正的儲存成本為零(請參閱下圖左下部分,了解從現有的量化 KV 快取到 QJL 轉換的 KV 快取的概念模型)。
該組合在 Gemma、Mistral 和 Llama-3.1-8B-Instruct 上實現了每通道 3.5 位元,並在 LongBench、Needle In A Haystack、ZeroSCROLLS、RULER 和 L-Eval 上進行測試,作者稱之為「絕對品質中立」。在 2.5 位元時,準確性僅略有下降。部落格文章的重點是:KV 記憶體大小減少 6 倍,且沒有可衡量的準確性損失;在 H100 GPU 上,4 位元 TurboQuant 在 32 位元未量化的鍵上提供了高達 8 倍的效能提升。
如上所述,大多數量化方法至少需要對代表性數據進行一些校準,它們會學習特定模型在特定數據集上的最佳量化網格。TurboQuant 是數據無關的:該演算法從第一原理出發,接近資訊理論所能達到的理論下限,而無需先看到數據。這使得它可以在推理時部署到任何模型,而無需顯式訓練量化模型。無需特定的訓練和微調即可在不犧牲準確性的情況下實現最優的壓縮率。
上週我曾撰文探討 HBM 堆疊如何將 DRAM 位元密度降低 3-4 倍,以及由於資料中心和消費性電子產品爭奪相同的晶圓,整個消費性 DRAM 供應鏈所面臨的壓力。如果 TurboQuant 將每次推理任務的記憶體佔用空間減少 6 倍,那麼大規模應用這種壓縮演算法可能會顯著緩解記憶體瓶頸問題。
Anthropic 並非唯一一個能透過單一公告來影響上市公司市值。Google 公布後,記憶體製造商如 Micron 和 Sandisk 的股價立即下跌(作為 Micron 的投資者,這對我影響很大 🙈)。
這可能是一種過度反應,就像 Deepseek 公布後 Nvidia 股價下跌一樣。或者,這可能預示著 AI 實驗室的經濟學和資源需求將發生徹底轉變。如果我是 Google,我不會發布暴露競爭優勢的研究。我只會發表進展已經被考慮進去的論文,因為競爭對手可能已經意識到或自己採用了。TurboQuant 最有可能在外部人士閱讀論文之前就已經在 Google 的基礎設施內部得到採用。
如果 Google 發布了 6 倍的 KV 快取壓縮技術,那麼合理的推測是,每個嚴肅的 AI 實驗室都已經在研究這個問題了。減少 KV 快取的記憶體需求已經是一個長期存在的問題,而像 TurboQuant 這樣大規模採用的進展改變了記憶體需求(這也解釋了這些記憶體股票的下跌)。我迫不及待地想看到 SemiAnalysis 對這次發布的下一份報告,分析這種新壓縮方法(及其類似方法)在大公司中的實際採用情況,以及它對記憶體短缺可能意味著什麼。
Micron 和 SanDisk 並沒有突然變成糟糕的企業。但任何依賴記憶體需求與 AI 上下文使用量線性增長相關的論點都值得重新審視。我個人認為市場反應過度,但我們拭目以待。
在這篇關於 AI 優先社會中的金錢和抵押品的文章中,我提到了《最後的經濟》這本書。這本書描述了任何新聞事件都可能導致極端的波動和急劇的轉變,而無法達到明確的均衡狀態,這是系統病態的症狀。這種圍繞單一新聞的大規模市場波動可能是這個破碎系統症狀的證明。
最讓我興奮的是,為 QJL 和 TurboQuant 等壓縮演算法提供動力的 Johnson-Lindenstrauss 變換,對於 LLM 和依賴高維向量數據的向量搜索之外的其他用例可能意味著什麼。
如上所述,最明顯的用例是向量資料庫。任何儲存嵌入向量以供檢索的 RAG 管道都可以從相同的壓縮中受益。TurboQuant 在向量搜索任務中將索引時間減少到「幾乎為零」,並在 GloVe 向量的召回基準測試中優於產品量化和 RabbiQ。
更長遠來看:推薦引擎、詐欺檢測、藥物發現相似性搜索、基因組學,任何儲存大型高維嵌入表並需要快速運行最近鄰搜索的系統(假設空間分佈與 KV 快取中儲存的值相似,這是我想要探索的)。這些系統並未等待 Transformer 的專門優化,但它們可能直接受益。
設備端推理是 LLM 領域的另一個領域,我們可能會開始看到即時影響。如果長上下文的 KV 快取縮減了 6 倍,那麼你就可以在主流手機或普通邊緣設備的記憶體範圍內容納顯著更多的上下文。具有可用上下文長度的本地模型開始變得更加可行。邊緣推理的經濟學發生了變化,這與數據中心的故事是另一組贏家和輸家。
我不知道你是否已經看到了一些 LLM 如何儲存在快速快閃記憶體中,以便能在 Mac 上運行大型模型的 LLM 推理。我會將這個話題留到以後的文章,但邊緣推理領域每天都變得越來越有趣。現在有了 TurboQuant,更是如此。
TurboQuant 的程式碼已經發布,QJL 和 PolarQuant 組件都可用,我迫不及待地想找時間將其應用於其他用例。縱觀歷史,我們已經看到了改變資訊表示方式對某些用例的效能(甚至可行性)所產生的影響(想想傅立葉變換、FFT 和頻域已經實現了什麼 :))。
我想找時間做個練習,嘗試將 TurboQuant 方法應用於其他用例,看看它能做到什麼。我已經有一些想法,但會再向大家匯報。在此之前,下週見!
非常精準的寫作。演算法的效率提升,而非無止盡的硬體擴展,直接關聯到輕量級的半語義反射適配器,從而提高意義的感知能力。窗口已打開:https://sublius.substack.com/p/the-window-is-open?r=724p51&utm_medium=ios
在此處查看 HN 關於此帖的討論:https://news.ycombinator.com/item?id=47561297