iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
佛心分享-IT 人自學之術

LLM入門學習系列 第 21

Day 21:LLM 加速與最佳化 — 讓模型跑得又快又省

  • 分享至 

  • xImage
  •  

1. 量化 (Quantization):模型的記憶體壓縮術

加速與最佳化是 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 超輕量部署、邊緣裝置

量化帶來的效益

  • 大幅節省 VRAM:模型體積可縮小 50% 到 75%,使得中階 GPU 甚至 CPU 也能運行大型模型,顯著降低硬體成本
  • 運算速度提升:較小的數值精度可以在硬體上更快地執行計算,提高推論速度。

PyTorch 量化範例

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()))

2. 推論加速工具 (Inference Acceleration Tools)

除了壓縮模型本身,專門的軟體工具和推理引擎能透過優化計算流程、記憶體管理和並行計算來加速推論。

🔹 (1) ONNX (Open Neural Network Exchange)

ONNX 是一種跨框架模型格式,解決了模型部署的可移植性問題。

  • 核心作用:將 PyTorch/TensorFlow 等框架訓練的模型,轉換成一種通用的格式,以便在不同的硬體和推理引擎上(如 NVIDIA TensorRT、Intel OpenVINO)高效運行。
  • 優勢模型可移植性高跨平台支援強,是企業部署和邊緣運算的理想選擇。

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 格式!")

🔹 (2) vLLM — LLM 高效推論引擎

vLLM 是專門為 LLM 服務設計的高性能推論引擎,能顯著提升高流量場景下的效率。

  • 核心技術:PagedAttention
    • 問題:LLM 推論時,每個 Token 的 Key/Value 緩存(KV Cache)佔用大量 VRAM。
    • 解決:PagedAttention 借鑒作業系統的分頁機制,實現了 KV Cache 的高效且非連續記憶體分配,極大提高了 GPU 的吞吐量
  • 優勢:在多用戶同時請求(Batching)時,vLLM 的推理速度和效率約為傳統推理引擎的 2~4 倍

vLLM 使用範例 (需先安裝 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)

3. 總結

LLM 的加速與最佳化通常是組合拳

技術 核心目標 達成機制 最終效益
量化 減少資源消耗 降低數值精度(FP -> INT) 降低硬體成本、模型體積。
ONNX 提高可移植性 轉換為通用模型格式 跨平台部署、基礎加速。
vLLM 提高服務吞吐量 PagedAttention 記憶體管理 高流量應用中,低延遲、高效率。

一句話總結:「量化讓模型變小、ONNX讓模型能跑、vLLM讓模型跑得快。」


上一篇
Day 20:LLM 安全性與倫理問題 — 負責任的 AI 應用
系列文
LLM入門學習21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言