Transformers documentation

Intel GPU

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Intel GPU

Intel GPU は XPU バックエンドを介して PyTorch を実行し、デバイス文字列は xpu です。PyTorch の XPU ビルドは別のパッケージインデックスから提供されるため、以下のインストールコマンドでは、それを追加インデックスとして指定しています。

インストール

PyTorch 用の Intel GPU ドライバーをインストールし、xpu-smiを実行してシステムが GPU を検出できることを確認してください。

XPUインデックスからPyTorchとTransformersをインストールします。

pip install "transformers[torch]" --extra-index-url https://download.pytorch.org/whl/xpu

PyTorchがGPUを認識できることを確認します。

import torch

print(torch.xpu.is_available(), torch.xpu.device_count())

True と GPU の数が出力されます。例えば、True 2 のように表示されます。

XPUs の選択と順序付け

XPUs を選択するには、ZE_AFFINITY_MASK 環境変数を使用します。エクスポートした変数を忘れてしまうと、後続の実行が意図せず誤った XPU に割り当てられてしまう可能性があるため、実行コマンドと同じコマンドライン上で設定してください。

例えば、4つのXPUのうち0と2を選択するには:

ZE_AFFINITY_MASK=0,2 torchrun trainer-program.py ...

PyTorch は XPU 0 と 2 のみを認識します。ZE_AFFINITY_MASK の値の順序は、PyTorch がデバイスを列挙する順序には影響しません。実行間で一貫した順序を得るには、ZE_ENABLE_PCI_ID_DEVICE_ORDER=1 も設定してください。これにより、PCI バス ID が低い順から高い順にデバイスが報告されます。

ZE_ENABLE_PCI_ID_DEVICE_ORDER=1 ZE_AFFINITY_MASK=0,2 torchrun trainer-program.py ...

デバイス列挙の詳細については、Level Zero仕様を参照してください。

アテンションバックエンドを選択

モデルを読み込む際にattn_implementationでアテンションバックエンドを設定し、推論と学習の両方に適用されます。モデルはデフォルトでSDPAを使用します。PyTorch 2.8以降では、XPU上のSDPAは、キーとバリューのヘッドを先に複製することなく、グループクエリアテンションを直接処理します。

attn_implementation="flash_attention_2" を指定すると、XPU 版ビルドが同梱されている kernels-community/flash-attn2 が Hub から読み込まれます。これを利用するには、kernels エクストラをインストールしてください。FlashAttention-3 と FlashAttention-4 は NVIDIA GPU でのみ実行できます。

pip install "transformers[kernels]"
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B",
    dtype="bfloat16",
    device_map="xpu",
    attn_implementation="flash_attention_2",
)

推論を実行する

device_map="auto" を from_pretrained() に渡すことで、1つの XPU に収まらないモデルを利用可能な複数の XPU に分割して配置できます。単一の XPU に読み込む場合は device_map="xpu" を指定してください。device を指定しない場合、pipeline() は自動的に XPU を選択します。

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="xpu")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")

inputs = tokenizer("Intel GPUs are", return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=50, do_sample=False)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Continuous batchingは、Intel GPUでのXPUグラフおよび非同期バッチ処理をサポートし、それらを使用するかどうかを自動的に判断します。

Hubカーネルを使用する

use_kernels=True を from_pretrained() に設定すると、Hub からの最適化されたカーネルによりサポートされているレイヤーが置き換えられます。Intel GPU は、NVIDIA GPU と同じく、アクティベーション、RMSNorm、ロータリー埋め込みなどの大部分のレイヤーに対応しています。これらを使用するには、kernels エクストラをインストールしてください。

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="xpu", use_kernels=True
)

Hub カーネルはトレーニングにも適用されます。model.train() または model.eval() を呼び出すと、そのモード用のカーネルに切り替わります。カーネルを自分で選択する場合は、KernelConfig を渡し、XPU 固有のマッピングにはデバイスキーとして "xpu" を使用します。完全なマッピングについては、カーネルの読み込み を参照してください。

モデルの量子化

Quantizationにより、より大きなモデルをGPUメモリに収めることができます。XPUで実行可能な手法については、quantization overviewのIntel GPU列を確認してください。

GPU メモリに収まらないモデルをファインチューニングするには、bitsandbytes を使用して 4-bit で読み込み、PEFT で LoRA アダプターを学習します。

Trainerで学習

TrainingArguments は Intel GPU を検出し、デバイスを xpu に設定するため、Trainer はデバイス設定なしで Intel GPU 上で学習できます。 TrainingArguments は torch.xpu.is_bf16_supported() で bf16 のサポートを確認し、GPU がサポートしていない場合は ValueError を送出します。

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./outputs",
    bf16=True,
)
print(training_args.device)

Trainerが単一のXPUで学習を行う場合、xpu:0が出力されます。

分散学習

分散学習では、xccl コレクティブバックエンドを使用します。torchrun または accelerate launch を使用して、XPU ごとに 1 つのプロセスを起動してください。

torchrun --nproc_per_node=2 train.py

DDP、FSDP2、DeepSpeed ZeRO、Tensor parallelismを参照して、並列化戦略を選択してください。

次のステップ

  • サポート対象のハードウェアとプラットフォームについては、PyTorchのIntel GPUでの入門ガイドを参照してください。
  • attn_implementation がどのようにアテンション関数を選択するかを学ぶには、Attention backends をお読みください。
Update on GitHub