Transformers documentation

AMD 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

AMD GPU

AMD Instinct (MI200, MI300, MI350 serileri) ve Radeon GPU'ları, PyTorch'u AMD'nin GPU yazılım yığını olan ROCm üzerinden çalıştırır. PyTorch'un ROCm derlemesi, AMD GPU'larını torch.cuda API'si üzerinden açmak için CUDA benzeri programlama arayüzü olan HIP'i kullanır. Cihaz dizgesi cuda olduğundan, NVIDIA GPU'ları için yazılmış kodlar değişiklik yapılmadan çalışır. Transformers, çalışma zamanında torch.version.hip değerini kontrol ederek bu iki platformu ayırt eder ve dikkat (attention) ile Hub çekirdeklerini AMD'ye özgü derlemelere yönlendirir.

Kurulum

ROCm’ü huggingface/transformers-pytorch-amd-gpu Docker görüntüsünden yükleyin. Bu görüntü, PyTorch’un ROCm derlemesini, MI300 ve MI350 GPU’ları için (gfx942 ve gfx950) bir flash-attn derlemesini ve kaynaklardan kurulan Transformers’ı içerir.

docker run -it --device=/dev/kfd --device=/dev/dri --group-add video \
    --ipc=host --shm-size 16G \
    huggingface/transformers-pytorch-amd-gpu

--device=/dev/kfd ve --device=/dev/dri bayrakları, AMD GPU'ları konteynere açar. Hub çekirdeklerini kullanmak için konteynerin içine çekirdekleri yükleyin.

pip install "transformers[kernels]"

Bunun yerine kendi sisteminize kurmak için PyTorch kurulum seçicisinde ROCm'yi seçin ve tekerleğin ROCm sürümünün sürücünüz tarafından desteklendiğinden emin olun.

PyTorch'un AMD GPU'ları gördüğünden emin olun.

import torch

print(torch.version.hip, torch.cuda.is_available(), torch.cuda.device_count())
print(torch.cuda.get_device_properties(0).gcnArchName)
7.2.53211 True 2
gfx942:sramecc+:xnack-

torch.version.hip, PyTorch'un CUDA derlemesinde None değerine sahiptir. gcnArchName, GPU mimarisini raporlar; örneğin MI300 için gfx942, MI350 için gfx950 ve Ryzen AI Max (Strix Halo) için gfx1151.

GPU'ları seçin ve sıralayın

GPU'ları seçmek ve sıralamalarını belirlemek için HIP_VISIBLE_DEVICES kullanın. Bunu çalıştırma komutunun aynı satırında ayarlayın.

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

PyTorch yalnızca 0 ve 2 numaralı GPU'ları görür; bunlar cuda:0 ve cuda:1 olarak eşlenir. ROCR_VISIBLE_DEVICES, GPU'ları yığın içinde daha düşük bir seviyede filtreler ve genellikle küme zamanlayıcıları tarafından ayarlanır. Her ikisi de ayarlıysa, HIP_VISIBLE_DEVICES, ROCR_VISIBLE_DEVICES tarafından görünür bırakılan GPU'lara indeks olarak uygulanır.

GPU'ları ve indekslerini listelemek için rocm-smi veya amd-smi kullanın.

Çıkarım çalıştır

Pipeline ve device_map="auto", AMD GPU'larını algılar ve modeli otomatik olarak cuda üzerine yerleştirir. Ayrıca device_map="cuda" veya device_map="cuda:1" değerlerini açıkça geçebilirsiniz.

from transformers import AutoModelForCausalLM, AutoTokenizer

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

inputs = tokenizer("The French Bread Law states", return_tensors="pt").to(model.device)
output = model.generate(**inputs, do_sample=False, max_new_tokens=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))
The French Bread Law states that the French government must provide a certain amount of bread for the citizens of the country. The law is passed by the French parliament. The French parliament is a body of the French government. The French government is a body of the French state. The

Bir dikkat arka ucunu seçin

Bir model yüklerken attn_implementation ile dikkat (attention) arka ucunu belirleyin; bu ayar hem çıkarım hem de eğitim için geçerlidir. SDPA varsayılandır ve PyTorch tarafından desteklenen her AMD GPU üzerinde çalışır. Ayrıca iki FlashAttention seçeneği de mevcuttur.

attn_implementationGereksinimlerNotlar
"sdpa"–Varsayılan.
"flash_attention_2"ROCm için derlenmiş flash-attn veya kernelsYüklüyse flash-attn paketini kullanır. Varsayılan Composable Kernel (CK) arka ucu MI200, MI300, MI355 ve RDNA 3/4 GPU'larını destekler ve Docker görüntüsü MI300 veya MI350 üzerinde bunu içerir. Aksi takdirde, Hub'dan amd/aiter-flash-attn yüklenir.
"flash_attention_3"çekirdeklerAMD'nin AITER kütüphanesinden, önceden derlenmiş bir FlashAttention çekirdeği olan amd/aiter-flash-attn yükler. Derleme gerektirmez.
from transformers import AutoModelForCausalLM

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

ROCm üzerinde flash_attention_3, AITER çekirdeğine çözümlenir ve aşağıdaki günlük kaydını oluşturur. Transformers şu anda kernels-community/aiter-flash-attn takma adını kullanır ve bu, amd/aiter-flash-attn adresine yönlendirilir. Mesaj FlashAttention-3 paketine atıfta bulunduğundan, flash_attention_2 yüklü olsa bile görünür.

You do not have `flash_attn` installed, using `kernels-community/aiter-flash-attn` from the `kernels` library instead!

Çekirdeği deposunu doğrudan attn_implementation="kernels-community/aiter-flash-attn" ile de iletebilirsiniz. Arka uçların nasıl seçildiğini görmek için Dikkat arka uçları bölümüne bakın.

Hub çekirdeklerini kullanın

use_kernels=True değerini from_pretrained() içinde ayarlayarak desteklenen katmanları Hub'daki optimize edilmiş çekirdeklerle değiştirin. Transformers, ROCm'yi algılar ve döner gömme (rotary embeddings) için amd/aiter-rope, RMSNorm için kernels-community/liger-kernels gibi her katman için AMD derlemesini seçer. Özel bir KernelConfig yazarken, AMD'ye özgü eşlemeler için cihaz anahtarı olarak "rocm" kullanın.

from transformers import AutoModelForCausalLM

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

Hub çekirdekleri çoğunlukla prefill ve büyük batch'leri hızlandırır. Küçük batch'li çözümleme için etkinleştirmeden önce kendi iş yükünüzü ölçün. Tam eşlemeyi Çekirdekleri yükleme bölümünde bulabilirsiniz.

Modelleri kuantize et

ROCm tarafından desteklenen yöntemler arasında AWQ, GPT-QModel, compressed-tensors ve AMD'nin Quark yer alır. bitsandbytes için kısmi destek mevcuttur. MI300 ve daha yeni GPU'lar FP8'i yerel olarak destekler. Tam liste için uyumluluk tablosuna bakın.

Trainer ile Eğitim

TrainingArguments, AMD GPU'leri algılar ve cihazı otomatik olarak cuda olarak ayarlar.

from transformers import TrainingArguments

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

Dağıtık eğitim

PyTorch’un ROCm derlemesi, NCCL API’sinin AMD uygulaması olan RCCL’i içerir; bu nedenle nccl arka ucu, torchrun, FSDP, DeepSpeed ve Transformers dağıtık API’si değişiklik yapılmadan çalışır.

import torch
from transformers import AutoModelForCausalLM, DistributedConfig

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-1.7B",
    dtype=torch.bfloat16,
    distributed_config=DistributedConfig(tp_size=2, fsdp_size=4),
)
torchrun --nproc_per_node=8 train.py

Mevcut seçenekler için Tensor parallelism, Expert parallelism ve FSDP konularına bakın.

Kısıtlamalar

  • CodeCarbonCallback, ROCm ile uyumlu değildir. codecarbon’u hariç tutmak için TrainingArguments içindeki report_to değerini ayarlayın.
  • ROCm için uyumluluk tablosunda 🔴 ile işaretlenen kuantizasyon yöntemleri yalnızca CUDA çekirdeklerine dayanır ve AMD GPU'larında yüklenemez.

Sonraki adımlar

Update on GitHub