Transformers documentation
Доработка
Доработка
Дообучение — это продолжение обучения большой предобученной модели на более небольшом наборе данных, специфичном для конкретной задачи или области. Например, дообучение на наборе данных с примерами кода помогает модели лучше справляться с написанием кода. Дообучение идентично предобучению, за исключением того, что вы не начинаете с случайных весов. Кроме того, оно требует значительно меньше вычислительных ресурсов, данных и времени.
В приведённом ниже руководстве показано, как выполнять дообучение большой языковой модели с помощью 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.
num_train_epochsиper_device_train_batch_sizeуправляют длительностью обучения и размером батча.learning_rateзадаёт начальную скорость обучения для оптимизатора.
- Установите
bf16=Trueдля быстрого обучения с смешанной точностью, если ваше оборудование это поддерживает (GPU Ampere и новее). В противном случае используйтеfp16=Trueна более старом оборудовании. gradient_accumulation_stepsимитирует более крупный эффективный размер батча, накапливая градиенты на протяжении нескольких проходов вперёд перед обновлением весов.gradient_checkpointingэкономит память за счёт вычислений, пересчитывая промежуточные активации на этапе обратного распространения вместо их хранения. Для компромисса между памятью и скоростью см. частичное checkpointing.- Если
gradient_checkpointing=True, установитеgradient_checkpointing_kwargs={"offload": True}, чтобы сохранять активации в закреплённой памяти хоста и снижать потребление памяти GPU для длинных последовательностей. См. выгрузка сохранённых активаций для описания компромиссов. - Установите
train_sampling_strategy="group_by_length", чтобы группировать примеры с близкой длиной и уменьшать количество padding. См. group samples by length для мультимодальных наборов данных на основе процессоров и предвычисленных длин.
eval_strategyиsave_strategyопределяют, когда во время обучения оценивать модель и когда сохранять контрольную точку.load_best_model_at_endзагружает лучшую контрольную точку по завершении обучения. Для этого необходимо установитьeval_strategy.
logging_stepsуправляет частотой обновления и возврата значения loss во время обучения.
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, чтобы найти дополнительные примеры обучения для различных задач в области текста, аудио, зрения и мультимодальности.