Продвинутое обучение
Тема дорожной карты · Глубокое обучение
Продвинутые техники обучения представляют собой набор инструментов, которые используются для повышения производительности и эффективности модели. Они становятся особенно важными, когда базовые методы обучения уже достигли предела своих возможностей. Эти техники помогают ускорить процесс обучения, улучшить качество модели и позволить обучать модели, которые не помещаются в памяти одного устройства. Продвинутое обучение обеспечивает возможность достижения лучших результатов в условиях ограниченных ресурсов.
Как это работает
Продвинутое обучение включает в себя использование mixed precision (torch.cuda.amp), что позволяет оптимизировать использование памяти и ускорить процесс обучения, уменьшая вычислительную сложность. Mixed precision обучает модель с использованием FP16 для операций, но сохраняет FP32 для аккумуляции, что позволяет значительно ускорить обучение, сохраняя при этом точность вычислений.
Для распределённого обучения используются методы, такие как DDP (Data Parallel), FSDP (Fully Sharded Data Parallel) и DeepSpeed, которые позволяют распределить модель по нескольким GPU для обучения. Это особенно полезно, когда модель слишком большая для одного устройства.
Самообучение (self-supervised learning) — это метод обучения, который использует неотмеченные данные для предобучения модели, что позволяет ей лучше обрабатывать отмеченные данные. Примеры методов самообучения включают SimCLR, BYOL, DINO и MAE.
Когда применять
Продвинутое обучение особенно полезно, когда базовые методы обучения достигают предела своих возможностей. Mixed precision (torch.cuda.amp) или accelerator="auto" в Lightning могут быть использованы для ускорения обучения без потери качества на современных GPU (Ampere+).
Распределённое обучение с использованием DDP (Data Parallel) становится необходимым, когда модель не помещается на одном устройстве. FSDP/DeepSpeed становятся актуальными, когда модели становятся слишком большими для одного устройства и требуется эффективное распределение данных и параметров по нескольким GPU.
Самообучение предобучает модель на неотмеченных данных, что особенно полезно при работе с большими объемами данных. Однако, если объем данных мал, то использование предобученных моделей может быть более эффективным.
Типичные ошибки
Одной из распространённых ошибок при использовании mixed precision является появление NaN (Not a Number) значений в loss функции из-за использования FP16. Это может быть исправлено с использованием BF16 (Brain Floating Point 16), если оборудование поддерживает его.
При использовании DDP (Data Parallel) могут возникнуть проблемы с несогласованным генератором случайных чисел (RNG) между rank, что может привести к разным аугментациям и, следовательно, к разным градиентам.
Использование FSDP без активационного checkpointing может привести к исчерпанию памяти (OOM) на больших моделях.
Самообучение на малых объемах данных может привести к неэффективному использованию вычислительных ресурсов.