GPU, ускорители и инфраструктура LLM

Пересчёт активаций

Определение

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

Также ищут: Activation checkpointing · Gradient checkpointing

Зачем это знать

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

Связи из словаря

Карта понятия

Доказательная часть

Что подтверждено

  1. В PyTorch activation checkpointing обменивает вычисления на память: в выбранном участке прямого прохода часть тензоров, нужных для вычисления градиентов, не сохраняется, а вычисляется заново во время обратного прохода.

    Граница применимости: Документированный API torch.utils.checkpoint в PyTorch 2.9. Утверждение относится к промежуточным тензорам выбранного участка, сохраняемым для обратного прохода; оно не обещает сокращения памяти под параметры, состояние оптимизатора или пикового объёма всего шага.

  2. Документация PyTorch 2.9 рекомендует явно передавать use_reentrant=False. В режиме use_reentrant=False early_stop=True по умолчанию прекращает повторное выполнение участка, когда пересчитаны все нужные тензоры; настройку также может переопределить set_checkpoint_early_stop. Для use_reentrant=True early_stop игнорируется.

    Граница применимости: Рекомендация и семантика относятся к torch.utils.checkpoint в PyTorch 2.9. В исходном коде v2.9.1 пропуск use_reentrant приводит к предупреждению и выбору True; утверждение не повторяет документированное обещание исключения при пропуске параметра.

  3. При обычном исполнении без torch.compile PyTorch по умолчанию сохраняет и восстанавливает состояние своего генератора на CPU, даже если среди аргументов нет CPU-тензоров. Для входных тензоров на других устройствах сохраняются состояния одного типа: CUDA имеет приоритет, иначе выбирается первый обнаруженный тип. Остальные типы не охвачены; при случайных операциях это может дать неверные градиенты. preserve_rng_state=False отключает сохранение и восстановление этих состояний.

    Граница применимости: API PyTorch 2.9 и реализация v2.9.1. Дополнительный тип определяют по тензорам не на CPU; если таких аргументов нет, используется DefaultDeviceType. Новые устройства внутри функции и сторонние генераторы не получают общей гарантии восстановления. Под torch.compile флаг preserve_rng_state=False не отключает сохранение RNG.

  4. При use_reentrant=False проверка determinism_check='default' сравнивает метаданные сохранённых и повторно вычисленных тензоров; отдельно реализация v2.9.1 проверяет совпадение их количества. Ни одна из этих проверок не сравнивает численные значения тензоров или градиенты. Если функция зависит от глобального состояния, изменившегося между проходами, градиенты могут незаметно оказаться неверными.

    Граница применимости: Документация PyTorch 2.9 описывает сравнение формы, типа данных и устройства и предупреждает о различии прямого и обратного вызовов из-за глобальных переменных. Исходный код v2.9.1 дополнительно проверяет количество сохранённых тензоров. Эта проверка не подтверждает равенство значений или градиентов.

Граница терминов

Не путать

Пересчёт активаций Распределённое сохранение состояния PyTorch (DCP)

Пересчёт активаций повторно выполняет часть прямого прохода ради сокращения хранения промежуточных тензоров в обучении. DCP сохраняет и загружает переданное состояние обучения. Эти механизмы решают разные задачи: пересчёт активаций сам по себе не создаёт контрольную точку для восстановления после перезапуска.

Перед спецификацией

Что проверить

  1. Явно укажите use_reentrant=False и проверьте, подходит ли выбранный участок для повторного выполнения в обратном проходе.
  2. Если участок использует случайные операции, проверьте типы устройств и переносы внутри функции: сохранение случайного состояния не охватывает все устройства и все генераторы приложения.
  3. Не считайте determinism_check="default" проверкой значений тензоров или градиентов. Сравните их с контрольным запуском, особенно при изменяемом состоянии функции.
  4. После изменения измерьте полный шаг и пиковую память на целевой конфигурации. Не выводите из пересчёта активаций, что сохранены параметры, состояние оптимизатора или данные для возобновления обучения.
Открытые основания

Первоисточники

  • Документация3
  • Официальная документация
    torch.utils.checkpoint PyTorch · PyTorch 2.9 · проверено

    Пересчёт промежуточных результатов при вычислении градиентов экономит память активаций. Документация описывает условия корректности и работу со случайными числами.

    Утверждения: 01 · 02 · 03 · 04

  • Официальная документация
    torch.utils.checkpoint — исходный код PyTorch · PyTorch v2.9.1 · проверено

    Исходный код из тега v2.9.1: поведение use_reentrant при пропуске, сохранение RNG для типов устройств и проверки числа тензоров и их метаданных.

    Утверждения: 02 · 03 · 04

  • Официальная документация
    Distributed Checkpoint — torch.distributed.checkpoint PyTorch · PyTorch 2.9 · проверено

    Официальная документация PyTorch 2.9: параллельное сохранение локальных фрагментов, переразложение при загрузке, входное состояние, условия загрузки и отсутствие гарантии обратной совместимости сохранённых state_dict между версиями PyTorch.

Карта знаний

Связанные понятия

Из знания — в навык

Курсы по теме

В каталоге

  • Подобрать GPU для обучения — Включив пересчёт, измерьте пик памяти и длительность полного шага на выбранной GPU: меньше хранимых активаций не доказывает, что памяти хватит и обучение уложится в срок.
Подтвердите действие