PyTorch 在 Intel GPU(XPU)上快速上手:安装、迁移与推理训练实战指南

PyTorch 在 Intel GPU(XPU)上快速上手:安装、迁移与推理训练实战指南 PyTorch 在 Intel GPUXPU上快速上手安装、迁移与推理训练实战指南【免费下载链接】pytorchTensors and Dynamic neural networks in Python with strong GPU acceleration项目地址: https://gitcode.com/GitHub_Trending/py/pytorch本指南以 PyTorch 官方文档 docs/source/notes/get_start_xpu.md 为核心主体系统讲解如何在 Intel Data Center GPU 与 Intel 客户端 GPU 上启用 PyTorch 的 XPU 后端从硬件/软件前置条件、二进制与源码安装到cuda→xpu的最小代码迁移、可用性检查以及覆盖 FP32、AMP、torch.compile三种模式的完整推理与训练示例。读完本文你将能够独立完成 Intel GPU 环境的搭建并把现有 CUDA 代码以最小改动迁移到 Intel GPU 上运行。硬件前置要求Intel Data Center GPUPyTorch 的 XPU 后端首先面向 Intel 数据中心 GPU 验证官方文档给出的设备与操作系统组合如下设备Red Hat* Enterprise Linux* 9.2SUSE Linux Enterprise Server* 15 SP5Ubuntu* Server 22.04 5.15 LTS 内核Intel® Data Center GPU Max Series代号Ponte Vecchio支持支持支持Intel Client GPU在客户端 GPU 一侧支持的 OS 与已验证硬件覆盖了 Intel 近几代 Arc 独立显卡与核显支持的 OS已验证硬件Windows 11 Ubuntu 24.04/26.04 WSL2 Ubuntu 24.04/26.04Intel® Arc™ A-Series Graphics代号AlchemistIntel® Arc™ B-Series Graphics代号Battlemage搭载 Intel® Arc™ Graphics 的 Intel® Core™ Ultra 处理器代号Meteor Lake-H搭载 Intel® Arc™ Graphics 的 Intel® Core™ Ultra第 2 代处理器代号Arrow Lake-H搭载 Intel® Arc™ Graphics 的 Intel® Core™ Ultra 移动处理器第 2 代代号Lunar LakeWindows 11 Ubuntu 26.04 WSL2 Ubuntu 24.04/26.04搭载 Intel® Arc™ Graphics 的 Intel® Core™ Ultra 移动处理器第 3 代代号Panther LakeIntel GPU 支持Prototype 原型阶段自 PyTorch* 2.5 起就绪覆盖上述 Intel 客户端 GPU 与 Intel Data Center GPU Max Series在 Linux 和 Windows 上均可用。它把 Intel GPU 与 SYCL* 软件栈引入官方 PyTorch 技术栈提供与 CUDA 一致的使用体验。软件前置要求要在 Intel GPU 上使用 PyTorch需要先安装 Intel GPU 驱动。官方安装指南Intel GPUs Driver Installation会给出针对各操作系统与设备型号的驱动安装步骤请在安装 PyTorch 前完成驱动验证。需要注意的安装分支通过预编译二进制wheel安装时可以跳过 Intel® Deep Learning EssentialsDL Essentials的安装从源码构建时则需要同时安装 Intel GPU Driver 与 Intel® Deep Learning Essentials具体参见 PyTorch Installation Prerequisites for Intel GPUs。安装通过二进制 wheel 安装安装完 Intel GPU 驱动后即可安装torch、torchvision、torchaudio三个包。PyTorch 为 Intel GPUXPU提供了独立的 wheel 索引。Stable 稳定版安装最新的稳定版 XPU wheelpip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/xpuNightly 每日构建版安装最新预览/每日构建 wheelpip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/xpu历史版本安装带 Intel GPUXPU支持的旧版本时前往 previous versions 页面找到对应版本号同样使用xpu索引pip3 install torchTORCH_VERSION torchvisionTORCHVISION_VERSION torchaudioTORCHAUDIO_VERSION --index-url https://download.pytorch.org/whl/xpu其中TORCH_VERSION、TORCHVISION_VERSION、TORCHAUDIO_VERSION需替换为彼此匹配的具体版本号例如2.5.0且三者需保持一致或按官方版本对应关系选择。从源码构建在安装好 Intel GPU Driver 与 Intel® Deep Learning Essentials 后可以按各自项目的官方源码构建指南编译torch参考 PyTorch 仓库 README 中的 From source 一节构建时需启用 XPU 支持相关的构建选项当前仓库根目录的 setup.py、CMakeLists.txt 与 cmake/ 目录包含了完整的构建配置torchvision参考 Torchvision 仓库 CONTRIBUTING 中的 Development Installationtorchaudio参考 Torchaudio 仓库 CONTRIBUTING 中的 Building torchaudio from source。检查 Intel GPU 是否可用安装完成后用下面的代码确认 XPU 后端是否识别到你的 Intel GPUimport torch print(torch.xpu.is_available()) # torch.xpu 是 Intel GPU 支持的 API如果输出为False请复查 Intel GPU 驱动是否正确安装。从源码实现看torch.xpu.is_available()实际上是device_count() 0的封装见 torch/xpu/init.py。device_count()在未初始化时优先通过 Level Zero Sysmanpyzes枚举可见设备并解析ZE_AFFINITY_MASK环境变量来确定可见设备序号只有在 XPU 编译支持缺失_is_compiled()为假时才直接返回 0。XPU 模块采用懒初始化设计is_available()与device_count()都不会主动触发设备初始化因此你可以在任意环境安全地调用它们来判断平台能力。最小代码改动从 CUDA 迁移到 Intel GPU如果你正从cuda迁移代码核心操作就是把设备名从cuda替换为xpu。例如# CUDA 代码 tensor torch.tensor([1.0, 2.0]).to(cuda) # Intel GPU 代码 tensor torch.tensor([1.0, 2.0]).to(xpu)在 torch/xpu/ 包中你可以找到与 CUDA 后端一一对应的 API 族torch/xpu/init.pydevice、device_of、set_device、current_device、synchronize、stream、current_stream、get_device_name、get_device_properties、init、is_initialized等核心设备管理与流 APItorch/xpu/memory.pyempty_cache、reset_peak_memory_stats、memory_stats_as_nested_dict等内存统计与管理 APItorch/xpu/streams.pyStream、Eventtorch/xpu/graphs.pyXPUGraph、graph、make_graphed_callables等图捕获 APItorch/xpu/random.pymanual_seed、seed、get_rng_state等随机数 API。完整 API 清单可在 docs/source/xpu.md 的 autosummary 中找到包括get_gencode_flags、get_arch_list、is_bf16_supported、is_tf32_supported、temperature、clock_rate、utilization、can_device_access_peer等扩展接口。支持能力与限制以下要点概括了 PyTorch Intel GPU 的支持范围训练与推理工作流均受支持eager 模式与torch.compile均受支持。torch.compile在 Windows 上的 Intel GPU 支持自 PyTorch* 2.7 起可用可参考 torch.compiler 的 Windows CPU/XPU 使用教程见 docs/source/user_guide/torch_compiler/torch.compiler_get_started.mdFP32、BF16、FP16 以及自动混合精度AMP全部受支持。在 test/test_xpu.py 中测试套件覆盖了上述能力矩阵包括torch.amp.autocast在 XPU 上的 FP16/BF16 行为测试test_autocast_torch_fp16、test_autocast_torch_bf16等、torch.amp.GradScaler(devicexpu)的梯度缩放训练测试以及多设备TEST_MULTIXPU行为验证。测试还使用instantiate_device_type_tests把通用算子测试实例化到xpu设备上运行印证了 XPU 后端与 CUDA 后端共享同一套算子测试体系。推理示例以下示例使用 torchvision 的 ResNet50演示三种推理工作流。运行前请确保已完成 通过二进制 wheel 安装 中的安装步骤。FP32 推理import torch import torchvision.models as models model models.resnet50(weightsResNet50_Weights.DEFAULT) model.eval() data torch.rand(1, 3, 224, 224) model model.to(xpu) data data.to(xpu) with torch.no_grad(): model(data) print(Execution finished)AMP 推理import torch import torchvision.models as models model models.resnet50(weightsResNet50_Weights.DEFAULT) model.eval() data torch.rand(1, 3, 224, 224) model model.to(xpu) data data.to(xpu) with torch.no_grad(): d torch.rand(1, 3, 224, 224) d d.to(xpu) # 设置 dtypetorch.bfloat16 以使用 BF16 with torch.autocast(device_typexpu, dtypetorch.float16, enabledTrue): model(data) print(Execution finished)注意torch.autocast(device_typexpu, ...)的用法与 CUDA 一致只需把device_type换成xpu即可把 FP16或通过dtypetorch.bfloat16切换为 BF16的自动混合精度能力应用于 Intel GPU。使用torch.compile的推理import torch import torchvision.models as models import time model models.resnet50(weightsResNet50_Weights.DEFAULT) model.eval() data torch.rand(1, 3, 224, 224) ITERS 10 model model.to(xpu) data data.to(xpu) for i in range(ITERS): start time.time() with torch.no_grad(): model(data) torch.xpu.synchronize() end time.time() print(fInference time before torch.compile for iteration {i}: {(end-start)*1000} ms) model torch.compile(model) for i in range(ITERS): start time.time() with torch.no_grad(): model(data) torch.xpu.synchronize() end time.time() print(fInference time after torch.compile for iteration {i}: {(end-start)*1000} ms) print(Execution finished)在衡量耗时前调用torch.xpu.synchronize()是必要的XPU 内核是异步入队执行的synchronize()底层为torch._C._xpu_synchronize见 torch/xpu/init.py会等待当前设备上所有流的全部内核完成从而保证计时包含真实的设备执行时间。训练示例以下示例在 CIFAR-10 数据集上以 ResNet50 训练一个 epoch演示三种训练工作流并包含模型与优化器状态保存。FP32 训练import torch import torchvision LR 0.001 DOWNLOAD True DATA datasets/cifar10/ transform torchvision.transforms.Compose( [ torchvision.transforms.Resize((224, 224)), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ] ) train_dataset torchvision.datasets.CIFAR10( rootDATA, trainTrue, transformtransform, downloadDOWNLOAD, ) train_loader torch.utils.data.DataLoader(datasettrain_dataset, batch_size128) train_len len(train_loader) model torchvision.models.resnet50() criterion torch.nn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(), lrLR, momentum0.9) model.train() model model.to(xpu) criterion criterion.to(xpu) print(fInitiating training) for batch_idx, (data, target) in enumerate(train_loader): data data.to(xpu) target target.to(xpu) optimizer.zero_grad() output model(data) loss criterion(output, target) loss.backward() optimizer.step() if (batch_idx 1) % 10 0: iteration_loss loss.item() print(fIteration [{batch_idx1}/{train_len}], Loss: {iteration_loss:.4f}) torch.save( { model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), }, checkpoint.pth, ) print(Execution finished)AMP 训练使用 GradScaler 训练需要硬件对 FP64 的支持。Intel® Arc™ A-Series Graphics 不原生支持 FP64。如果你在 Intel® Arc™ A-Series Graphics 上运行负载请禁用 GradScaler。import torch import torchvision LR 0.001 DOWNLOAD True DATA datasets/cifar10/ use_ampTrue transform torchvision.transforms.Compose( [ torchvision.transforms.Resize((224, 224)), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ] ) train_dataset torchvision.datasets.CIFAR10( rootDATA, trainTrue, transformtransform, downloadDOWNLOAD, ) train_loader torch.utils.data.DataLoader(datasettrain_dataset, batch_size128) train_len len(train_loader) model torchvision.models.resnet50() criterion torch.nn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(), lrLR, momentum0.9) scaler torch.amp.GradScaler(devicexpu, enableduse_amp) model.train() model model.to(xpu) criterion criterion.to(xpu) print(fInitiating training) for batch_idx, (data, target) in enumerate(train_loader): data data.to(xpu) target target.to(xpu) # 设置 dtypetorch.bfloat16 以使用 BF16 with torch.autocast(device_typexpu, dtypetorch.float16, enableduse_amp): output model(data) loss criterion(output, target) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() optimizer.zero_grad() if (batch_idx 1) % 10 0: iteration_loss loss.item() print(fIteration [{batch_idx1}/{train_len}], Loss: {iteration_loss:.4f}) torch.save( { model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), }, checkpoint.pth, ) print(Execution finished)AMP 训练的关键差异点torch.amp.GradScaler(devicexpu, enableduse_amp)为 XPU 设备创建梯度缩放器enabledFalse时可直接关闭缩放前向与损失计算放入torch.autocast(device_typexpu, dtypetorch.float16, enableduse_amp)上下文反向传播使用scaler.scale(loss).backward()随后scaler.step(optimizer)与scaler.update()与 CUDA 训练完全同构。使用torch.compile的训练import torch import torchvision LR 0.001 DOWNLOAD True DATA datasets/cifar10/ transform torchvision.transforms.Compose( [ torchvision.transforms.Resize((224, 224)), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ] ) train_dataset torchvision.datasets.CIFAR10( rootDATA, trainTrue, transformtransform, downloadDOWNLOAD, ) train_loader torch.utils.data.DataLoader(datasettrain_dataset, batch_size128) train_len len(train_loader) model torchvision.models.resnet50() criterion torch.nn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(), lrLR, momentum0.9) model.train() model model.to(xpu) criterion criterion.to(xpu) model torch.compile(model) print(fInitiating training with torch compile) for batch_idx, (data, target) in enumerate(train_loader): data data.to(xpu) target target.to(xpu) optimizer.zero_grad() output model(data) loss criterion(output, target) loss.backward() optimizer.step() if (batch_idx 1) % 10 0: iteration_loss loss.item() print(fIteration [{batch_idx1}/{train_len}], Loss: {iteration_loss:.4f}) torch.save( { model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), }, checkpoint.pth, ) print(Execution finished)torch.compile训练与 FP32 训练的差异仅在于把模型搬到 XPU 后追加一行model torch.compile(model)其余训练循环保持不变。首次迭代会触发图编译后续迭代在编译产物上执行。深入torch.xpu源码视角的 API 全景前面示例反复使用的torch.xpu包torch/xpu/init.py是 Intel GPU 支持的统一入口理解其设计有助于排查问题与扩展用法。懒初始化与设备枚举模块注释明确说明XPU 包是懒初始化的任何时候都可以 import并用is_available()判断系统是否支持 XPUtorch/xpu/init.py 头部 docstring_lazy_init()在首次访问设备相关 API 时触发torch._C._xpu_init()并把初始化前排队的惰性调用如种子设置一并执行_parse_visible_devices()解析ZE_AFFINITY_MASK环境变量未设置时默认可见全部 128 个设备序号int8_t设备索引上限设置为0,1,2这类逗号分隔整数时只暴露对应设备遇到 COMPOSITE 格式如0.0,0.1则视为不支持并返回空列表device_count()在初始化前通过 Level Zero Sysmanpyzes枚举可见设备且初始化前不缓存设备数——因为ZE_AFFINITY_MASK在初始化前仍可能变化torch/xpu/init.py。设备与流管理torch.xpu.device(idx)、device_of(obj)、set_device()、current_device()提供了与torch.cuda同构的设备上下文管理torch.xpu.stream(stream)上下文管理器StreamContext让上下文内的内核统一入队到指定流current_stream()返回当前流get_stream_from_external(data_ptr)可以包装其他库创建的 SYCL 队列为Stream便于多库协同synchronize()等待设备上所有内核完成是性能计时与结果确认的关键同步点。设备属性与能力查询get_device_properties()返回_XpuDeviceProperties字段涵盖设备名、SYCL 平台名、厂商、驱动版本、最大计算单元数、EU 数量、内存时钟与总线位宽、子组大小列表、FP16/FP64/原子 64 位支持、BF16 转换能力、DPAS 矩阵乘加TF32能力、是否集成 GPU、总显存等完整字段清单见 torch/xpu/init.py。基于这些字段is_bf16_supported()与is_tf32_supported()可以动态判断当前设备的数据类型能力。内存管理torch/xpu/memory.py 提供了缓存分配器的管理与统计接口empty_cache()释放空闲缓存内存以减少碎片reset_peak_memory_stats()、reset_accumulated_memory_stats()、memory_stats_as_nested_dict()用于跟踪与重置分配/释放/峰值统计此外还支持可插拔分配器XPUPluggableAllocator、change_current_allocator见 docs/source/xpu.md 的 Memory management 一节。测试验证test/test_xpu.py共 3988 行是 XPU 后端最完整的验证样本TestXpu测试类覆盖设备行为、多设备切换、图捕获、内存统计等基础能力TestAutocast系列验证 FP16/BF16 autocast 行为GradScaler相关测试含图捕获场景下的缩放器验证 AMP 训练路径instantiate_device_type_tests把通用算子测试实例化到xpu设备从算子层面保证功能一致性。如果你在本机启用 XPU可通过python test/test_xpu.py运行这组测试来验证环境。常见问题排查torch.xpu.is_available()返回False优先复查 Intel GPU 驱动是否安装并加载成功确认当前 PyTorch 版本为 2.5 及以上且安装的是xpu索引的 wheelpip3 list检查torch构建来源在多设备机器上确认ZE_AFFINITY_MASK未把目标设备排除。编译产物不包含 XPU_is_compiled()返回torch._C._has_xpu如果为假说明当前安装的 PyTorch 未启用 XPU 编译选项需要改用官方xpuwheel 或按从源码构建一节启用 XPU 支持重新编译。GradScaler训练异常检查目标硬件是否支持 FP64。Intel® Arc™ A-Series Graphics 不原生支持 FP64按文档要求禁用GradScalerenabledFalse后改用常规训练循环。性能计时不准确计时前调用torch.xpu.synchronize()确保异步内核执行完成后再读取墙钟时间。结语从本指南可以看到PyTorch 的 Intel GPUXPU支持遵循与 CUDA 体验一致的设计原则安装只需切换 wheel 索引迁移只需把cuda换成xpuAMP 与torch.compile能力矩阵完整对齐。无论你面向 Intel Data Center GPU Max Series 还是 Arc 客户端 GPU都可以用本文提供的四类示例FP32/AMP/torch.compile× 推理/训练作为起点快速把既有工作负载跑通在 Intel GPU 之上。【免费下载链接】pytorchTensors and Dynamic neural networks in Python with strong GPU acceleration项目地址: https://gitcode.com/GitHub_Trending/py/pytorch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考