Transformers documentation

AWS Trainium

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

AWS Trainium

AWS Trainium — это инстансы, которые нативно поддерживают PyTorch через пакет torch-neuronx, регистрирующий устройство neuron. Neuron компилирует вашу модель в один или несколько графов для каждой формы входных данных, поэтому поддержание статических форм входных данных позволяет избежать повторной компиляции.

Установка

Установите torch-neuronx, следуя инструкции по настройке AWS Neuron. Затем убедитесь, что PyTorch видит устройства Neuron.

import torch

print(torch.neuron.is_available(), torch.neuron.device_count())

Выводится True и количество устройств Neuron, например True 4.

Запуск вывода

device_map="auto" не определяет Neuron. Автоматическое размещение зависит от Accelerate, который перечисляет доступные устройства, но Accelerate не включает в список устройства Neuron, поэтому модель молча загружается на CPU. Явно передайте device_map="neuron" в from_pretrained() или device="neuron" в Pipeline.

Передавайте входные данные для генерации на CPU, а не вызывайте .to(model.device). generate() перемещает на устройство Neuron только те тензоры, которые потребляет forward. Тензоры, растущие на каждом шаге (выходная последовательность, attention_mask), остаются на CPU, благодаря чему скомпилированный граф остаётся стабильным. generate возвращает результат на том же устройстве, что и входные данные. Подробнее см. в разделе Keep generation tensors on CPU.

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="neuron"
)

# leave the inputs on CPU
inputs = tokenizer("The French Bread Law states", return_tensors="pt")
output = model.generate(
    **inputs, do_sample=False, max_new_tokens=50, cache_implementation="static"
)
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

При использовании статического кэша generate() автоматически компилирует прямой проход с помощью torch.compile на Neuron. Передайте disable_compile=True в generate(), чтобы отключить эту функцию.

Обучение с помощью Trainer

TrainingArguments определяет Neuron и автоматически устанавливает устройство в neuron. Все поколения Trainium поддерживают bf16.

from transformers import TrainingArguments

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

Компиляция модели

Установите torch_compile=True, чтобы обернуть модель в torch.compile. Это компилирует прямой проход модели, при этом шаг оптимизатора выполняется в режиме eager. TrainingArguments автоматически устанавливает torch_compile_backend в "neuron" при обнаружении Neuron.

from transformers import TrainingArguments

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

Каждая новая форма входных данных запускает новую компиляцию. Выровняйте входные данные до фиксированной длины (padding="max_length" в токенизаторе) и установите dataloader_drop_last=True, чтобы последний батч не имел другого размера.

Распределённое обучение

Neuron поддерживает распределённый API Transformers. Создайте DistributedConfig с нужными размерами параллелизма и передайте его в from_pretrained(). Transformers разбивает модель на части при загрузке, а Trainer использует её как есть.

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=2),
)

Запустите скрипт с помощью torchrun.

torchrun --nproc_per_node=4 train.py

См. Tensor parallelism, Expert parallelism и FSDP для доступных вариантов.

Ограничения

  • device_map="auto" загружает модель на CPU вместо Neuron. Явно передайте device_map="neuron".
  • Динамические формы вызывают повторную компиляцию. Генерация и обучение замедляются, если формы входных данных меняются от шага к шагу. Используйте статический кэш для генерации и фиксированную длину отступов (padding) для обучения.
Update on GitHub