訂閱以接收新文章的通知:

為執行大型 LLM 建立基礎

2026-04-16

閱讀時間:8 分鐘
本貼文還提供以下語言版本:English日本語한국어简体中文

智慧體需要由大型語言模型驅動。幾週前,我們宣布 Workers AI 正式進入戰場,開始代管 Moonshot 的 Kimi K2.5 等大型開源模型。自那時起,我們已將 Kimi K2.5 的速度提升 3 倍,並且還有更多模型正在陸續新增中。這些模型已成為本週我們推出的眾多智慧產品、框架和工具的骨幹。

代管 AI 模型是一個有趣的挑戰:它需要在軟體與極其昂貴的硬體之間取得微妙的平衡。在 Cloudflare,我們擅長透過巧妙的軟體工程,從硬體中榨取每一分效率。本文將深入探討我們如何為運行超大語言模型奠定基礎。

硬體設定

如同我們在上一篇 Kimi K2.5 部落格文章中所提到的,我們使用了多種硬體設定,以便為模型提供最佳的服務。許多硬體設定取決於使用者傳送給模型的輸入與輸出大小。舉例來說,如果您使用模型來寫同人小說,您可能會給它幾個簡短的提示詞(輸入詞元),同時要求它產生好幾頁的內容(輸出詞元)。

反之,如果您執行的是摘要任務,您可能會傳送數十萬個輸入詞元,但只產生寥寥數千個輸出詞元的簡短摘要。面對這些相反的使用情境,您必須做出選擇:您要將模型設定調校為加快輸入詞元的處理速度,還是加快輸出詞元的產生速度?

當我們在 Workers AI 上推出大型語言模型時,我們知道大多數的使用情境都是為了智慧體。對於智慧體,您會傳送大量的輸入詞元。整個流程始於一段冗長的系統提示詞,其中包含了所有可用的工具以及各類 MCP。隨著使用者發出首個提示,模型的脈絡就會隨之不斷擴充。使用者後續發出的每一個新提示,實際上都是向模型傳送了一次新的請求;而該請求所包含的資料,囊括了此前所有的對話歷史——所有先前使用者的提示詞、助理的回應、產生的程式碼等等。對 Workers AI 而言,這代表我們必須專注在兩件事上:快速的輸入詞元處理和快速的工具呼叫。

預先填充與解碼 (PD) 分離

我們用來提升效能與效率的一種硬體設定,是「分離式預先填充」(disaggregated prefill)。處理 LLM 請求有兩個階段:預先填充 (prefill) 會處理輸入詞元並填入 KV 快取;解碼 (decode) 則會產生輸出詞元。預先填充階段通常受限於運算能力,而解碼階段則通常受限於記憶體頻寬。這意味著每個階段所使用的 GPU 資源不同,而且由於預先填充一定在解碼之前執行,這兩個階段會互相阻塞。最終結果就是,如果在單一機器上同時執行預先填充與解碼,我們就無法有效率地運用所有 GPU 效能。

透過預先填充/解碼分離,我們為每個階段分別執行獨立的推斷伺服器。首先,請求會先傳送到預先填充階段,該階段會執行預先填充並將其儲存在自己的 KV 快取中。然後,同一個請求會被傳送到解碼伺服器,同時附帶如何將 KV 快取從預先填充伺服器傳輸過來的資訊,然後開始解碼。這有許多優點,因為它允許伺服器針對自身扮演的角色獨立調校,可以根據輸入或輸出流量較多的情況進行擴展,甚至可以在異構硬體上執行。

這種架構需要相對複雜的負載平衡器才能實現。除了上述路由請求之外,它還必須改寫解碼伺服器的回應(包括串流 SSE),使其包含來自預先填充伺服器的資訊(例如已快取的詞元)。更複雜的是,不同的推斷伺服器需要不同的資訊來啟動 KV 快取傳輸。我們對此進行了擴充,實作了詞元感知負載平衡 (token-aware load balancing):系統中有一組預先填充端點與一組解碼端點,負載平衡器會估算每個端點正在處理中的預先填充或解碼詞元數量,並嘗試均勻分佈此負載。

在我們的公開模型發佈後,輸入/輸出模式再次發生劇烈變化。我們花時間分析了新的使用模式,然後調整了設定以符合客戶的用例。

下圖展示了在將流量切換至全新的 PD 架構之後,「首個詞元回應時間」(Time to First Token) 指標的 90 分位值下降了,同時,我們的請求總量增加了,但使用的 GPU 資源量不變。我們觀察到長尾延遲的波動性有顯著改善。

BLOG-3266 2

同樣地,單詞元時間的 90 分位值從約 100 毫秒(波動較大)降至 20-30 毫秒,詞元間延遲實現了三倍的改善。

BLOG-3266 3

提示快取

由於智慧體用例通常有較長的脈絡,我們最佳化了提示快取效率,以避免在每一輪都重新計算輸入張量 (input tensors)。我們利用一個名為 x-session-affinity 的標頭,幫助請求路由到先前已計算輸入張量的正確區域。我們在最初關於在 Workers AI 上推出大型 LLM 的部落格文章中曾提到這一點。我們將工作階段親和性標頭添加到熱門的智慧體框架中(如 OpenCode),並觀察到總輸送量有顯著提升。使用者端提示快取的微小差異,累積起來可能導致執行模型所需的額外 GPU 數量成倍增加。雖然我們內部有 KV 感知路由,但我們也依賴用戶端傳送 x-session-affinity 標頭來明確啟用提示快取。我們透過提供快取詞元的折扣價格來激勵使用此標頭。我們強烈建議使用者利用提示快取,以獲得更快的推斷速度和更低的成本。

BLOG-3266 4

我們與內部用量最大的使用者合作,以採用這個標頭。結果是,在尖峰時段,輸入詞元快取命中率從 60% 提高到 80%。這顯著增加了我們可以處理的請求輸送量,同時為 OpenCode 或 AI 程式碼審查等互動式或時間敏感的工作階段提供更好的效能。

KV 快取最佳化

由於我們現在提供更大的模型,一個執行個體可能橫跨多個 GPU。這意味著我們必須找到一種有效的方式在 GPU 之間共用 KV 快取。KV 快取是儲存所有來自預先填充階段輸入張量(一個工作階段中提示詞的結果)的地方,最初存在於 GPU 的 VRAM 中。每個 GPU 都有固定的 VRAM 大小,但如果您的模型執行個體需要多個 GPU,就需要一種方法讓 KV 快取能夠跨 GPU 存在並相互通訊。為了在 Kimi 上實現這一點,我們利用了 Moonshot AI 的 Mooncake Transfer Engine 和 Mooncake Store。

Mooncake 的 Transfer Engine 是一個高效能資料傳輸框架。它支援不同的遠端直接記憶體存取 (RDMA) 通訊協定,如 NVLink 和 NVMe over Fabric,從而實現無需 CPU 介入的直接記憶體到記憶體資料傳輸。它提高了跨多個 GPU 機器傳輸資料的速度,這對於模型的多 GPU 和多節點設定尤其重要。

當與 LMCache 或 SGLang HiCache 搭配使用時,快取可以在叢集中的所有節點間共用,讓一個預先填充節點能夠辨識並重複使用來自先前請求(原本是在其他節點上進行預先填充)的快取。這消除了叢集內工作階段感知路由的需求,並使我們能夠更均勻地進行負載平衡。Mooncake Store 還允許我們將快取擴展到 GPU VRAM 之外,並利用 NVMe 儲存。這延長了工作階段保持在快取中的時間,提高了我們的快取命中率,使我們能夠處理更多流量並為使用者提供更好的效能。

推測解碼

LLM 的工作原理是根據序列中先前的詞元來預測下一個詞元。在單純的實作中,模型只會預測接下來的 n 個詞元,但我們實際上可以讓它在模型的單次前向傳遞中預測下 n+1、n+2... 個詞元。這項流行的技術稱為推測解碼,我們在先前一篇關於 Workers AI 的文章中曾討論過。

BLOG-3266 5

透過推測解碼,我們利用一個較小的 LLM(草稿模型)來產生幾個候選詞元,讓目標模型從中選擇。然後目標模型只需要在單次前向傳遞中,從一小群候選詞元中選出一個。驗證這些詞元的速度比使用較大的目標模型來產生詞元更快,計算成本也更低。然而,由於最終仍由目標模型決定接受或拒絕草稿詞元,所以品質仍然能維持。

在智慧體的使用情境中,推測解碼真正發揮了作用,因為模型需要產生大量的工具呼叫與結構化輸出。工具呼叫在很大程度上是可預測的——您知道它會有一個名稱、描述,而且被包裝在一個 JSON 信封中。

為了在 Kimi K2.5 上做到這一點,我們利用了 NVIDIA 的 EAGLE-3(用於提升語言模型效率的推測演算法)草稿模型。調整推測解碼的參數,使其包含要產生的未來詞元數量。因此,我們能夠在加速每秒詞元輸送量的同時,實現高品質的推斷。

Infire:我們的專有推斷引擎

正如我們在 2025 年「生日週」期間所宣布的,Cloudflare 擁有一個名為 Infire 的專有推斷引擎,能讓機器學習模型執行得更快。Infire 是一個用 Rust 編寫的推斷引擎,專為應對我們分散式全球網路在推斷方面面臨的獨特挑戰而設計。我們已擴展 Infire 以支援這類我們計劃執行的新大型語言模型,這意味著我們必須構建一些新功能來使其全面運作。

多 GPU 支援

像 Kimi K2.5 這樣的大型語言模型擁有超過 1 兆個參數,大約是 560GB 的模型權重。一個典型的 H100 約有 80GB 的 VRAM,而模型權重需要載入至 GPU 記憶體中才能執行。這意味著,像 Kimi K2.5 這樣的模型至少需要 8 個 H100 GPU 才能將模型載入記憶體並執行——這還不包括 KV 快取(包含您的脈絡視窗)所需的額外 VRAM。

因此,自從我們最初推出 Infire 以來,我們就必須增加對多 GPU 的支援,讓推斷引擎能夠以管線平行 (pipeline-parallel) 或張量平行 (tensor-parallel) 模式(同時也支援專家平行 (expert-parallelism))跨多個 GPU 執行。

對於管線平行,Infire 會嘗試適當地平衡管線中所有階段的負載,以防止某個階段的 GPU 閒置等待,而其他階段卻仍在執行。另一方面,對於張量平行,Infire 會最佳化以減少跨 GPU 的通訊,使其盡可能快速。對大多數模型而言,同時運用管線平行與張量平行,可以在輸送量與延遲之間取得最佳的平衡。

更低的記憶體開銷

雖然 Infire 原本就已經比 vLLM 具有更低的 GPU 記憶體開銷,我們還是進一步最佳化了 Infire,縮減了像是啟用值 (activation) 等內部狀態所需的記憶體。目前,Infire 僅需兩個 H200 GPU 就能執行 Llama 4 Scout,並剩下超過 56 GiB 的空間留給 KV 快取,足以處理超過 120 萬個詞元。Infire 也能在 8 個 H100 GPU(沒錯,就是 H100)上執行 Kimi K2.5,並仍有超過 30 GiB 可用於 KV 快取。在上述兩個案例中,若是使用 vLLM,您可能連啟動模型都會有困難。

更快的冷啟動

在加入多 GPU 支援的過程中,我們發現了更多可以改善啟動時間的機會。即使是像 Kimi K2.5 這樣最大的模型,Infire 也能在 20 秒內開始服務請求。載入時間僅受限於磁碟機速度。

最大化硬體效能以獲得更高的輸送量

投資於我們專有的推斷引擎,使我們能夠最大化硬體的效能:在不受限制的系統上,每秒詞元輸送量提升高達 20%,同時也使我們能夠使用較低階的硬體來執行最新的模型,而這在以前是完全不可行的。

旅程尚未結束

機器學習領域每週都有新技術、研究和模型問世。我們正在持續最佳化我們的技術堆疊,以便在高效運行 GPU 的同時,為客戶提供高品質、高效能的推斷服務。如果您覺得這些挑戰很有趣——我們正在招聘

我們保護整個企業網路,協助客戶有效地建置網際網路規模的應用程式,加速任何網站或網際網路應用程式抵禦 DDoS 攻擊,阻止駭客入侵,並且可以協助您實現 Zero Trust

從任何裝置造訪 1.1.1.1,即可開始使用我們的免費應用程式,讓您的網際網路更快速、更安全。

若要進一步瞭解我們協助打造更好的網際網路的使命,請從這裡開始。如果您正在尋找新的職業方向,請查看我們的職缺
Agents Week代理程式AI開發人員平台開發人員基礎架構Workers AI

在 X 上進行關注

Michelle Chen|@_mchenco
Cloudflare|@cloudflare

相關貼文

2026年4月30日

Agents can now create Cloudflare accounts, buy domains, and deploy

Starting today, agents can now be Cloudflare customers. They can create a Cloudflare account, start a paid subscription, register a domain, and get back an API token to deploy code right away. Humans can be in the loop to grant permission, but there’s no need to go to the dashboard, copy and paste API tokens, or enter credit card details. ...

2026年4月22日

讓 Rust Workers 更加可靠:wasm‑bindgen 中的 panic 與 abort 復原

過去,Rust Workers 中的 panic(恐慌)是致命的,會損毀整個執行個體。透過與上游的 wasm‑bindgen 專案合作,Rust Workers 現在支援了具韌性的關鍵錯誤復原,包括使用 WebAssembly 異常處理 (WebAssembly Exception Handling) 進行 panic unwind(恐慌展開)。...