大型語言模型 (LLM) 已改變了眾多行業中的任務,包括起草電子郵件、生成程式碼和總結會議。近幾個月來,我們與 PyTorch 社群緊密合作,為 PyTorch 中標記為“xpu”的英特爾® GPU 最佳化 LLM 工作負載。本文將說明如何利用這些進步來加速本地 LLM 推理。值得注意的是,英特爾® GPU,包括英特爾® Arc™ 獨立顯示卡和內建顯示卡,以及英特爾® Arc™ Pro,均支援 PyTorch,使開發者能夠在廣泛可用的筆記型電腦和桌上型電腦上本地執行 PyTorch 和 LLM,讓先進的 AI 功能比以往任何時候都更容易觸及。
背景
在客戶端裝置上執行 LLM 面臨兩個核心挑戰:
– 記憶體限制: 7B+ 模型超過典型的 GPU 視訊記憶體。
– GEMM 和 SPDA 核心效率: 核心效率需要在計算密集型和記憶體密集型場景中進行最佳化。
PyTorch 2.8 透過以下方式解決了英特爾® GPU 上的這些問題:
– oneDNN 後端: 最佳化英特爾® GPU 的 GEMM/SDPA 操作。
– TorchAO: 透過英特爾® GPU 上的張量子類化實現 INT4 量化。
– Windows 原生 torch.compile: 英特爾® GPU 上記憶體密集型操作的圖融合。
英特爾® GPU 的 LLM 推理最佳化
Scaled Dot Product Attention 最佳化:在英特爾 GPU 上釋放競爭性效能
The torch.nn.functional.scaled_dot_product_attention (SDPA)實現了里程碑式論文“Attention Is All You Need”中的核心注意力機制。雖然存在樸素的 PyTorch 實現,但其融合後端帶來了變革性的效能提升。自 PyTorch 2.7 以來,我們已將oneDNN 整合作為預設的 XPU 後端——為以下兩種情況優化了 SDPA:
✅ 長序列(預填充階段)
✅ 短序列(解碼階段)
主要進展
- PyTorch 2.8+: 添加了分組查詢注意力 (GQA) 支援以及多頭注意力 (MHA)。
- Hugging Face 整合: 作為主要注意力後端在 Transformers 中提供原生支援。
- KV 快取相容性: 與動態和靜態快取策略無縫協作。
# Automatic integration with Hugging Face Transformers
英特爾 GPU 現已透過 Hugging Face 自動整合,為 Transformers 模型提供開箱即用的硬體加速。
import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "microsoft/Phi-3-mini-4k-instruct" model = AutoModelForCausalLM.from_pretrained(model_id, device_map="xpu", torch_dtype=torch.float16)
torch.compile:英特爾® GPU 的圖融合
torch.compile 將 eager 模式執行轉換為最佳化的圖模式,利用TorchDynamo進行 Python 跟蹤,並利用TorchInductor生成 Triton 核心。
對於英特爾® GPU,這可以實現:
✅ 跨平臺加速
– 自 PyTorch 2.5 起支援 Linux
– 首個與 Windows 相容的 torch.compile 加速器(PyTorch 2.7+)。請參閱“How to use torch.compile on Windows CPU/XPU”。
– 透過融合 ROPE/RMSNorm 核心加速解碼。
– 透過圖最佳化加速預填充。
根據我們的基準測試,torch.compile 將解碼速度提升了 1.39 倍以上,將預填充(第一個 token 生成)速度提升了 1.1 倍以上。
| 模型 | 預填充加速 (第一個 Token) | 解碼加速 (下一個 Token) |
| meta-llama/Llama-3.2-3B | 2.42× | 1.58× |
| microsoft/Phi-3-mini-4k-instruct | 1.12× | 1.39× |
| Qwen/Qwen3-4B | 2.68× | 1.99× |
在英特爾® 酷睿™ i5-13400(Arc B580,12GB 視訊記憶體)上進行測試,更多資訊請參閱產品和效能資訊會話。
WOQ-INT4:提升英特爾® GPU 上的 LLM 效率
僅權重量化 (WOQ) 是一種將模型權重壓縮為 4 位整數 (INT4),同時保持啟用為 16 位精度 (FP16/BF16) 的技術。圖 1詳細展示了此過程如何在 Transformer 模型中應用。它透過解決記憶體頻寬瓶頸來平衡效率和準確性,從而減少記憶體佔用並加速整體效能。
對於英特爾® GPU 使用者而言,解決此瓶頸直接轉化為顯著的實際優勢:模型變得更小、更快、更節能。這使得大型模型能夠在消費級硬體上執行,並帶來顯著改善的使用者體驗。
我們針對流行模型的基準測試具體證明了這些改進:
| 模型 | 記憶體減少 | 解碼加速 |
| meta-llama/Llama-3.2-3B | 5.98GB→2.10GB | 1.62× |
| microsoft/Phi-3-mini-4k-instruct | 7.11GB→2.13GB | 2.14× |
| Qwen/Qwen3-4B | 7.49GB→ 2.49GB | 1.56× |
在英特爾® 酷睿™ i5-13400(Arc B580,12GB 視訊記憶體)上進行測試,更多資訊請參閱產品和效能資訊會話。
資料證實,WOQ 始終可實現超過 65% 的記憶體節省和超過 1.5 倍的解碼速度提升,突顯了其在增強 LLM 可訪問性和效能方面的重要作用。
在 PyTorch 2.8 中透過 TorchAO 的張量子類抽象啟用,這個 PyTorch 原生最佳化框架使用 oneDNN 實現 A16W4 GEMM,用與後端無關的 INT4 表示替換 Linear 層權重,如 Phi-3-mini-4k-instruct 實現所示,其中只有解碼器 Linear 層被量化。
WOQ-INT4 與 Hugging Face Transformers 無縫整合,支援 AWQ、RTN 和 GPTQ 演算法,同時透過訓練後量化工作流提供接近 FP16 的推理體驗。

圖 1:應用於 Phi-3-mini 中 Linear 層的 WOQ-INT4
分步操作:在英特爾® GPU 上執行 LLM 推理
安裝
安裝英特爾 GPU 驅動程式
要啟用英特爾® GPU 加速,首先安裝最新的顯示卡驅動程式:Windows 使用者應從 英特爾 Arc & Iris Xe 顯示卡驅動程式頁面下載驅動程式,並按照螢幕上的安裝說明進行操作。Ubuntu 使用者應參閱 英特爾 GPU 驅動程式安裝指南,瞭解作業系統特定的設定步驟。
安裝 PyTorch 和其他所需軟體包
要安裝 PyTorch 及其依賴項,請使用以下命令
# Install PyTorch + dependencies pip install torch torchao --index-url https://download.pytorch.org/whl/xpu pip install transformers accelerate
在 Windows 上啟用 torch.compile
請參閱 如何在 Windows CPU/XPU 上使用 torch.compile,以在 Windows 上安裝 MSVC 並激活環境。Linux 使用者可以跳過此步驟。
執行 FP16 推理 (Eager Mode)
import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "microsoft/Phi-3-mini-4k-instruct" model = AutoModelForCausalLM.from_pretrained(model_id, device_map="xpu", torch_dtype=torch.float16) tokenizer = AutoTokenizer.from_pretrained(model_id) prompt = "Hey, are you conscious? Can you talk to me?" inputs = tokenizer( prompt, return_tensors="pt", ).to("xpu") generate_kwargs = dict(do_sample=True, temperature=0.9, num_beams=1, cache_implementation="static") generated_ids = model.generate(**inputs, max_new_tokens=128, **generate_kwargs) output_text = tokenizer.batch_decode( generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False ) print(output_text)
上述示例演示了透過簡單地將裝置設定為 XPU,在 PyTorch eager 模式下執行 LLM 推理。
使用 torch.compile 加速
import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "microsoft/Phi-3-mini-4k-instruct" model = AutoModelForCausalLM.from_pretrained(model_id, device_map="xpu", torch_dtype=torch.float16) model.forward = torch.compile(model.forward) tokenizer = AutoTokenizer.from_pretrained(model_id) prompt = "Hey, are you conscious? Can you talk to me?" inputs = tokenizer( prompt, return_tensors="pt", ).to("xpu") generate_kwargs = dict(do_sample=True, temperature=0.9, num_beams=1, cache_implementation="static") generated_ids = model.generate(**inputs, max_new_tokens=128, **generate_kwargs) output_text = tokenizer.batch_decode( generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False ) print(output_text)
使用 WOQ-INT4 加速推理
import torch from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig from torchao.quantization.quant_api import Int4WeightOnlyConfig from torchao.dtypes import Int4XPULayout from torchao.quantization.quant_primitives import ZeroPointDomain model_id = "microsoft/Phi-3-mini-4k-instruct" # Create quantization configuration quantization_config = TorchAoConfig("int4_weight_only", group_size=128, layout=Int4XPULayout(), zero_point_domain=ZeroPointDomain.INT) # Load and automatically quantize model = AutoModelForCausalLM.from_pretrained(model_id, device_map="xpu", torch_dtype=torch.float16, quantization_config=quantization_config) # Use unwrap_tensor_subclass_parameters to reduce the subclass host overhead from torch._functorch._aot_autograd.subclass_parametrization import ( unwrap_tensor_subclass_parameters, ) unwrap_tensor_subclass_parameters(model) model.forward = torch.compile(model.forward) tokenizer = AutoTokenizer.from_pretrained(model_id) prompt = "Hey, are you conscious? Can you talk to me?" inputs = tokenizer( prompt, return_tensors="pt", ).to("xpu") generate_kwargs = dict(do_sample=True, temperature=0.9, num_beams=1, cache_implementation="static") model.generate(**inputs, max_new_tokens=128, **generate_kwargs) generated_ids = model.generate(**inputs, max_new_tokens=128, **generate_kwargs) output_text = tokenizer.batch_decode( generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False ) print(output_text)
為了進一步降低 token 生成延遲,僅權重 4 位量化 (WOQ-INT4) 在準確性和效能之間進行了戰略性平衡。對於 Phi-3-mini 模型,WOQ-INT4 實現了超過 65% 模型壓縮,同時提供了:
1) 在記憶體密集型階段實現更快的解碼,從而降低 token 延遲;
2) 在計算密集型階段預填充效率與 FP16 匹配;
3) 對更大模型的可擴充套件性,使得之前在單個消費級 GPU 上無法以 FP16 精度執行的大型語言模型現在可以在單個英特爾® Arc™ B 系列 GPU 上流暢執行。這為消費級硬體帶來了複雜 LLM 的實用、即時效能。
結論
PyTorch 2.8+TorchAO 實現了:
✅ 降低消費級 GPU 上的下一個 token 延遲
✅ 支援 單個英特爾® Arc GPU 上 10B+ 引數模型
✅ 透過 torch.compile 實現 Windows 原生加速
主要成就:
– 透過 WOQ-INT4 將視訊記憶體使用量減少 65% 以上
– 解碼速度比 FP16 快 1.5 倍以上
– 與 Hugging Face 無縫整合
致謝
特別感謝 PyTorch 維護者:Jerry Zhang、Nikita Shulga、Jason Ansel、Andrey Talman、Alban Desmaison 和 Bin Bao。
產品和效能資訊
測試硬體:
– 英特爾® 酷睿™ Ultra 9 288V (Arc 140V, 16GB VRAM)
– 英特爾® 酷睿™ i5-13400 (Arc B580, 12GB VRAM)
軟體: Windows 11 專業版, 英特爾® 顯示卡驅動程式 32.0.101.6972, PyTorch 2.8
工作負載: 在“microsoft/Phi-3-mini-4k-instruct”上測試效能,配置為 float16 與 torch.compile 最佳化與 + torch.compile 最佳化 + torchAO WOQ 最佳化。
英特爾於 2025 年 7 月 29 日測試。
瞭解更多:
– Windows 上 Torch.compile 教程
– TorchAO 量化指南
– Windows 上英特爾® GPU 驅動程式門戶
注意事項和免責宣告
效能因使用情況、配置和其他因素而異。效能結果基於截至所示日期的配置測試,可能無法反映所有公開可用的更新。任何產品或元件都無法做到絕對安全。您的成本和結果可能會有所不同。英特爾技術可能需要啟用硬體、軟體或服務啟用。英特爾公司。英特爾、英特爾徽標和其他英特爾標誌是英特爾公司或其子公司的商標。其他名稱和品牌可能被聲稱為他人的財產。