Transformers documentation
AMD GPU
AMD GPU
AMD Instinct (серии MI200, MI300, MI350) и Radeon работают с PyTorch через ROCm — программный стек AMD для GPU. Сборка PyTorch для ROCm использует HIP — аналог CUDA от AMD — чтобы предоставлять доступ к GPU AMD через API torch.cuda. Строка устройства — cuda, поэтому код, написанный для GPU NVIDIA, работает без изменений. Transformers проверяет torch.version.hip во время выполнения, чтобы различать платформы и направлять ядра внимания и Hub в сборки, специфичные для AMD.
Установка
Установите ROCm из Docker-образа huggingface/transformers-pytorch-amd-gpu. Он содержит сборку PyTorch для ROCm, сборку flash-attn для GPU MI300 и MI350 (gfx942 и gfx950), а также Transformers, установленные из исходного кода.
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 и --device=/dev/dri предоставляют доступ к GPU AMD внутри контейнера. Установите kernels внутри контейнера, чтобы использовать ядра из Hub.
pip install "transformers[kernels]"Чтобы установить на собственную систему, выберите ROCm в PyTorch install selector и убедитесь, что версия ROCm для wheel поддерживается вашим драйвером.
Убедитесь, что PyTorch видит 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 равно None в сборке PyTorch для CUDA. gcnArchName сообщает архитектуру GPU, например gfx942 для MI300, gfx950 для MI350 и gfx1151 для Ryzen AI Max (Strix Halo).
Выбор и порядок GPU
Используйте HIP_VISIBLE_DEVICES для выбора GPU и задания их порядка. Установите его в той же командной строке, что и запуск.
HIP_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...PyTorch видит только GPU 0 и 2, которые отображаются на cuda:0 и cuda:1. ROCR_VISIBLE_DEVICES фильтрует GPU на более низком уровне стека и обычно устанавливается планировщиками кластеров. Если заданы оба параметра, HIP_VISIBLE_DEVICES индексирует GPU, оставшиеся видимыми после применения ROCR_VISIBLE_DEVICES.
Используйте rocm-smi или amd-smi, чтобы получить список GPU и их индексов.
Запуск вывода
Pipeline и device_map="auto" автоматически обнаруживают GPU AMD и размещают модель на cuda. Также можно явно передать device_map="cuda" или device_map="cuda:1".
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
Выберите бэкенд внимания
Установите бэкенд внимания с помощью attn_implementation при загрузке модели; он применяется как для инференса, так и для обучения. По умолчанию используется SDPA, который работает на всех поддерживаемых PyTorch GPU от AMD. Также доступны два варианта FlashAttention.
attn_implementation | Требуется | Примечания |
|---|---|---|
"sdpa" | – | По умолчанию. |
"flash_attention_2" | flash-attn, собранный для ROCm, или kernels | Использует пакет flash-attn, если он установлен. Его стандартный бэкенд Composable Kernel (CK) поддерживает GPU MI200, MI300, MI355 и RDNA 3/4, а образ Docker включает его для MI300 или MI350. В противном случае загружает amd/aiter-flash-attn с Hub. |
"flash_attention_3" | ядра | Загружает amd/aiter-flash-attn, готовое ядро FlashAttention из библиотеки AITER от AMD. Компиляция не требуется. |
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype="bfloat16",
device_map="auto",
attn_implementation="flash_attention_3",
)В ROCm flash_attention_3 разрешается в ядро AITER и выводит следующее сообщение. Transformers в настоящее время использует псевдоним kernels-community/aiter-flash-attn, который перенаправляет на amd/aiter-flash-attn. Сообщение относится к пакету FlashAttention-3, поэтому оно появляется даже при установленном flash_attention_2.
You do not have `flash_attn` installed, using `kernels-community/aiter-flash-attn` from the `kernels` library instead!
Вы также можете передать репозиторий ядра напрямую с помощью attn_implementation="kernels-community/aiter-flash-attn". См. Бэкенды внимания, чтобы узнать, как выбираются бэкенды.
Использование ядер Hub
Установите use_kernels=True в from_pretrained(), чтобы заменить поддерживаемые слои на оптимизированные ядра из Hub. Transformers определяет ROCm и выбирает сборку AMD для каждого слоя, например amd/aiter-rope для вращательных эмбеддингов и kernels-community/liger-kernels для RMSNorm. При создании собственного KernelConfig используйте "rocm" в качестве ключа устройства для специфичных для AMD отображений.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="auto", use_kernels=True
)Ядра Hub в основном ускоряют prefill и работу с большими батчами. Перед включением их для декодирования малых батчей проведите бенчмаркинг собственной нагрузки. Полное соответствие описано в разделе Загрузка ядер.
Квантование моделей
Среди методов, поддерживаемых на ROCm, — AWQ, GPT-QModel, compressed-tensors и Quark от AMD. Поддержка bitsandbytes частичная. GPU MI300 и новее поддерживают FP8 нативно. Полный список приведён в таблице совместимости.
Обучение с помощью Trainer
TrainingArguments определяет GPU AMD и автоматически устанавливает устройство в cuda.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./outputs",
bf16=True,
)Распределённое обучение
ROCc-сборка PyTorch поставляется с RCCL — реализацией API NCCL от AMD, поэтому бэкенд nccl, torchrun, FSDP, DeepSpeed и распределённый API Transformers работают без изменений.
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
См. Tensor parallelism, Expert parallelism и FSDP для доступных вариантов.
Ограничения
CodeCarbonCallbackнесовместим с ROCm. Укажите в TrainingArguments параметрreport_toтак, чтобы исключитьcodecarbon.- Методы квантования, отмеченные 🔴 для ROCm в таблице совместимости, используют ядра, доступные только в CUDA, и не могут быть загружены на GPU AMD.
Дальнейшие шаги
- Ознакомьтесь с документацией ROCm для настройки драйвера и PyTorch.
- Просмотрите сборки ROCm в организациях AMD и kernels-community.
- Ознакомьтесь с разделом Загрузка ядер, чтобы настроить, какие ядра заменяют какие слои.