跳转到主要内容
博客

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 驱动程序门户  

注意事项和免责声明

性能因使用情况、配置和其他因素而异。性能结果基于截至所示日期的配置测试,可能无法反映所有公开可用的更新。任何产品或组件都无法做到绝对安全。您的成本和结果可能会有所不同。英特尔技术可能需要启用硬件、软件或服务激活。英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能被声称为他人的财产。