跳轉到主要內容
部落格

PyTorch 2.8+TorchAO:在 Intel® AI PC 上釋放高效 LLM 推理

作者: 2025 年 9 月 3 日暫無評論

大型語言模型 (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 驅動程式門戶  

注意事項和免責宣告

效能因使用情況、配置和其他因素而異。效能結果基於截至所示日期的配置測試,可能無法反映所有公開可用的更新。任何產品或元件都無法做到絕對安全。您的成本和結果可能會有所不同。英特爾技術可能需要啟用硬體、軟體或服務啟用。英特爾公司。英特爾、英特爾徽標和其他英特爾標誌是英特爾公司或其子公司的商標。其他名稱和品牌可能被聲稱為他人的財產。