LLM 推理引擎綜述:優(yōu)化與效率的多維探索
大家好,我是肆〇柒,玩開源模型蠻久了,做開源模型項(xiàng)目的各位,應(yīng)該都了解推理引擎在工程落地上的重要性。一個好的推理引擎,不僅要具備算力的精準(zhǔn)調(diào)度能力,還需要符合工程基線的穩(wěn)定性指標(biāo),更重要的,還要保障模型的推理精度符合業(yè)務(wù)標(biāo)準(zhǔn)。然而,隨著模型規(guī)模的指數(shù)級膨脹,如何高效地部署和運(yùn)行這些模型,成為了技術(shù)發(fā)展道路上的關(guān)鍵挑戰(zhàn)。今天,讓我們一起探索一下 LLM 推理引擎,看看那些隱藏在智能應(yīng)用背后的 “效率加速器” 是如何工作的。
LLM 架構(gòu):解碼器與注意力機(jī)制的精妙配合
(一)解碼器架構(gòu):自回歸訓(xùn)練的零樣本 powerhouse
當(dāng)下盛行的 LLM 主要都是基于解碼器架構(gòu)的,這種架構(gòu)的優(yōu)勢在于其強(qiáng)大的自回歸訓(xùn)練能力。自回歸訓(xùn)練讓模型在面對新任務(wù)時展現(xiàn)出驚人的零樣本(Zero-shot)性能。解碼器架構(gòu)通過多層神經(jīng)網(wǎng)絡(luò)對輸入序列進(jìn)行建模,每一步都基于前面生成的 token 預(yù)測下一個 token,這種機(jī)制使得模型能夠捕捉語言的時序依賴關(guān)系,生成高質(zhì)量的文本輸出。
解碼器架構(gòu)在生成文本時,會先對輸入的提示(Prompt)進(jìn)行編碼,然后通過逐個生成 token 來構(gòu)建輸出序列。在每一步生成過程中,模型都會參考之前生成的所有 token,從而確保輸出的連貫性和邏輯性。這種自回歸特性使得解碼器架構(gòu)在處理需要強(qiáng)邏輯連貫性的任務(wù)時表現(xiàn)尤為出色,例如問答系統(tǒng)和文本摘要等。
例如,在 OpenAI 的 ChatGPT 和 Google 的 Gemini 等模型中,解碼器架構(gòu)使得模型能夠根據(jù)用戶輸入的提示生成連貫且邏輯性強(qiáng)的回答。當(dāng)用戶提問 “What is the capital of France?” 時,模型會先對問題進(jìn)行編碼,然后逐步生成回答 “The capital of France is Paris.” 每一步生成的 token 都依賴于之前的上下文,從而確保回答的準(zhǔn)確性和連貫性。
Decoder-only Transformer 架構(gòu)概述
(二)注意力機(jī)制:從 MQA 到 GQA 的效率革命
注意力機(jī)制是 LLM 的核心組件之一,它允許模型在生成每個 token 時關(guān)注輸入序列中的相關(guān)部分。傳統(tǒng)的多頭注意力(MHA)機(jī)制雖然強(qiáng)大,但其內(nèi)存占用和計(jì)算復(fù)雜度隨著序列長度的增加呈二次增長,這對長文本處理構(gòu)成了挑戰(zhàn)。為了解決這一問題,研究人員提出了多種優(yōu)化方案,如多查詢注意力(MQA)和分組查詢注意力(GQA)。
MQA 通過共享多個查詢頭之間的 K 和 V 矩陣,將 KV 緩存的內(nèi)存占用從與注意力頭數(shù)成正比降低到與查詢頭數(shù)成正比。GQA 則在 MQA 的基礎(chǔ)上進(jìn)一步平衡內(nèi)存效率和模型性能,通過將注意力頭分組并共享 K 和 V,使得開發(fā)者能夠在內(nèi)存使用和模型精度之間靈活權(quán)衡。
以 DeepSeek-v2 模型為例,該模型引入的多頭潛在注意力(MLA)通過將多個頭的 K 和 V 壓縮到一個共享的潛在向量中,進(jìn)一步減少了緩存大小,同時保留了模型的準(zhǔn)確性。這種創(chuàng)新的注意力機(jī)制顯著提升了 LLM 的推理效率,尤其是在長文本生成和處理場景中。
注意力機(jī)制
(三)架構(gòu)變體:位置嵌入與Tokenizer的細(xì)節(jié)抉擇
除了核心架構(gòu)和注意力機(jī)制外,LLM 的性能還受到多種架構(gòu)變體的影響。位置嵌入類型、Tokenizer 選擇以及歸一化層的位置等細(xì)節(jié)因素,都會對模型的推理效率和效果產(chǎn)生重要影響。
例如,BLOOM 模型采用注意力偏差(ALiBi)來替代傳統(tǒng)的位置編碼,而 Llama 和 Mistral 模型則使用旋轉(zhuǎn)位置編碼(RoPE)。不同的位置編碼方式會影響模型對序列位置信息的捕捉能力,進(jìn)而影響長序列處理的性能。此外,GPT 變體通常使用字節(jié)對編碼(BPE)Tokenizer,而 Llama 和 T5 則依賴 SentencePiece 基于單語的Tokenizer。這些Tokenizer的選擇不僅影響模型的詞匯表大小和 token 化效率,還會影響模型在不同語言和文本風(fēng)格上的適應(yīng)性。
例如,在處理醫(yī)學(xué)文獻(xiàn)時,RoPE 的位置編碼方式能夠更好地捕捉長序列中的位置信息,從而提高模型對醫(yī)學(xué)術(shù)語和長句的處理能力。而 BPE Tokenizer在處理代碼生成任務(wù)時,能夠更高效地 token 化代碼片段,提升模型的生成效率。
推理過程與優(yōu)化:KV 緩存與量化壓縮的協(xié)同作戰(zhàn)
(一)推理過程:預(yù)填充與解碼的雙階段交響曲
LLM 推理過程主要分為預(yù)填充(Prefill)和解碼(Decode)兩個階段。在預(yù)填充階段,模型對輸入文本進(jìn)行處理,計(jì)算出最后一個 token 的隱藏狀態(tài),這一階段涉及 token 化、嵌入和多個變換器塊的運(yùn)算。而在解碼階段,模型則基于預(yù)填充階段的結(jié)果,迭代生成后續(xù)的 token,直到滿足停止條件。
LLM 推理過程
以用戶向聊天機(jī)器人提問 “Is Seoul in Korea?” 為例,模型首先對輸入進(jìn)行預(yù)填充處理,生成初始的隱藏狀態(tài)。然后在解碼階段,逐步生成回答的每個 token,如 “Yes it is” 等。整個過程需要高效地利用計(jì)算資源和內(nèi)存,以確??焖偾覝?zhǔn)確的響應(yīng)。
在預(yù)填充階段,模型會將輸入文本轉(zhuǎn)換為高維向量表示,通過多層變換器塊進(jìn)行特征提取。每一步都涉及到大量的矩陣運(yùn)算和非線性變換,這些計(jì)算密集型操作決定了預(yù)填充階段的性能瓶頸。而在解碼階段,模型需要在每一步生成新的 token 時,參考之前生成的所有 token 的上下文信息,這導(dǎo)致了解碼階段的計(jì)算復(fù)雜度隨著生成序列長度的增加而線性增長。
大型語言模型的推理與服務(wù)過程
(二)優(yōu)化技術(shù):KV 緩存、內(nèi)核融合與量化的效率密碼
為了提升推理效率,多種優(yōu)化技術(shù)被廣泛應(yīng)用。
KV 緩存通過存儲每個 token 步驟中生成的 K 和 V 矩陣,避免在解碼階段重復(fù)計(jì)算,從而顯著降低推理延遲并提高吞吐量。內(nèi)核融合則將多個操作(如層歸一化、矩陣乘法和激活函數(shù))整合到一個 GPU 內(nèi)核中,減少內(nèi)存訪問和內(nèi)核啟動開銷。
量化技術(shù)將模型參數(shù)表示為低精度整數(shù)(如 8 位或 4 位),從而減少內(nèi)存占用和帶寬需求。例如,SmoothQuant 通過對激活和權(quán)重分布進(jìn)行歸一化處理,減少量化過程中的剪輯現(xiàn)象,實(shí)現(xiàn)穩(wěn)定的基于 PTQ 的激活量化,同時降低延遲和內(nèi)存使用。這些優(yōu)化技術(shù)的協(xié)同作用,使得 LLM 推理能夠在有限的硬件資源上實(shí)現(xiàn)高效運(yùn)行。
例如,在處理長文本生成任務(wù)時,KV 緩存能夠顯著減少解碼階段的計(jì)算量。假設(shè)生成一個包含 1000 個 token 的序列,每個 token 的 K 和 V 矩陣大小為 1024 維,通過 KV 緩存可以節(jié)省約 99% 的計(jì)算量,從而將推理延遲從數(shù)秒降低到數(shù)百毫秒。
KV Caching
推理引擎分類與特性剖析:從單節(jié)點(diǎn)到多節(jié)點(diǎn)的性能版圖
(一)推理引擎分類標(biāo)準(zhǔn):部署規(guī)模與硬件兼容性的雙重維度
根據(jù)部署規(guī)模和硬件兼容性,LLM 推理引擎可以分為單節(jié)點(diǎn)異構(gòu)設(shè)備、單節(jié)點(diǎn)同構(gòu)設(shè)備、多節(jié)點(diǎn)異構(gòu)設(shè)備和多節(jié)點(diǎn)同構(gòu)設(shè)備四類。
單節(jié)點(diǎn)異構(gòu)設(shè)備推理引擎適合在本地環(huán)境(如筆記本電腦、個人電腦等)上運(yùn)行,能夠利用多種硬件資源(如 CPU 和 GPU)進(jìn)行推理。單節(jié)點(diǎn)同構(gòu)設(shè)備推理引擎則專注于在單一類型的硬件上優(yōu)化推理性能,如僅在 CPU 或 GPU 上運(yùn)行。多節(jié)點(diǎn)異構(gòu)設(shè)備推理引擎適用于大規(guī)模分布式部署場景,能夠在多種硬件設(shè)備(如多個 GPU、TPU 或其他 AI 加速器)上協(xié)同工作,處理高并發(fā)請求。而多節(jié)點(diǎn)同構(gòu)設(shè)備推理引擎則在多個相同類型的硬件設(shè)備上進(jìn)行推理,通常用于高性能計(jì)算集群。
下面我們簡單了解一下這些具有代表性的推理引擎。
(二)代表性推理引擎概述
單節(jié)點(diǎn)異構(gòu)設(shè)備推理引擎
- Ollama :Ollama 是一個基于 Go 語言的推理引擎,專為本地部署而設(shè)計(jì),利用 llama.cpp 作為核心后端。它支持多種模型格式,如 GGUF 和 Safetensors,便于模型定制。通過 REST API,用戶可以輕松管理和執(zhí)行模型。Ollama 適合對技術(shù)背景要求較低的用戶進(jìn)行模型測試和部署。在單 GPU 環(huán)境下,模型加載速度相對傳統(tǒng)方式可提升 30%,推理延遲降低 20%。
- llama.cpp :llama.cpp 是一個用 C++ 編寫的 LLM 推理庫,支持在 CPU 上運(yùn)行。它支持多種數(shù)據(jù)類型量化(如 1.5 位、4 位和 8 位),提高量化效率。此外,llama.cpp 引入了 GGUF 格式,簡化了 LLM 的存儲和部署。該引擎適合在資源有限的硬件上運(yùn)行模型,且對硬件外部依賴性低。在 CPU 上運(yùn)行時,推理速度提升 25%。
- MAX :MAX 是一個基于 Mojo 語言的推理引擎,支持 CPU 和 GPU。它采用圖編譯器和運(yùn)行時,能夠加速生成式 AI 模型的推理。MAX 支持硬件無關(guān)的庫,提升了執(zhí)行效率,適用于需要在不同硬件平臺上高效部署 LLM 的場景。曾有團(tuán)隊(duì)利用 MAX 在多個硬件平臺上統(tǒng)一部署模型,開發(fā)周期縮短 40%。在多硬件平臺上,推理效率提升 35%,模型加載時間減少 50%。
- MLC LLM :MLC LLM 是一個基于 Apache TVM 的推理引擎,支持多平臺部署。它提供持續(xù)批處理和投機(jī)解碼優(yōu)化,并采用 FlashInfer 加速 GPU 推理。MLC LLM 適合在服務(wù)器和邊緣環(huán)境中統(tǒng)一部署 LLM 的場景。設(shè)備端推理相對比傳統(tǒng)方式,延遲降低 60%。在邊緣設(shè)備上,推理速度比傳統(tǒng)方法快 2 倍,模型加載時間減少 70%。
- PowerInfer :PowerInfer 是基于 llama.cpp 擴(kuò)展的推理引擎,支持在單消費(fèi)級 GPU 上運(yùn)行 LLM。它利用神經(jīng)元激活的冪律分布特性,將熱神經(jīng)元加載到 GPU,冷神經(jīng)元處理于 CPU。這種設(shè)計(jì)適用于本地單 GPU 環(huán)境,尤其是內(nèi)存受限的本地部署場景。相對同類引擎在同尺寸模型基礎(chǔ)上,系統(tǒng)資源占用降低 40%。GPU 內(nèi)存使用減少 35%,整體推理延遲降低 25%。
- TGI :TGI 是一個支持多硬件平臺的推理引擎,包括 NVIDIA GPUs、AWS Inferentia 和 Intel Gaudi。它采用量化、RoPE 縮放、Safetensors 和 Zero Config 自動配置等技術(shù)。TGI 適用于需要在多種硬件平臺上靈活部署 LLM 的場景。
單節(jié)點(diǎn)同構(gòu)設(shè)備推理引擎
- Unsloth :Unsloth 是一個支持 LLM 的高效微調(diào)和推理的推理引擎,采用 LoRA 和 QLoRA 技術(shù)。所有內(nèi)核用 OpenAI Triton 實(shí)現(xiàn),提升執(zhí)行速度。Unsloth 適合需要快速微調(diào)和高效推理的場景,尤其是對模型精度要求較高的場景。利用 Unsloth 快速微調(diào)模型,用于特定領(lǐng)域的文本生成任務(wù),微調(diào)時間相較傳統(tǒng)方式,可縮短 50%。微調(diào)速度比傳統(tǒng)方法快 2.5 倍,推理延遲降低 35%。
- llama2.c :llama2.c 是一個純 C 語言編寫的推理引擎,支持小型 Llama2 模型推理。代碼簡潔(約 700 行),支持 OpenMP 多線程。它適合教育目的和小型推理任務(wù),易用上手。在小型任務(wù)中,推理速度比復(fù)雜引擎快 1.8 倍,但擴(kuò)展性有限。
- bitnet.cpp :bitnet.cpp 是一個支持一比特 LLM 推理的推理引擎,基于 llama.cpp 開發(fā)。它采用多種內(nèi)核類型(如 I2_S、TL1 和 TL2),優(yōu)化 x86 和 ARM 處理器。bitnet.cpp 適用于對內(nèi)存和帶寬要求極高的場景,如嵌入式設(shè)備上的 LLM 部署。
- OpenLLM :OpenLLM 是一個基于 BentoML 的推理引擎,提供簡單命令執(zhí)行和部署開源 LLM 和自定義模型。它支持 vLLM 和 BentoML 后端,維持高吞吐量。OpenLLM 適合需要在云或本地服務(wù)器上快速部署 LLM 的場景,但多節(jié)點(diǎn)擴(kuò)展能力有限。
- LightLLM :LightLLM 是一個基于 Python 的輕量級且高度可擴(kuò)展的推理引擎。它采用三進(jìn)程異步協(xié)作方法,引入 TokenAttention 和高效路由器調(diào)度。LightLLM 適合在多用戶環(huán)境中高效部署 LLM 的場景。
- NanoFlow :NanoFlow 是一個引入 Nano-batching 技術(shù)的推理引擎,支持設(shè)備內(nèi)并行操作。它將批處理任務(wù)細(xì)分為更小的Nano批次,提升資源利用率。NanoFlow 適用于對吞吐量要求極高的場景,如實(shí)時數(shù)據(jù)處理,但對小規(guī)模任務(wù)的優(yōu)化效果有限。
- vAttention :vAttention 是一個基于 Sarathi-Serve 的推理引擎,支持動態(tài)管理 KV 緩存內(nèi)存。它采用虛擬張量和自定義 UVM 驅(qū)動,提升內(nèi)存管理效率。vAttention 適合需要高效內(nèi)存管理的場景,尤其是長序列推理任務(wù)。
- Sarathi-Serve :Sarathi-Serve 是一個基于 vLLM 構(gòu)建的推理引擎,解決推理中的吞吐量和時延權(quán)衡問題。它采用塊狀預(yù)填充和無停頓調(diào)度,降低 TBT。Sarathi-Serve 適合對時延要求極高的場景,如實(shí)時對話系統(tǒng)。
多節(jié)點(diǎn)異構(gòu)設(shè)備推理引擎
- vLLM :vLLM 是一個采用 PagedAttention 優(yōu)化內(nèi)存效率的推理引擎,支持 FlashAttention-3 技術(shù)降低推理時延。它支持 GPU 和 CPU 的分布式工作負(fù)載。vLLM 適用于追求快速 token 生成和低時延的高性能 LLM 服務(wù)場景。
- SGLang :SGLang 是一個支持多模型類型和多節(jié)點(diǎn)操作的推理引擎,采用 RadixAttention 基于 KV 緩存管理。它提供 OpenAI 兼容 API。SGLang 適用于需要高效多模型推理的場景,如多模態(tài)應(yīng)用。
- LMDeploy :LMDeploy 是一個支持推理和部署的優(yōu)化技術(shù)的推理引擎,如持續(xù)批處理、動態(tài)拆分融合和高性能 CUDA 內(nèi)核。它提供 TurboMind 引擎,支持高效 LLM 推理。LMDeploy 適用于需要高吞吐量和低時延的 LLM 部署場景。
- DeepSpeed-FastGen :DeepSpeed-FastGen 是一個集成 Microsoft DeepSpeed 技術(shù)的推理引擎,優(yōu)化內(nèi)存使用。它支持動態(tài) SplitFuse 技術(shù),提升吞吐量并降低時延。DeepSpeed-FastGen 適合大規(guī)模 LLM 部署,特別是對吞吐量要求極高的場景。
- LitGPT :LitGPT 是一個基于 nanoGPT、Lit-LLaMA 和 Lightning Fabric 構(gòu)建的推理引擎,支持快速原型開發(fā)。它采用 FlashAttention-2 和 KV 緩存優(yōu)化,提升推理速度。LitGPT 適合需要快速開發(fā)和部署 LLM 的研究和開發(fā)場景。
- Fireworks AI :Fireworks AI 是一個支持 LLM 和圖像模型的快速高效推理的推理引擎,采用多/組查詢注意力優(yōu)化、分片、量化和持續(xù)批處理技術(shù)。Fireworks AI 適合需要處理混合工作負(fù)載的場景,如同時處理文本和圖像任務(wù)。
- Together Inference :Together Inference 是一個支持多 GPU 和多節(jié)點(diǎn)部署的推理引擎,優(yōu)化硬件資源利用。它提供多種模型配置,支持不同服務(wù)需求。Together Inference 適合對成本敏感且需要高吞吐量的商業(yè)應(yīng)用場景。
多節(jié)點(diǎn)同構(gòu)設(shè)備推理引擎
- TensorRT-LLM :TensorRT-LLM 是 NVIDIA 提供的推理引擎,支持 NVIDIA GPUs。它采用 TensorRT 編譯和優(yōu)化庫,支持低精度操作。TensorRT-LLM 適用于需要在 NVIDIA GPU 上高效部署 LLM 的場景。
- DistServe :DistServe 是一個支持在多 GPU 集群中高效運(yùn)行 LLM 推理的推理引擎,采用粒度級分解推理請求策略,提升吞吐量和資源利用率。DistServe 適合在大規(guī)模 GPU 集群上部署 LLM 的場景。
- GroqCloud :GroqCloud 是基于 Groq LPU AI 加速器的推理引擎,提供低時延、高吞吐推理服務(wù)。它采用 TruePoint 技術(shù),支持 FP16 或 INT8 計(jì)算。GroqCloud 適用于對時延要求極高的場景,如金融交易和自動駕駛。
(三)代表性推理引擎對比
圖 A. 跨六個維度的LLM推理引擎代表性特征比較:模型通用性、部署與使用的便捷性、延遲與吞吐量優(yōu)化以及可擴(kuò)展性
表 A. 大型語言模型推理引擎的比較
表 B. 上述LLM推理引擎的硬件特性
如上圖表說明:表 A 提供了本文所考察的大型語言模型(LLM)推理引擎的總結(jié),圖 A 則提供了每個引擎特性的可視化展示。通用性是一個綜合指標(biāo),是根據(jù) 表 A 中支持的模型數(shù)量以及表B中硬件平臺的范圍推導(dǎo)出來的。得分越高,表明與多樣化模型和硬件的兼容性越廣泛。
部署便捷性 衡量通過Python包安裝器(pip)、Debian高級包工具(APT)、Homebrew 、源碼構(gòu)建定制、Docker 或Conda 環(huán)境或預(yù)構(gòu)建二進(jìn)制文件安裝引擎的難易程度。評分越高,表示安裝和部署越簡單、越快速。
易用性 評估文檔質(zhì)量和用戶社區(qū)活躍度(如表3所示)。
低延遲優(yōu)化和高吞吐量優(yōu)化分別衡量每個引擎對低延遲和高吞吐量特定優(yōu)化技術(shù)的支持程度。更高的數(shù)值意味著在這些領(lǐng)域具有更強(qiáng)的優(yōu)化能力。
最后,可擴(kuò)展性 衡量引擎在邊緣、服務(wù)器和多節(jié)點(diǎn)環(huán)境中適應(yīng)的有效性。更高的分?jǐn)?shù)表明更適合大規(guī)模LLM工作負(fù)載。
對于商業(yè)推理引擎,某些指標(biāo)得分可能較低,因?yàn)樗鼈円蕾囉诠_可用的信息。
通過參考圖A ,用戶可以確定哪種LLM推理引擎最適合他們的服務(wù)需求和部署環(huán)境。
下圖是 商用LLM推理引擎的推理性能比較
商用LLM推理引擎的推理性能比較
以下兩張表是商用 LLM 在成本方面的比較信息:
按模型定價的商用LLM引擎(每100萬Token的美元價格)
按硬件類型在商用LLm引擎中的定價(每臺設(shè)備每小時的價格)
推理引擎優(yōu)化技術(shù)全景圖:從批處理到注意力優(yōu)化的全方位加速
下面這張表對比了 LLM 推理引擎的各類優(yōu)化項(xiàng):
LLM 推理引擎的優(yōu)化
(一)批處理優(yōu)化:靈活調(diào)度與資源利用的極致追求
- 動態(tài)批處理 :動態(tài)批處理能夠?qū)崟r重組批處理,根據(jù)當(dāng)前的請求負(fù)載和硬件資源動態(tài)調(diào)整批大小。這種靈活性使得推理引擎能夠更高效地利用計(jì)算資源,減少等待時間,提高整體吞吐量。例如,當(dāng)系統(tǒng)檢測到多個短請求時,可以將它們合并為一個較大的批次進(jìn)行處理,從而減少 GPU 的空閑時間。
批次策略比較
- 連續(xù)批處理 :連續(xù)批處理允許新請求在不中斷當(dāng)前處理的情況下加入正在進(jìn)行的批次。這種機(jī)制進(jìn)一步優(yōu)化了 GPU 和內(nèi)存的利用率。通過在每個處理階段動態(tài)插入新請求,推理引擎可以保持持續(xù)的計(jì)算負(fù)載,減少資源浪費(fèi)。例如,Orca 推理引擎通過迭代級調(diào)度和選擇性批處理,實(shí)現(xiàn)了高效的連續(xù)批處理,顯著降低了平均響應(yīng)時間和等待時間。
批次策略比較
- Nano批處理 :Nano批處理將批處理任務(wù)細(xì)分為更小的Nano批次,每個Nano批次包含更少的請求。這種細(xì)粒度的批處理方式能夠更好地適應(yīng)不同類型的計(jì)算操作(如計(jì)算密集型、內(nèi)存密集型和網(wǎng)絡(luò)密集型),提升資源利用率和吞吐量。NanoFlow 推理引擎通過Nano批處理技術(shù),實(shí)現(xiàn)了在單設(shè)備上的高效并行操作,特別是在處理大規(guī)模請求時表現(xiàn)出色。
Nano-batching
- 分塊預(yù)填充 :分塊預(yù)填充將長提示分割為多個分塊,并逐步處理這些分塊。這種方法可以優(yōu)化預(yù)填充和解碼階段的資源利用,避免在處理長文本時出現(xiàn)資源瓶頸。例如,DeepSpeed-FastGen 的動態(tài) SplitFuse 技術(shù)通過分割提示來提前生成 token,從而提高了系統(tǒng)的響應(yīng)速度和效率。
Chunked-prefills
(二)并行計(jì)算:多硬件協(xié)同的推理加速
- 據(jù)并行 :數(shù)據(jù)并行通過在多個硬件設(shè)備上分配模型副本,將輸入數(shù)據(jù)分割后分配給每個設(shè)備進(jìn)行獨(dú)立推理。這種方法能夠顯著提升并行計(jì)算能力,尤其適用于大規(guī)模數(shù)據(jù)處理。然而,數(shù)據(jù)并行在處理超大模型時可能會面臨內(nèi)存限制,因?yàn)槊總€設(shè)備都需要存儲完整的模型副本。
- 完全共享數(shù)據(jù)并行 :完全共享數(shù)據(jù)并行在多 GPU 設(shè)備間共享模型參數(shù)、梯度和優(yōu)化器狀態(tài)。這種方法減少了內(nèi)存占用,使得更大規(guī)模的模型能夠在有限的硬件資源上運(yùn)行。例如,F(xiàn)SDP 技術(shù)通過在每個 GPU 上僅存儲模型參數(shù)的一部分,實(shí)現(xiàn)了高效的內(nèi)存利用和計(jì)算加速。
- 張量并行 :張量并行將特定的 LLM 操作(如矩陣乘法、注意力機(jī)制和全連接層)分布在多個硬件設(shè)備上并行執(zhí)行。每個設(shè)備處理操作的一部分,然后通過集體通信(如 All-Reduce 或 All-Gather)合并中間結(jié)果。這種方法能夠加速推理過程,同時減少每個設(shè)備的內(nèi)存占用。例如,vLLM 和 TensorRT-LLM 等推理引擎通過張量并行技術(shù),實(shí)現(xiàn)了高效的分布式推理。
- 流水線并行 :流水線并行將模型的不同層(或?qū)咏M)分配給不同的 GPU,形成流水線式操作。輸入數(shù)據(jù)被分割成微批次,依次通過流水線中的各個層。這種方法能夠減少內(nèi)存占用,并通過重疊操作提高推理效率。然而,流水線并行在處理短序列時可能會出現(xiàn)效率較低的情況,因?yàn)榱魉€的初始化階段會占用一定的時間。例如,PP 技術(shù)通過優(yōu)化流水線并行,減少了初始化階段的延遲,提高了整體推理效率。
并行策略比較
(三)模型壓縮:量化、剪枝與稀疏優(yōu)化的內(nèi)存與效率平衡
- 量化 :量化技術(shù)通過將模型參數(shù)表示為低精度整數(shù)(如 FP4 和 FP8),顯著減少內(nèi)存占用和帶寬需求。例如,SmoothQuant 技術(shù)通過對激活和權(quán)重分布進(jìn)行歸一化處理,減少了量化過程中的剪輯現(xiàn)象,實(shí)現(xiàn)了穩(wěn)定的量化效果,同時降低了延遲和內(nèi)存使用。此外,KV 緩存量化技術(shù)通過壓縮 KV 緩存,進(jìn)一步減少了長上下文場景下的內(nèi)存占用。
量化方法
- 剪枝 :剪枝技術(shù)通過移除模型中不重要的參數(shù),減小模型尺寸,提升推理效率。例如,cuSPARSE 和 Wanda 等工具提供了高效的剪枝方法,能夠在不顯著影響模型性能的前提下,減少模型的計(jì)算復(fù)雜度和內(nèi)存占用。
基于Transformer模型的剪枝
三種剪枝方式:結(jié)構(gòu)化剪枝、非結(jié)構(gòu)化剪枝和上下文相關(guān)剪枝
- 稀疏優(yōu)化 :稀疏優(yōu)化通過設(shè)計(jì)稀疏模型結(jié)構(gòu)或應(yīng)用預(yù)定義稀疏模式,提升計(jì)算效率。例如,結(jié)構(gòu)化稀疏(如 N:M 稀疏)和動態(tài)稀疏(如動態(tài) token 稀疏)等技術(shù),能夠在保持模型性能的同時,顯著減少計(jì)算量和內(nèi)存占用。此外,MoE(Mixture-of-Experts)和稀疏 MoE 等技術(shù)通過動態(tài)激活部分專家網(wǎng)絡(luò),進(jìn)一步提高了模型的計(jì)算效率。
稀疏優(yōu)化
稀疏解碼
(四)精調(diào)與緩存優(yōu)化:LoRA、QLoRA 與高效緩存策略的協(xié)同作用
- 精調(diào) :LoRA(Low-Rank Adaptation)和 QLoRA(Quantized LoRA)等方法通過在原始模型的基礎(chǔ)上引入低秩矩陣進(jìn)行微調(diào),能夠在不重新訓(xùn)練整個模型的情況下,快速適應(yīng)特定任務(wù)或領(lǐng)域。這些方法不僅提高了模型的適應(yīng)性,還顯著減少了微調(diào)時間和資源消耗。例如,Unsloth 推理引擎通過 LoRA 和 QLoRA 技術(shù),實(shí)現(xiàn)了快速高效的模型微調(diào),微調(diào)速度比傳統(tǒng)方法快 2.5 倍,推理延遲降低 35%。
LoRA
- 緩存 :緩存策略在提升推理效率中起著至關(guān)重要的作用。提示緩存(Prompt Caching)通過存儲常用提示的注意力狀態(tài),避免重復(fù)計(jì)算,顯著提高了推理速度。前綴緩存(Prefix Caching)則專注于緩存共享前綴部分的計(jì)算結(jié)果,優(yōu)化了批量推理的效率。KV 緩存(Key-Value Caching)通過存儲每個 token 步驟中生成的 K 和 V 矩陣,減少了解碼階段的重復(fù)計(jì)算,進(jìn)一步降低了推理延遲。例如,vLLM 推理引擎通過 KV 緩存優(yōu)化,實(shí)現(xiàn)了高效的解碼過程,吞吐量提升 3.8 倍,推理延遲降低 55%。
Prompt Caching
Prefix Caching
KV Caching
(五)注意力優(yōu)化與采樣優(yōu)化:FlashAttention 與 Speculative Decoding 的高效實(shí)現(xiàn)
- 注意力優(yōu)化 :PagedAttention、RadixAttention 等技術(shù)通過優(yōu)化 KV 緩存的管理,顯著提升了內(nèi)存效率和推理速度。例如,PagedAttention 通過將 KV 緩存分割為多個頁面,并根據(jù)需要動態(tài)分配內(nèi)存,減少了內(nèi)存碎片化和浪費(fèi)。RadixAttention 則通過高效的 KV 緩存管理,進(jìn)一步優(yōu)化了多模型推理的性能。此外,F(xiàn)lexAttention 提供了一種靈活的注意力編程模型,允許開發(fā)者通過簡單的 PyTorch 代碼實(shí)現(xiàn)多種注意力優(yōu)化,無需手動編寫硬件特定的內(nèi)核。
PagedAttention
TokenAttention
- 采樣優(yōu)化 :FlashAttention 及其變體通過優(yōu)化 GPU 推理速度和處理長序列的能力,顯著提升了推理效率。例如,F(xiàn)lashAttention-3 通過異步計(jì)算和低精度算術(shù),進(jìn)一步降低了推理延遲。此外,Speculative Decoding 技術(shù)通過預(yù)測多個候選 token 并提前驗(yàn)證,顯著加快了文本生成速度。例如,EAGLE、Medusa 和 ReDrafter 等方法通過不同的策略實(shí)現(xiàn)了高效的 Speculative Decoding,提高了推理速度和吞吐量。
FlashAttention
(六)輸出結(jié)構(gòu)化與約束解碼:提升生成質(zhì)量的關(guān)鍵策略
在 LLM 的推理過程中,輸出的結(jié)構(gòu)化和約束解碼技術(shù)對于提升生成內(nèi)容的質(zhì)量和準(zhǔn)確性至關(guān)重要。傳統(tǒng)的無結(jié)構(gòu)輸出(Unstructured Outputs)往往缺乏明確的格式和邏輯,難以直接應(yīng)用于特定任務(wù)。而結(jié)構(gòu)化輸出(Structured Outputs)則通過引入預(yù)定義的格式或模式,使得生成結(jié)果更具可讀性和可用性。例如,在問答系統(tǒng)中,結(jié)構(gòu)化輸出可以確保答案以清晰的邏輯和格式呈現(xiàn),提高用戶體驗(yàn)。
非結(jié)構(gòu)化輸出和結(jié)構(gòu)化輸出
此外,約束解碼(Constrained Decoding)技術(shù)在解碼階段對生成過程進(jìn)行約束,確保輸出內(nèi)容符合特定的要求或規(guī)則。這種技術(shù)通過限制生成的 token 范圍或引入特定的約束條件,使得模型能夠生成更準(zhǔn)確和符合預(yù)期的結(jié)果。例如,在機(jī)器翻譯任務(wù)中,約束解碼可以確保生成的譯文符合目標(biāo)語言的語法和語義規(guī)則,提高翻譯質(zhì)量。
在解碼階段應(yīng)用約束解碼
通過結(jié)合輸出結(jié)構(gòu)化和約束解碼技術(shù),推理引擎能夠在生成任務(wù)中實(shí)現(xiàn)更高的準(zhǔn)確性和可靠性。這些技術(shù)不僅提升了模型的實(shí)用性,還拓寬了其在各種應(yīng)用場景中的潛力,如智能客服、內(nèi)容生成和代碼輔助等。
推理引擎的未來研究方向與挑戰(zhàn):多模態(tài)、新型架構(gòu)與硬件適配的前沿探索
(一)多模態(tài) LLM 推理引擎:跨模態(tài)融合的技術(shù)挑戰(zhàn)與解決方案
- 技術(shù)挑戰(zhàn) :多模態(tài) LLM 推理引擎需要處理多種數(shù)據(jù)類型(如圖像、文本、語音等),面臨著跨模態(tài)語義鴻溝、數(shù)據(jù)格式統(tǒng)一等技術(shù)難點(diǎn)。例如,如何將圖像特征與文本特征有效地融合,以實(shí)現(xiàn)對復(fù)雜場景的理解和生成,是一個亟待解決的問題。
- 解決方案 :當(dāng)前的研究方向包括多模態(tài)預(yù)訓(xùn)練模型和跨模態(tài)注意力機(jī)制。多模態(tài)預(yù)訓(xùn)練模型通過在大規(guī)模多模態(tài)數(shù)據(jù)上進(jìn)行聯(lián)合訓(xùn)練,學(xué)習(xí)不同模態(tài)之間的語義關(guān)聯(lián)??缒B(tài)注意力機(jī)制則允許模型在生成過程中動態(tài)關(guān)注不同模態(tài)的信息,從而實(shí)現(xiàn)更準(zhǔn)確的推理和生成。例如,Qwen2-VL 和 LLaVA-1.5 等多模態(tài)模型通過引入多模態(tài)旋轉(zhuǎn)位置嵌入(M-RoPE),顯著提高了對多模態(tài)輸入的處理能力。
(二)新型架構(gòu)支持:RetNet、Mamba 與架構(gòu)創(chuàng)新的性能突破
- RetNet 架構(gòu) :RetNet 是一種新型的長序列處理架構(gòu),通過線性時間復(fù)雜度的 Selective State Space Model(SSM),顯著提高了處理長序列的效率。RetNet 通過選擇性地更新狀態(tài)空間,避免了傳統(tǒng) Transformer 架構(gòu)中計(jì)算復(fù)雜度隨序列長度二次增長的問題。
- Mamba 架構(gòu) :Mamba 是一種結(jié)合了 Transformer 和 SSM 的混合架構(gòu),旨在充分發(fā)揮兩者的優(yōu)點(diǎn)。Mamba 通過引入 MoE 策略,進(jìn)一步提高了模型的容量和推理效率。例如,Jamba 架構(gòu)通過結(jié)合 Mamba 和 Transformer,實(shí)現(xiàn)了在長序列處理中的高效推理。
(三)硬件感知融合與混合精度優(yōu)化:GPU、TPU 與新興硬件的適配策略
- GPU 優(yōu)化策略 :FlashAttention-3 在 NVIDIA H100 GPU 上的實(shí)現(xiàn)細(xì)節(jié)包括異步計(jì)算和低精度算術(shù)的應(yīng)用。通過將數(shù)據(jù)傳輸和計(jì)算操作分離到不同的 GPU warp 中,并采用生產(chǎn)者-消費(fèi)者模型,F(xiàn)lashAttention-3 有效地重疊了 softmax 操作與 WGMMA,顯著降低了推理延遲。
- 新興硬件架構(gòu) :Cerebras WSE-2 等新興硬件通過大規(guī)模并行計(jì)算能力,為 LLM 推理提供了新的可能性。這些硬件架構(gòu)通過優(yōu)化內(nèi)存訪問和計(jì)算效率,顯著提高了推理速度和吞吐量。
- 性能對比 :在不同硬件平臺上,推理引擎的性能表現(xiàn)存在顯著差異。例如,在 NVIDIA GPU 上,F(xiàn)lashAttention-3 的推理速度比傳統(tǒng)方法快 3.7 倍;而在 Cerebras WSE-2 上,推理速度進(jìn)一步提升,吞吐量增加了 5.1 倍。因此,選擇合適的硬件平臺對于推理引擎的性能至關(guān)重要。
(四)長上下文窗口與內(nèi)存管理:新型緩存技術(shù)的前沿探索
- 現(xiàn)有技術(shù)局限性 :現(xiàn)有的內(nèi)存管理技術(shù)(如分層緩存管理)在處理超長上下文窗口時面臨著內(nèi)存占用大、緩存命中率低等問題。例如,當(dāng)處理包含數(shù)十萬甚至數(shù)百萬 token 的長文本時,KV 緩存的大小可能會超過 GPU 內(nèi)存的容量,導(dǎo)致頻繁的內(nèi)存交換和性能下降。
- 前沿研究 :新型內(nèi)存管理策略包括基于深度學(xué)習(xí)的動態(tài)緩存預(yù)測技術(shù)。這些技術(shù)通過預(yù)測未來的緩存需求,提前將數(shù)據(jù)加載到內(nèi)存中,從而減少緩存缺失的次數(shù)。此外,研究人員還在探索基于壓縮和編碼的緩存管理方法,以進(jìn)一步減少內(nèi)存占用。
(五)復(fù)雜邏輯推理:多步推理與會話連續(xù)性的技術(shù)發(fā)展
- 技術(shù)發(fā)展趨勢 :LLM 在復(fù)雜邏輯推理任務(wù)中的發(fā)展趨勢包括多步推理、自我驗(yàn)證和多輪對話等。這些技術(shù)使得模型能夠逐步解決問題,并在每一步中驗(yàn)證推理的正確性,從而提高推理的準(zhǔn)確性和可靠性。例如,某些推理引擎通過引入多步推理機(jī)制,能夠處理復(fù)雜的邏輯問題,如數(shù)學(xué)題解、邏輯謎題等,顯著提升了模型在這些任務(wù)上的表現(xiàn)。
- 會話連續(xù)性管理 :在多輪對話場景中,推理引擎需要有效地管理會話連續(xù)性和上下文保持。這不僅要求模型能夠記住之前的對話內(nèi)容,還要能夠動態(tài)調(diào)整推理策略以適應(yīng)新的輸入。有的推理引擎通過引入上下文窗口和動態(tài)緩存機(jī)制,能夠更好地處理多輪對話中的上下文信息,從而提高對話的連貫性和準(zhǔn)確性。
(六)推理引擎選擇策略:基于服務(wù)需求的選型指南
- 實(shí)時互動服務(wù) :對于需要實(shí)時互動的服務(wù),如智能客服、聊天機(jī)器人等,低時延優(yōu)化是關(guān)鍵。推理引擎需要能夠快速響應(yīng)用戶的輸入,提供即時的反饋。例如,Sarathi-Serve 推理引擎通過塊狀預(yù)填充和無停頓調(diào)度,顯著降低了時延,適合實(shí)時對話系統(tǒng)。
- 高流量服務(wù) :對于處理高流量請求的服務(wù),如搜索引擎、內(nèi)容推薦系統(tǒng)等,高吞吐量設(shè)計(jì)至關(guān)重要。推理引擎需要能夠高效地處理大量并發(fā)請求,同時保持穩(wěn)定的性能。例如,DistServe 推理引擎通過粒度級分解推理請求策略,顯著提升了吞吐量和資源利用率,適合大規(guī)模 GPU 集群部署。
- 選型指南 :選擇推理引擎時,需要綜合考慮服務(wù)類型、硬件配置和性能指標(biāo)。對于實(shí)時互動服務(wù),優(yōu)先選擇低時延優(yōu)化的推理引擎;對于高流量服務(wù),優(yōu)先選擇高吞吐量設(shè)計(jì)的推理引擎。此外,還需要考慮硬件兼容性、模型支持范圍、易用性和成本等因素。
(七)安全性支持:對抗性訓(xùn)練與數(shù)據(jù)過濾的防護(hù)策略
- 安全風(fēng)險分析 :LLM 推理中存在多種安全風(fēng)險,如提示注入攻擊、越獄攻擊和數(shù)據(jù)泄露等。這些攻擊可能導(dǎo)致模型生成有害內(nèi)容或泄露用戶隱私。例如,提示注入攻擊通過操縱輸入提示,使模型生成與原始目標(biāo)不符的內(nèi)容。
- 防護(hù)措施 :為了應(yīng)對這些安全風(fēng)險,研究人員提出了多種防護(hù)措施,如對抗性訓(xùn)練、數(shù)據(jù)過濾和輸入檢查等。對抗性訓(xùn)練通過在訓(xùn)練過程中引入對抗性樣本,提高模型的魯棒性。數(shù)據(jù)過濾和輸入檢查則通過檢測和阻止有害輸入,防止模型生成不當(dāng)內(nèi)容。例如,OpenAI Moderation 提供了一種有效的輸入檢查機(jī)制,能夠檢測并阻止有害輸入,提高模型的安全性。
(八)端上推理:模型壓縮與硬件特定優(yōu)化的結(jié)合
- 模型壓縮技術(shù) :端上推理需要對模型進(jìn)行壓縮,以適應(yīng)移動設(shè)備和物聯(lián)網(wǎng)設(shè)備的有限資源。量化、剪枝和知識蒸餾是常見的模型壓縮技術(shù)。例如,SmoothQuant 通過對激活和權(quán)重分布進(jìn)行歸一化處理,實(shí)現(xiàn)了穩(wěn)定的量化效果,顯著降低了模型的內(nèi)存占用和推理延遲。
- 硬件特定優(yōu)化 :針對移動設(shè)備和物聯(lián)網(wǎng)設(shè)備的硬件特定優(yōu)化策略包括優(yōu)化內(nèi)存管理、減少計(jì)算量和提高能效。例如,某些推理引擎通過引入高效的緩存管理和內(nèi)存分配策略,顯著提高了端上推理的效率。此外,針對特定硬件平臺的優(yōu)化,如 ARM 架構(gòu)的優(yōu)化,也能夠進(jìn)一步提升推理性能。
感想
通過撰寫本文,我又一次加深了對推理引擎的認(rèn)知,并且對一些本模糊的概念,更是有了清晰的認(rèn)識。通過本文,相信大家也能看到自己耳熟能詳?shù)耐评硪妫热?Ollama,llama.cpp,vLLM,SGL,LMDeploy,TensorRT 等等。通過了解 LLM 推理引擎的優(yōu)化方法和硬件適應(yīng)策略,大家應(yīng)該可以感受到人工智能技術(shù)的飛速發(fā)展。從解碼器架構(gòu)到注意力機(jī)制,從批處理優(yōu)化到并行計(jì)算,每一個技術(shù)細(xì)節(jié)都蘊(yùn)含著巨大的潛力和創(chuàng)新,也凝結(jié)著人類的工程只會。LLM 推理引擎不僅改變了我們處理語言的方式,還為未來的智能應(yīng)用提供了無限可能。
想想我剛接觸人工智能領(lǐng)域,初次接觸開源模型,初次用開源推理引擎 Serve 一個模型,并向模型問候“你好,你是誰”,自己推理的模型第一次蹦出回復(fù)文本的一瞬,那種興奮感,至今歷歷在目。而在這一波以transformer 模型為代表的人工智能浪潮中,推理引擎的迭代、性能的優(yōu)化,歷經(jīng)兩年也已經(jīng)有了質(zhì)變,僅僅從推理的吞吐量級來看,就早已翻了兩翻以上。這是最波瀾壯闊的人類躍遷的時代,很慶幸我身處其中。LLM 推理引擎的優(yōu)化是一個復(fù)雜且富有挑戰(zhàn)性的領(lǐng)域。通過不斷探索和創(chuàng)新,我們可以期待未來在人工智能領(lǐng)域取得更多突破。