Transformers documentation
AMD GPU
AMD GPU
AMD Instinct (seri MI200, MI300, MI350) dan GPU Radeon menjalankan PyTorch melalui ROCm, tumpukan perangkat lunak GPU dari AMD. Build PyTorch untuk ROCm menggunakan HIP, antarmuka pemrograman mirip CUDA dari AMD, untuk mengekspos GPU AMD melalui API torch.cuda. String perangkatnya adalah cuda, sehingga kode yang ditulis untuk GPU NVIDIA dapat berjalan tanpa perubahan. Transformers memeriksa torch.version.hip saat runtime untuk membedakan keduanya dan mengarahkan kernel attention dan Hub ke build yang spesifik untuk AMD.
Instalasi
Install ROCm dari image Docker huggingface/transformers-pytorch-amd-gpu. Image ini menyertakan build PyTorch untuk ROCm, build flash-attn untuk GPU MI300 dan MI350 (gfx942 dan gfx950), serta Transformers yang diinstal dari source.
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 dan --device=/dev/dri mengekspos GPU AMD ke dalam container. Instal kernels di dalam container untuk menggunakan Hub kernels.
pip install "transformers[kernels]"Untuk menginstal di sistem Anda sendiri, pilih ROCm di PyTorch install selector dan pastikan versi wheel ROCm didukung oleh driver Anda.
Periksa bahwa PyTorch mendeteksi GPU AMD.
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 bernilai None pada build PyTorch CUDA. gcnArchName melaporkan arsitektur GPU, misalnya gfx942 untuk MI300, gfx950 untuk MI350, dan gfx1151 untuk Ryzen AI Max (Strix Halo).
Pilih dan urutkan GPU
Gunakan HIP_VISIBLE_DEVICES untuk memilih GPU dan mengatur urutannya. Atur ini pada baris perintah yang sama dengan eksekusi.
HIP_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...PyTorch hanya melihat GPU 0 dan 2, yang dipetakan ke cuda:0 dan cuda:1. ROCR_VISIBLE_DEVICES memfilter GPU pada tingkat yang lebih rendah dalam stack dan umumnya diset oleh penjadwal cluster. Jika keduanya diset, HIP_VISIBLE_DEVICES mengindeks GPU yang masih terlihat oleh ROCR_VISIBLE_DEVICES.
Gunakan rocm-smi atau amd-smi untuk menampilkan daftar GPU dan indeksnya.
Jalankan inferensi
Pipeline dan device_map="auto" mendeteksi GPU AMD dan menempatkan model di cuda secara otomatis. Anda juga dapat meneruskan device_map="cuda" atau device_map="cuda:1" secara eksplisit.
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
Pilih backend perhatian
Atur backend perhatian dengan attn_implementation saat Anda memuat model, dan ini berlaku untuk inferensi maupun pelatihan. SDPA adalah default dan berfungsi di setiap GPU AMD yang didukung oleh PyTorch. Dua opsi FlashAttention juga tersedia.
attn_implementation | Diperlukan | Catatan |
|---|---|---|
"sdpa" | – | Default. |
"flash_attention_2" | flash-attn yang dibangun untuk ROCm, atau kernels | Menggunakan paket flash-attn saat terinstal. Backend Composable Kernel (CK) bawaannya mendukung GPU MI200, MI300, MI355, dan RDNA 3/4, dan image Docker menyertakannya pada MI300 atau MI350. Jika tidak, memuat amd/aiter-flash-attn dari Hub. |
"flash_attention_3" | kernels | Memuat amd/aiter-flash-attn, kernel FlashAttention yang sudah dibangun sebelumnya dari pustaka AITER AMD. Tidak memerlukan kompilasi. |
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype="bfloat16",
device_map="auto",
attn_implementation="flash_attention_3",
)Pada ROCm, flash_attention_3 dipecahkan ke kernel AITER dan mencatat log berikut. Transformers saat ini menggunakan alias kernels-community/aiter-flash-attn, yang mengarahkan ulang ke amd/aiter-flash-attn. Pesan tersebut merujuk ke paket FlashAttention-3, sehingga muncul bahkan ketika flash_attention_2 terpasang.
You do not have `flash_attn` installed, using `kernels-community/aiter-flash-attn` from the `kernels` library instead!
Anda juga dapat melewatkan repositori kernel secara langsung dengan attn_implementation="kernels-community/aiter-flash-attn". Lihat Attention backends untuk cara backend dipilih.
Gunakan kernel Hub
Set use_kernels=True di from_pretrained() untuk mengganti lapisan yang didukung dengan kernel yang dioptimalkan dari Hub. Transformers mendeteksi ROCm dan memilih build AMD untuk setiap lapisan, seperti amd/aiter-rope untuk rotary embeddings dan kernels-community/liger-kernels untuk RMSNorm. Saat Anda menulis KernelConfig kustom, gunakan "rocm" sebagai kunci perangkat untuk pemetaan yang spesifik AMD.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="auto", use_kernels=True
)Kernel hub terutama mempercepat prefill dan batch besar. Benchmark workload Anda sendiri sebelum mengaktifkannya untuk decoding batch kecil. Lihat Memuat kernel untuk pemetaan lengkap.
Kuantisasi model
Metode yang didukung pada ROCm meliputi AWQ, GPT-QModel, compressed-tensors, dan Quark dari AMD. bitsandbytes memiliki dukungan parsial. GPU MI300 dan yang lebih baru mendukung FP8 secara native. Lihat tabel kompatibilitas untuk daftar lengkap.
Latih dengan Trainer
TrainingArguments mendeteksi GPU AMD dan mengatur perangkat ke cuda secara otomatis.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./outputs",
bf16=True,
)Pelatihan terdistribusi
Build ROCm dari PyTorch menyertakan RCCL, implementasi API NCCL dari AMD, sehingga backend nccl, torchrun, FSDP, DeepSpeed, dan API distributed Transformers berfungsi tanpa perubahan.
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
Lihat Paralelisme tensor, Paralelisme pakar, dan FSDP untuk opsi yang tersedia.
Keterbatasan
CodeCarbonCallbacktidak kompatibel dengan ROCm. Aturreport_todi TrainingArguments untuk mengecualikancodecarbon.- Metode kuantisasi yang ditandai 🔴 untuk ROCm dalam tabel kompatibilitas bergantung pada kernel khusus CUDA dan gagal dimuat pada GPU AMD.
Langkah selanjutnya
- Baca dokumentasi ROCm untuk pengaturan driver dan PyTorch.
- Jelajahi build ROCm di organisasi AMD dan kernels-community.
- Baca Memuat kernel untuk menyesuaikan kernel mana yang menggantikan lapisan mana.