加速與最佳化是 LLM 投入生產環境的工程核心。當模型參數達到數十億甚至數千億時,我們必須透過技術手段來解決高記憶體需求、高延遲和高成本這三大挑戰。量化是將 LLM 投入實戰的首選技術,它在不顯著犧牲準確性的情況下,極大地壓縮了模型體積和運算負擔。
量化是將模型中使用的浮點數 (Float32/Float16) 轉換成低精度整數(如 Int8、Int4)的過程。
精度類型 | 位元 | 佔用空間 (相較於 FP32) | 應用情境 |
---|---|---|---|
FP32 | 32-bit | 100 | 訓練、原始模型 |
FP16/BF16 | 16-bit | 50 | 一般 GPU 加速 |
INT8 | 8-bit | 25 | 常用量化格式 |
INT4 | 4-bit | 12.5 | 超輕量部署、邊緣裝置 |
import torch
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("facebook/opt-1.3b")
# 進行動態量化,將線性層 (Linear) 轉換為 8 位元整數 (qint8)
quantized_model = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear}, dtype=torch.qint8
)
print("量化後模型大小:", sum(p.numel() for p in quantized_model.parameters()))
除了壓縮模型本身,專門的軟體工具和推理引擎能透過優化計算流程、記憶體管理和並行計算來加速推論。
ONNX 是一種跨框架模型格式,解決了模型部署的可移植性問題。
import torch
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-chinese")
# 創建一個 dummy 輸入張量
dummy_input = torch.randn(1, 10, 768)
# 導出為 ONNX 格式
torch.onnx.export(model, dummy_input, "bert.onnx", opset_version=12)
print("模型已轉換為 ONNX 格式!")
vLLM 是專門為 LLM 服務設計的高性能推論引擎,能顯著提升高流量場景下的效率。
pip install vllm
)from vllm import LLM, SamplingParams
# 載入模型,vLLM 支援直接載入 Hugging Face 模型
llm = LLM(model="meta-llama/Llama-2-7b-chat-hf")
params = SamplingParams(temperature=0.7, top_p=0.9)
output = llm.generate("請用一句話說明量化的好處", sampling_params=params)
print(output[0].outputs[0].text)
LLM 的加速與最佳化通常是組合拳:
技術 | 核心目標 | 達成機制 | 最終效益 |
---|---|---|---|
量化 | 減少資源消耗 | 降低數值精度(FP -> INT) | 降低硬體成本、模型體積。 |
ONNX | 提高可移植性 | 轉換為通用模型格式 | 跨平台部署、基礎加速。 |
vLLM | 提高服務吞吐量 | PagedAttention 記憶體管理 | 高流量應用中,低延遲、高效率。 |
一句話總結:「量化讓模型變小、ONNX讓模型能跑、vLLM讓模型跑得快。」