Transformers documentation

Доработка

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Доработка

Дообучение — это продолжение обучения большой предобученной модели на более небольшом наборе данных, специфичном для конкретной задачи или области. Например, дообучение на наборе данных с примерами кода помогает модели лучше справляться с написанием кода. Дообучение идентично предобучению, за исключением того, что вы не начинаете с случайных весов. Кроме того, оно требует значительно меньше вычислительных ресурсов, данных и времени.

В приведённом ниже руководстве показано, как выполнять дообучение большой языковой модели с помощью Trainer.

Войдите в свой аккаунт Hugging Face с помощью пользовательского токена, чтобы загрузить дообученную модель на Hub.

from huggingface_hub import login

login()

Токенизация

Загрузите набор данных и токенизируйте текстовую колонку, на которой обучается модель (horoscope в наборе данных ниже).

Токенизатор создаёт входные данные модели: input_ids и attention_mask. Метод forward модели принимает только input_ids и attention_mask, поэтому установите remove_columns, чтобы удалить столбцы вроде horoscope после токенизации.

  • Установите truncation=True и укажите max_length, чтобы обрезать более длинные последовательности до заданной максимальной длины.
  • Используйте метод train_test_split, чтобы создать тестовую выборку для оценки модели.
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorForLanguageModeling

model_name = "Qwen/Qwen3-0.6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("karthiksagarn/astro_horoscope", split="train")

def tokenize(batch):
    return tokenizer(
        batch["horoscope"],
        truncation=True,
        max_length=512,
    )

dataset = dataset.map(tokenize, batched=True, remove_columns=dataset.column_names)
dataset = dataset.train_test_split(test_size=0.1)

Коллатор данных собирает примеры из набора данных в батчи для обработки моделью. DataCollatorForLanguageModeling динамически дополняет каждый батч до длины самой длинной последовательности в этом батче, а не дополняет все последовательности в наборе данных до одинаковой длины. Это экономит вычислительные ресурсы и память, так как исключает вычисление лишних токенов дополнения.

  • Установите mlm=False, чтобы избежать случайного маскирования токенов.
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)

Загрузка модели

Загрузите предобученную контрольную точку для дообучения (см. руководство Загрузка моделей для получения подробной информации о загрузке моделей).

  • Установите dtype="auto", чтобы загрузить веса в том типе данных, в котором они сохранены. Без этого параметра PyTorch загружает веса в torch.float32, что удваивает потребление памяти, если исходный тип весов — torch.bfloat16.
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer

model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto")

Конфигурация обучения

TrainingArguments предоставляет все параметры для настройки процесса обучения. Здесь описаны только наиболее часто используемые аргументы. Для остальных параметров заданы разумные значения по умолчанию, либо они актуальны только для специфических сценариев, таких как распределённое обучение. Полный список аргументов см. в документации API TrainingArguments.

длительность обучения
оптимизации обучения
оценка и сохранение контрольных точек
logging
  • num_train_epochs и per_device_train_batch_size управляют длительностью обучения и размером батча. learning_rate задаёт начальную скорость обучения для оптимизатора.
training_args = TrainingArguments(
    output_dir="qwen3-finetuned",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    gradient_checkpointing=True,
    gradient_checkpointing_kwargs={"every_n_layers": 4},
    bf16=True,
    learning_rate=2e-5,
    logging_steps=10,
    eval_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
)

Обучение

Создайте экземпляр Trainer со всеми необходимыми компонентами, затем вызовите train(), чтобы начать обучение.

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    processing_class=tokenizer,
    data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

trainer.train()
trainer.push_to_hub()

push_to_hub() загружает дообученные веса, конфигурацию генерации, токенизатор и конфигурацию модели в Hub.

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

  • Ознакомьтесь с руководством Возможности Trainer, где приведены минимальные рабочие примеры использования распространённых функций Trainer, таких как пользовательские функции потерь, оценка с эффективным использованием памяти, создание контрольных точек и многое другое.
  • Ознакомьтесь с руководством Наследование методов Trainer, чтобы узнать, как наследовать методы Trainer для поддержки новых и пользовательских функций.
  • Ознакомьтесь с руководством Callbacks, чтобы узнать, как подключаться к событиям обучения для ведения журнала, ранней остановки и реализации других пользовательских действий.
  • Ознакомьтесь с руководством Data collators, чтобы узнать, как настроить способ сборки выборок в батчи.
  • Запустите скрипт обучения на арендованном GPU с помощью Hugging Face Jobs.
  • Просмотрите ноутбуки или раздел Resources > Task Recipes, чтобы найти дополнительные примеры обучения для различных задач в области текста, аудио, зрения и мультимодальности.
Update on GitHub