# Intel GPU

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

## インストール

[PyTorch 用の Intel GPU ドライバー](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu/2-15.html)をインストールし、`xpu-smi`を実行して[システムが GPU を検出できることを確認](https://dgpu-docs.intel.com/driver/verification.html)してください。

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

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

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

```py
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を選択するには:

```cli
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 が低い順から高い順にデバイスが報告されます。

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

デバイス列挙の詳細については、[Level Zero仕様](https://oneapi-src.github.io/level-zero-spec/level-zero/latest/core/PROG.html)を参照してください。

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

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

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

```bash
pip install "transformers[kernels]"
```

```py
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()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) に渡すことで、1つの XPU に収まらないモデルを利用可能な複数の XPU に分割して配置できます。単一の XPU に読み込む場合は `device_map="xpu"` を指定してください。`device` を指定しない場合、[pipeline()](/docs/transformers/main/ja/main_classes/pipelines#transformers.pipeline) は自動的に XPU を選択します。

```py
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](./continuous_batching)は、Intel GPUでのXPUグラフおよび非同期バッチ処理をサポートし、それらを使用するかどうかを自動的に判断します。

## Hubカーネルを使用する

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

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

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

## モデルの量子化

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

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

## Trainerで学習

[TrainingArguments](/docs/transformers/main/ja/main_classes/trainer#transformers.TrainingArguments) は Intel GPU を検出し、デバイスを `xpu` に設定するため、[Trainer](/docs/transformers/main/ja/main_classes/trainer#transformers.Trainer) はデバイス設定なしでそれら上で学習できます。 `TrainingArguments` は `torch.xpu.is_bf16_supported()` で bf16 のサポートを確認し、GPU がサポートしていない場合は `ValueError` を送出します。

```py
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 つのプロセスを起動してください。

```bash
torchrun --nproc_per_node=2 train.py
```

[DDP](./ddp)、[FSDP2](./fsdp)、[DeepSpeed ZeRO](./deepspeed)、[Tensor parallelism](./tensor_parallelism)を参照して、並列化戦略を選択してください。

## 次のステップ

- サポート対象のハードウェアとプラットフォームについては、PyTorchの[Intel GPUでの入門ガイド](https://docs.pytorch.org/docs/stable/notes/get_start_xpu.html)を参照してください。
- `attn_implementation` がどのようにアテンション関数を選択するかを学ぶには、[Attention backends](./attention_interface) をお読みください。

