Checkpoint (англ. checkpoint, «контрольная точка») в обучении моделей — это сохранённый снимок состояния обучения, который нужен для продолжения тренировки после остановки, выбора лучшей версии модели или восстановления весов. Важно, что термин неоднозначен: в разных фреймворках под ним могут понимать набор весов, более полный снимок с состоянием оптимизатора, шардированный распределённый снимок или, отдельно, activation checkpointing — технику экономии памяти, а не файл с моделью.
Практически это означает одно: если вы хотите возобновить обучение, вам обычно нужен не просто файл с весами, а checkpoint, где сохранены и служебные данные обучения. Если вам нужен только инференс или перенос модели, достаточно может быть и более узкого формата, например сохранённых весов и конфига.
Английский термин: checkpoint. Также встречается: training checkpoint, model checkpoint, snapshot, чекпойнт, контрольная точка обучения. Не путать: activation checkpointing — это отдельный термин про повторный прогон части forward во время backward для экономии памяти.
Простыми словами
Грубо говоря, checkpoint можно представить как автосохранение в редакторе или точку сохранения в игре. Если процесс обучения прервался, вы не начинаете заново, а возвращаетесь к ближайшему сохранённому состоянию.
Но в ML это «сохранение» бывает разной глубины. Иногда вы сохраняете только то, как сейчас выглядят веса модели. А иногда — весь контекст обучения: веса, состояние оптимизатора, номер эпохи, текущий loss и другие поля, чтобы продолжить обучение почти с того же места.
Как это работает
Общая механика у разных фреймворков похожа, но детали отличаются.
- Код создаёт объекты обучения: модель, оптимизатор и связанные переменные.
- Во время обучения через заданные интервалы сохраняется снимок состояния.
- В этот снимок обычно попадают веса модели и, в полноценном training checkpoint, состояние оптимизатора и служебные поля вроде
epochиloss. - Если процесс прерывается, код заново создаёт нужные объекты и загружает сохранённое состояние.
- После восстановления обучение продолжается дальше или выбирается лучшая сохранённая версия.
[код создаёт model + optimizer]
|
v
[обучение: forward -> loss -> backward -> update]
|
v
[периодическое сохранение checkpoint]
|
+--------+--------+
| |
v v
[продолжать] [сбой/остановка]
|
v
[заново создать те же объекты]
|
v
[restore из checkpoint]
|
v
[продолжить обучение или взять лучшую версию]
В TensorFlow checkpoint хранит точные значения tf.Variable, но не описание вычислительного графа. Поэтому восстановление полезно только тогда, когда у вас есть исходный код, который создаёт те же объекты. Через tf.train.Checkpoint сохраняется объектный граф зависимостей между Layer, Optimizer и Variable, а CheckpointManager помогает управлять несколькими контрольными точками.
В PyTorch типичный general checkpoint — это словарь, где обычно сохраняют model_state_dict, optimizer_state_dict, epoch, loss и другие поля. Такой формат нужен именно для возобновления обучения, а не только для восстановления весов.
В распределённом обучении PyTorch предлагает torch.distributed.checkpoint: шардированные checkpoint могут сохраняться и загружаться параллельно по нескольким rank, а при загрузке поддерживается resharding. Это полезно, когда состояние модели не помещается в один удобный файл или когда конфигурация запуска изменилась.
В экосистеме Hugging Face Transformers есть два соседних сценария. Во время fine-tuning Trainer умеет автоматически сохранять checkpoint по ходу обучения и поддерживает параметры вроде save_strategy и load_best_model_at_end. Отдельно метод save_pretrained() сохраняет модель и конфиг; по умолчанию в документации указаны max_shard_size='5GB' и safe_serialization=True.
Где применяется
1. Возобновление обучения после прерывания
Это самый прямой сценарий. Если training остановился, checkpoint позволяет не запускать всё с нуля, а восстановить состояние модели и, при наличии нужных полей, продолжить обучение.
2. Хранение нескольких версий модели
Одна модель во время обучения проходит через много состояний. Поэтому полезно хранить несколько checkpoint и затем выбрать нужную версию — например, лучшую сохранённую модель в конце обучения. В TensorFlow для этого есть CheckpointManager, а в Transformers Trainer — автоматическое сохранение и опция load_best_model_at_end.
3. Большие распределённые запуски
Когда обучение идёт на нескольких rank, удобнее сохранять состояние не как один монолитный файл, а как шардированный distributed checkpoint. В PyTorch это отдельный механизм с параллельным сохранением и загрузкой, плюс с поддержкой resharding при восстановлении.
4. Перенос модели в экосистеме Transformers
Если задача не в продолжении обучения, а в переносе или публикации модели, рядом с понятием checkpoint часто используют save_pretrained(). Это смежный, но не тождественный случай: метод сохраняет модель и конфиг, а не обязательно полный training state.
Практический пример
Ниже — минимальный шаблон general checkpoint в стиле документации PyTorch. Он показывает идею: для продолжения обучения сохраняются не только веса модели, но и состояние оптимизатора, номер эпохи и loss.
import torch
checkpoint_path = 'path/to/checkpoint'
# Сохранение
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}, checkpoint_path)
# Восстановление
checkpoint = torch.load(checkpoint_path)
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
start_epoch = checkpoint['epoch'] + 1
loss = checkpoint['loss']
Здесь важна не форма словаря сама по себе, а принцип. Названия ключей вроде model_state_dict и optimizer_state_dict в документации показаны как типичный паттерн, но checkpoint не является универсальным межфреймворковым форматом.
Отдельное практическое замечание по безопасности: в основной документации PyTorch указано, что начиная с версии 2.6 torch.load() по умолчанию использует weights_only=True, если не передан pickle_module. Это изменение сделано для снижения рисков при загрузке небезопасных файлов, поэтому загрузку старых или недоверенных checkpoint стоит сверять с текущей документацией проекта.
Чем отличается от похожих терминов
| Термин | Что хранится или происходит | Для чего подходит | Ключевое отличие |
|---|---|---|---|
| Training checkpoint | Обычно веса модели, состояние оптимизатора, epoch, loss и другие поля |
Возобновление обучения, откат к прошлому состоянию, выбор версии модели | Это снимок именно процесса обучения, а не только самой модели |
| Сохранённые веса / модель + конфиг | Веса модели; в Transformers через save_pretrained() — модель и конфиг, по умолчанию с шардированием и безопасной сериализацией |
Перенос модели, повторная загрузка, инференс | Этого может не хватить для полноценного продолжения обучения с тем же состоянием оптимизатора |
| Distributed checkpoint | Шардированный снимок, сохраняемый и загружаемый параллельно по нескольким rank | Крупные распределённые запуски | Это не «другой смысл» слова checkpoint, а его специальная форма для distributed-сценариев |
| Activation checkpointing | Не файл, а повторный прогон части forward во время backward | Экономия памяти при обучении | Термин похожий, но речь идёт о вычислительной технике, а не о сохранении модели на диск |
Ограничения и заблуждения
- Заблуждение: checkpoint — это всегда один и тот же формат. На практике: значение термина зависит от фреймворка и сценария.
- Заблуждение: если сохранены веса, обучение всегда можно продолжить с того же места. На практике: для этого обычно нужен и state оптимизатора, а также служебные поля вроде
epochиloss. - Заблуждение: TensorFlow checkpoint самодостаточен. На практике: он хранит значения
tf.Variable, но не описание вычислительного графа; нужен исходный код, который создаёт те же объекты. - Заблуждение: distributed checkpoint — это просто большой обычный файл. На практике: в PyTorch он может быть шардирован и загружаться с resharding.
- Заблуждение: activation checkpointing — это файл checkpoint. На практике: это техника снижения памяти за счёт дополнительного пересчёта во время обратного распространения.
- Ограничение версий: форматы файлов, расширения и значения по умолчанию зависят от версии TensorFlow, PyTorch и Transformers, поэтому рабочий рецепт всегда нужно сверять с документацией вашей версии.
Практический вывод: называйте checkpoint только тот артефакт, который решает вашу задачу. Для рестарта обучения сохраняйте не только веса, но и состояние оптимизатора и служебные поля. Для обмена моделью или инференса часто достаточно более узкого сохранения модели и конфига.
Редакционное ограничение: статья описывает только те значения термина checkpoint, которые подтверждены официальной документацией TensorFlow, PyTorch, Hugging Face Transformers и статьёй про activation checkpointing по состоянию на 2026-08-14.
Связанные термины и темы
Если вы разбираетесь с checkpoint, дальше логично освежить Backpropagation (обратное распространение) — именно вокруг цикла forward/backward работает activation checkpointing. Для облегчённых сценариев адаптации модели вместо полного дообучения полезно сравнить подход с Prompt tuning (мягкий промпт). А чтобы понять, как результаты обучения затем проявляются в поведении модели на выводе, посмотрите также Alignment (согласование ИИ) и Zero-shot prompting.
Источники
- Training checkpoints | TensorFlow Core
- tf.train.Checkpoint | TensorFlow v2.16.1
- Saving and Loading Models — PyTorch Tutorials 2.13.0+cu130 documentation
- Serialization semantics — PyTorch main documentation
- Distributed Checkpoint – torch.distributed.checkpoint — PyTorch main documentation
- Models | Transformers
- Fine-tuning | Hugging Face Transformers
- Training Deep Nets with Sublinear Memory Cost
Вопросы и ответы
Checkpoint и веса модели — это одно и то же?
Не всегда. Полноценный training checkpoint обычно шире: кроме весов, он может включать состояние оптимизатора, epoch, loss и другие поля, нужные для продолжения обучения.
Можно ли продолжить обучение, если сохранены только веса?
Иногда можно восстановить модель как объект для дальнейшей работы, но это не то же самое, что продолжить training с тем же внутренним состоянием. Для такого сценария обычно нужен более полный checkpoint.
Почему TensorFlow checkpoint без исходного кода недостаточен?
Потому что TensorFlow checkpoint сохраняет точные значения tf.Variable, но не описание вычислительного графа. Чтобы восстановление имело смысл, код должен заново создать те же объекты.
Что такое activation checkpointing?
Это не файл с моделью, а техника экономии памяти: часть вычислений forward не хранится целиком, а затем повторно вычисляется во время backward.
Зачем хранить несколько checkpoint во время обучения?
Чтобы не зависеть от одной точки восстановления и иметь возможность выбрать нужную сохранённую версию. В официальных инструментах для этого есть специальные механизмы управления несколькими checkpoint.