# Шихар Мурти об обучении LLM: от FP16 до LoRA

Источник: https://www.youtube.com/watch?v=UVX7SYGCKkA
Канал: Stanford Online
Опубликовано: 04.03.2025

---

## Эффективное обучение LLM: от управления памятью до LoRA
[[JUMP:00:05]]

Лекция Шихара Мурти (Shikhar Murty) в рамках курса Stanford CS224N посвящена практическим аспектам обучения больших языковых моделей (LLM) на графических процессорах (GPU). Автор подробно разбирает стратегии снижения потребления видеопамяти и оптимизации процесса дообучения, когда вычислительных ресурсов становится недостаточно для стандартных методов.

### 💾 Представление чисел и смешанная точность (Mixed Precision)
[[JUMP:02:01]]

Эффективное обучение начинается с понимания того, как компьютер оперирует числами и весами нейросетей. По словам Мурти, переход от классического формата FP32 (32 бита) к форматам с пониженной точностью является критически важным.

*   **FP32 (32-bit floating point):** Стандартный формат, требующий 4 байта памяти на параметр. Он обеспечивает широкий динамический диапазон и высокую точность.
*   **FP16 (16-bit floating point):** Позволяет сократить потребление памяти вдвое, однако имеет меньший диапазон и точность, что часто приводит к возникновению значений `0` или `NaN` при вычислениях.
*   **BFloat16 (Brain Float 16):** Лектор настоятельно рекомендует использовать этот формат на современных GPU архитектуры Ampere (H100, A100, A6000). Он обладает тем же динамическим диапазоном, что и FP32, но меньшей точностью, что приемлемо для обучения нейросетей и позволяет избежать использования градиентных скалеров.

Для борьбы с потерей точности при использовании FP16 применяется **смешанная точность (mixed precision training)**: создание копии весов в FP32 (master weights), вычисления в FP16 и последующее обновление master weights с использованием более точных градиентов.

### 🌐 Распределенное обучение на нескольких GPU
[[JUMP:14:09]]

При использовании нескольких GPU задача усложняется необходимостью синхронизации градиентов.

*   **DDP (Distributed Data Parallel):** Стандартный подход, при котором каждый GPU имеет полную копию модели, но обрабатывает свою часть данных. Синхронизация происходит через операцию `all reduce`.
*   **ZeRO (Zero Redundancy Optimizer):** Серия техник, разработанная Microsoft для проекта DeepSpeed, направленная на устранение избыточности в хранении состояния оптимизатора.
    *   **ZeRO Stage 1:** Шардирование состояния оптимизатора (память, momentum, variance) между GPU.
    *   **ZeRO Stage 2:** Дополнительное шардирование градиентов.
    *   **ZeRO Stage 3 (FSDP - Fully Sharded Data Parallel):** Шардирование не только оптимизатора и градиентов, но и самих параметров модели.

Мурти отмечает, что `all reduce` эквивалентен комбинации `reduce scatter` и `all gather`, поэтому ZeRO Stage 1 и 2 позволяют экономить память практически без накладных расходов на коммуникацию. FSDP же требует более сложной стратегии, связанной с операциями `all gather` и `reduce scatter` в процессе прямого и обратного проходов.

### 💡 Параметрически эффективное дообучение (PEFT) и LoRA
[[JUMP:38:04]]

Когда даже использование ZeRO Stage 3 и активационного чекпоинтинга не позволяет уместить модель в память, Мурти предлагает переходить к методам эффективного дообучения.

*   **LoRA (Low-Rank Adaptation):** Метод, основанный на наблюдении, что обновления весов при дообучении обладают низким внутренним рангом (intrinsic rank).
    *   Вместо изменения всей матрицы весов $W_0$ обучаются две маленькие низкоранговые матрицы $A$ и $B$.
    *   **Преимущества:** Значительная экономия памяти, возможность быстрого переключения между задачами путем замены маленьких матриц и низкая задержка вывода (inference latency).
    *   **Рекомендации:** Применять LoRA к матрицам Query и Value в блоках Self-Attention, устанавливая ранг $R=8$ и $\alpha=1$ как базовую точку.

В завершение лекции Мурти приводит алгоритм действий для финальных проектов студентов: всегда использовать mixed precision (желательно BFloat16), начинать с batch size 1, использовать ZeRO Stage 2 для масштабирования, и только при нехватке памяти — подключать FSDP или LoRA.