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) и 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.

Дальнейшие шаги

Update on GitHub