Transformers documentation
Intel GPU
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/xpuPyTorchが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 をお読みください。