评价此页

获取 Intel GPU 上的入门指南#

创建日期:2024 年 6 月 14 日 | 最后更新日期:2026 年 3 月 8 日

硬件先决条件#

Intel 数据中心 GPU#

设备

Red Hat* Enterprise Linux* 9.2

SUSE Linux Enterprise Server* 15 SP5

Ubuntu* Server 22.04(>= 5.15 LTS 内核)

Intel® 数据中心 GPU Max 系列(代号:Ponte Vecchio)

Intel 客户端 GPU#

支持的操作系统

已验证的硬件

Windows 11 和 Ubuntu 24.04/25.04

Intel® Arc A 系列显卡(代号:Alchemist)
Intel® Arc B 系列显卡(代号:Battlemage)
配备 Intel® Arc™ 显卡的 Intel® Core™ Ultra 处理器(代号:Meteor Lake-H)
配备 Intel® Arc™ 显卡的 Intel® Core™ Ultra 处理器(第二代)(代号:Arrow Lake-H)
配备 Intel® Arc™ 显卡的 Intel® Core™ Ultra 移动处理器(第二代)(代号:Lunar Lake)

Windows 11 和 Ubuntu 25.10

配备 Intel® Arc™ 显卡的 Intel® Core™ Ultra 移动处理器(第三代)(代号:Panther Lake)

从 PyTorch* 2.5 开始,Intel GPU 和 SYCL* 软件栈已集成到官方 PyTorch 栈中,为 Intel® 客户端 GPU 和 Intel® 数据中心 GPU Max 系列提供支持,在 Linux 和 Windows 上提供一致的用户体验,以适应更多 AI 应用场景。(原型)

软件先决条件#

要在 Intel GPU 上使用 PyTorch,首先需要安装 Intel GPU 驱动程序。有关安装指南,请访问 Intel GPU 驱动程序安装

如果从二进制文件安装,请跳过 Intel® Deep Learning Essentials 安装部分。如果从源代码构建,请参阅 Intel GPU 的 PyTorch 安装先决条件,获取 Intel GPU 驱动程序和 Intel® Deep Learning Essentials 安装说明。

安装#

二进制文件#

现在我们已经安装了 Intel GPU 驱动程序,可以使用以下命令安装 pytorchtorchvisiontorchaudio

稳定版本#

要安装 Intel GPU (XPU) 的最新稳定版本 wheels

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/xpu

夜间构建版本#

要安装最新的预览版/夜间构建版本 wheels

pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/xpu

旧版本#

v2.10.0

pip install torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0 --index-url https://download.pytorch.org/whl/xpu

v2.9.1

pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/xpu

注意

对于较旧的 wheels,请参阅 旧版本 页面,并确保使用 xpu 索引 URL。

从源代码#

现在我们已经安装了 Intel GPU 驱动程序和 Intel® Deep Learning Essentials。按照指南从源代码构建 pytorchtorchvisiontorchaudio

有关构建 torch 的源代码,请参阅 PyTorch 安装从源代码构建

有关构建 torchvision 的源代码,请参阅 Torchvision 安装从源代码构建

有关构建 torchaudio 的源代码,请参阅 Torchaudio 安装从源代码构建

检查 Intel GPU 的可用性#

要检查您的 Intel GPU 是否可用,通常可以使用以下代码

import torch
print(torch.xpu.is_available())  # torch.xpu is the API for Intel GPU support

如果输出为 False,请仔细检查 Intel GPU 的驱动程序安装情况。

最小代码更改#

如果从 cuda 迁移代码,您会将引用从 cuda 更改为 xpu。例如

# CUDA CODE
tensor = torch.tensor([1.0, 2.0]).to("cuda")

# CODE for Intel GPU
tensor = torch.tensor([1.0, 2.0]).to("xpu")

以下几点概述了 PyTorch 与 Intel GPU 的支持和限制

  1. 支持训练和推理工作流程。

  2. 支持即时模式和 torch.compile。从 PyTorch* 2.7 开始,Windows 上的 torch.compile 功能也受支持,请参阅 如何在 Windows CPU/XPU 上使用 torch.compile

  3. 支持 FP32、BF16、FP16 和自动混合精度 (AMP) 等数据类型。

示例#

本节包含推理和训练工作流程的使用示例。

推理示例#

这里有一些推理工作流程示例。

使用 FP32 进行推理#

import torch
import torchvision.models as models

model = models.resnet50(weights="ResNet50_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(weights="ResNet50_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")
    # set dtype=torch.bfloat16 for BF16
    with torch.autocast(device_type="xpu", dtype=torch.float16, enabled=True):
        model(data)

print("Execution finished")

使用 torch.compile 进行推理#

import torch
import torchvision.models as models
import time

model = models.resnet50(weights="ResNet50_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(f"Inference 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(f"Inference time after torch.compile for iteration {i}: {(end-start)*1000} ms")

print("Execution finished")

训练示例#

这里有一些训练工作流程示例。

使用 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(
    root=DATA,
    train=True,
    transform=transform,
    download=DOWNLOAD,
)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=128)
train_len = len(train_loader)

model = torchvision.models.resnet50()
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=LR, momentum=0.9)
model.train()
model = model.to("xpu")
criterion = criterion.to("xpu")

print(f"Initiating 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(f"Iteration [{batch_idx+1}/{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 的支持。FP64 本身并不受 Intel® Arc™ A 系列显卡的本机支持。如果您的工作负载在 Intel® Arc™ A 系列显卡上运行,请禁用 GradScaler

import torch
import torchvision

LR = 0.001
DOWNLOAD = True
DATA = "datasets/cifar10/"

use_amp=True

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(
    root=DATA,
    train=True,
    transform=transform,
    download=DOWNLOAD,
)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=128)
train_len = len(train_loader)

model = torchvision.models.resnet50()
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=LR, momentum=0.9)
scaler = torch.amp.GradScaler(device="xpu", enabled=use_amp)

model.train()
model = model.to("xpu")
criterion = criterion.to("xpu")

print(f"Initiating training")
for batch_idx, (data, target) in enumerate(train_loader):
    data = data.to("xpu")
    target = target.to("xpu")
    # set dtype=torch.bfloat16 for BF16
    with torch.autocast(device_type="xpu", dtype=torch.float16, enabled=use_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(f"Iteration [{batch_idx+1}/{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 进行训练#

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(
    root=DATA,
    train=True,
    transform=transform,
    download=DOWNLOAD,
)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=128)
train_len = len(train_loader)

model = torchvision.models.resnet50()
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=LR, momentum=0.9)
model.train()
model = model.to("xpu")
criterion = criterion.to("xpu")
model = torch.compile(model)

print(f"Initiating 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(f"Iteration [{batch_idx+1}/{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")