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.2).
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를 감지하는지 확인합니다.

PyTorch를 XPU 인덱스에서 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와 같습니다.

XPU 선택 및 순서 지정

XPUs를 선택하려면 ZE_AFFINITY_MASK 환경 변수를 사용하세요. 나중에 실행이 의도하지 않은 XPUs로 조용히 전송될 수 있으므로, 해당 변수를 실행과 동일한 명령줄에서 설정하세요.

예를 들어, 4개의 XPU 중 0번과 2번을 선택하려면:

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

PyTorch는 XPU 0과 2만 인식합니다. ZE_AFFINITY_MASK의 값 순서는 PyTorch가 장치를 나열하는 순서를 변경하지 않습니다. 실행 간 일관된 순서를 얻으려면, PCI 버스 ID가 낮은 것부터 높은 것 순서로 장치를 보고하는 ZE_ENABLE_PCI_ID_DEVICE_ORDER=1도 설정하세요.

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

장치 열거에 대한 자세한 내용은 Level Zero 사양을 참조하세요.

어텐션 백엔드 선택

모델을 로드할 때 attn_implementation으로 attention backends를 설정하며, 이는 추론과 학습 모두에 적용됩니다. 모델은 기본적으로 SDPA를 사용합니다. PyTorch 2.8 이상에서는 XPU의 SDPA가 key와 value head를 먼저 반복하지 않고 grouped-query attention을 직접 처리합니다.

attn_implementation="flash_attention_2"는 Hub에서 kernels-community/flash-attn2를 로드하며, 여기에는 XPU 빌드가 포함되어 있습니다. 이를 사용하려면 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()에 전달하면 하나의 XPU에 맞지 않는 모델을 사용 가능한 여러 XPU에 나눠 배치할 수 있으며, device_map="xpu"를 전달하면 단일 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와 동일한 대부분의 레이어, 예를 들어 activations, RMSNorm, rotary embeddings 등을 지원합니다. 이를 사용하려면 kernels extra를 설치하세요.

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 개요의 Intel GPU 열을 확인하세요.

GPU 메모리에 맞지 않는 모델을 미세 조정하려면 bitsandbytes로 4비트로 로드하고 PEFT로 LoRA 어댑터를 학습하세요.

Trainer로 학습

TrainingArguments는 Intel GPU를 감지하여 장치를 xpu로 설정하므로, Trainer는 장치 설정 없이 해당 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마다 하나의 프로세스를 시작합니다.

torchrun --nproc_per_node=2 train.py

DDP, FSDP2, DeepSpeed ZeRO, Tensor parallelism를 참고하여 병렬화 전략을 선택하세요.

다음 단계

  • 지원되는 하드웨어 및 플랫폼에 대한 PyTorch Intel GPU 시작하기 가이드를 읽어보세요.
  • attn_implementation이 어텐션 함수를 선택하는 방식을 배우려면 Attention backends를 읽어보세요.
Update on GitHub