TRL 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 (v1.17.1).
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. Тренировщики TRL запускаются на нём без изменения кода. Neuron компилирует граф для каждой формы входных данных, которую он встречает, и каждая компиляция занимает около минуты, поэтому большая часть этой страницы посвящена сохранению статичности форм. Для установки и информации о стороне Transformers см. руководство по AWS Trainium для Transformers.

Установка

Установите torch-neuronx, следуя инструкции по настройке AWS Neuron, затем установите TRL в том же окружении.

pip install trl

Надзорная дообучение

Быстрый старт с SFTTrainer работает без изменений:

from datasets import load_dataset
from trl import SFTTrainer

trainer = SFTTrainer(
    model="Qwen/Qwen3-0.6B",
    train_dataset=load_dataset("trl-lib/Capybara", split="train"),
)
trainer.train()

На Neuron значение pad_to_multiple_of по умолчанию равно 128 (его значение "auto"), поэтому последовательности дополняются до кратного 128. Это ограничивает количество форм, а значит, и компиляций, значением max_length / 128. Без этого каждая новая длина последовательности запускает компиляцию. На одном NeuronCore при per_device_train_batch_size=4 20 шагов примера выше занимают 130 с со значением по умолчанию и 260 с при pad_to_multiple_of=None.

То же самое относится к каждому тренеру, у которого есть опция pad_to_multiple_of: DPO, KTO, Reward, GRPO, RLOO и Distillation.

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

Установите torch_compile=True, чтобы скомпилировать модель с бэкендом neuron. Автоматические динамические формы в Dynamo создают графы, которые бэкенд Neuron пока не может скомпилировать (#7660), поэтому отключите их:

import torch
from datasets import load_dataset
from trl import SFTConfig, SFTTrainer

torch._dynamo.config.automatic_dynamic_shapes = False

trainer = SFTTrainer(
    model="Qwen/Qwen3-0.6B",
    args=SFTConfig(torch_compile=True),
    train_dataset=load_dataset("trl-lib/Capybara", split="train"),
)
trainer.train()

Первый шаг занимает около 2 минут на компиляцию. После этого, при per_device_train_batch_size=4, Qwen3-0.6B обучается со скоростью 1.15 с/шаг на одном NeuronCore, тогда как без компиляции — 1.71 с/шаг.

Онлайн-методы

vLLM не работает на Neuron, поэтому GRPO и RLOO генерируют с помощью Transformers. При использовании динамического кэша по умолчанию каждый сгенерированный токен имеет новую форму, и один шаг занимает несколько минут. Используйте статический кэш, который сохраняет формы декодирования фиксированными:

from datasets import load_dataset
from trl import GRPOConfig, GRPOTrainer


# Reward completions close to 200 characters
def reward_len(completions, **kwargs):
    return [-abs(200 - len(completion)) / 100 for completion in completions]


trainer = GRPOTrainer(
    model="Qwen/Qwen3-0.6B",
    reward_funcs=reward_len,
    args=GRPOConfig(
        per_device_train_batch_size=4,
        num_generations=4,
        max_completion_length=128,
        cache_implementation="static",
        model_init_kwargs={"dtype": "bfloat16"},
    ),
    train_dataset=load_dataset("trl-lib/tldr", split="train"),
)
trainer.train()

Промпты также дополняются до pad_to_multiple_of перед генерацией, поэтому статический кэш занимает лишь несколько размеров. Каждый новый размер компилируется примерно 12 минут на одном NeuronCore; после компиляции размера один шаг в этом примере занимает около 25 с.

Статический кэш пока требует модель в bf16: при использовании модели по умолчанию в fp32 ключи и значения оказываются в разных типах данных (#7664).

Параллелизм данных

На инстансе trn2.3xlarge, содержащем один чип Trainium2, конфигурация по умолчанию Logical NeuronCore (LNC=2) объединяет 8 физических NeuronCore чипа в 4 логических NeuronCore.

Для обучения на всех четырёх используйте Accelerate:

accelerate launch --num_processes 4 train.py

В этой конфигурации SFT выполняется в 3,6 раза быстрее на 4 NeuronCore, чем на 1.

Чтобы ограничить выполнение подмножеством NeuronCores, установите NEURON_RT_VISIBLE_CORES в значение 0,1, 2,3 или 0-3. Другие комбинации, например 1,2, не поддерживаются: среда выполнения Neuron не может настроить коллективные операции для них.

Update on GitHub