{/ Эта страница автоматически создается на основе файла SKILL.md навыка с помощью сайта site/scripts/generate-skill-docs.py. Редактируйте исходный код SKILL.md, а не эту страницу. /}
Молния Пайторча
Высокоуровневая структура PyTorch с классом Trainer, автоматическим распределенным обучением (DDP/FSDP/DeepSpeed), системой обратных вызовов и минимальным шаблоном. Масштабируется от ноутбука до суперкомпьютера с тем же кодом. Используйте, если вам нужны чистые циклы обучения со встроенными лучшими практиками.
Метаданные навыков
Источник
Необязательно — установите с помощью hermesskills installofficial/mlops/pytorch-lightning
Ниже приведено полное определение навыка, которое Гермес загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навык активен.
PyTorch Lightning — платформа обучения высокого уровня
Быстрый старт
PyTorch Lightning организует код PyTorch, устраняя шаблонность и сохраняя при этом гибкость.
Установка:
pipinstalllightning
Преобразование PyTorch в Lightning (3 шага):
importlightningasLimporttorchfromtorchimportnnfromtorch.utils.dataimportDataLoader,Dataset# Step 1: Define LightningModule (organize your PyTorch code)classLitModel(L.LightningModule):def__init__(self,hidden_size=128):super().__init__()self.model=nn.Sequential(nn.Linear(28*28,hidden_size),nn.ReLU(),nn.Linear(hidden_size,10))deftraining_step(self,batch,batch_idx):x,y=batchy_hat=self.model(x)loss=nn.functional.cross_entropy(y_hat,y)self.log('train_loss',loss)# Auto-logged to TensorBoardreturnlossdefconfigure_optimizers(self):returntorch.optim.Adam(self.parameters(),lr=1e-3)# Step 2: Create datatrain_loader=DataLoader(train_dataset,batch_size=32)# Step 3: Train with Trainer (handles everything else!)trainer=L.Trainer(max_epochs=10,accelerator='gpu',devices=2)model=LitModel()trainer.fit(model,train_loader)
Вот и все! Тренер обрабатывает:
- Переключение графического процессора/ТПУ/ЦП
- Распределенное обучение (DDP, FSDP, DeepSpeed)
- Смешанная точность (FP16, BF16)
- Накопление градиента
- Контрольно-пропускной пункт
- Ведение журнала
- Индикаторы прогресса
Преимущества: более 40 строк → 15 строк, отсутствие управления устройствами, автоматическое распределение
Рабочий процесс 2: Проверка и тестирование
classLitModel(L.LightningModule):def__init__(self):super().__init__()self.model=MyModel()deftraining_step(self,batch,batch_idx):x,y=batchy_hat=self.model(x)loss=nn.functional.cross_entropy(y_hat,y)self.log('train_loss',loss)returnlossdefvalidation_step(self,batch,batch_idx):x,y=batchy_hat=self.model(x)val_loss=nn.functional.cross_entropy(y_hat,y)acc=(y_hat.argmax(dim=1)==y).float().mean()self.log('val_loss',val_loss)self.log('val_acc',acc)deftest_step(self,batch,batch_idx):x,y=batchy_hat=self.model(x)test_loss=nn.functional.cross_entropy(y_hat,y)self.log('test_loss',test_loss)defconfigure_optimizers(self):returntorch.optim.Adam(self.parameters(),lr=1e-3)# Train with validationtrainer=L.Trainer(max_epochs=10)trainer.fit(model,train_loader,val_loader)# Testtrainer.test(model,test_loader)
Автоматические функции:
- Проверка выполняется каждую эпоху по умолчанию.
- Метрики регистрируются в TensorBoard.
- Лучшая модель контрольной точки на основе val_loss
Рабочий процесс 3: Распределенное обучение (DDP)
# Same code as single GPU!model=LitModel()# 8 GPUs with DDP (automatic!)trainer=L.Trainer(accelerator='gpu',devices=8,strategy='ddp'# Or 'fsdp', 'deepspeed')trainer.fit(model,train_loader)
Запуск:
# Single command, Lightning handles the rest
pythontrain.py
Изменений не требуется:
- Автоматическое распространение данных
- Синхронизация градиента
- Поддержка нескольких узлов (просто установите num_nodes=2)
Рабочий процесс 4: обратные вызовы для мониторинга
fromlightning.pytorch.callbacksimportModelCheckpoint,EarlyStopping,LearningRateMonitor# Create callbackscheckpoint=ModelCheckpoint(monitor='val_loss',mode='min',save_top_k=3,filename='model-{epoch:02d}-{val_loss:.2f}')early_stop=EarlyStopping(monitor='val_loss',patience=5,mode='min')lr_monitor=LearningRateMonitor(logging_interval='epoch')# Add to Trainertrainer=L.Trainer(max_epochs=100,callbacks=[checkpoint,early_stop,lr_monitor])trainer.fit(model,train_loader,val_loader)
Результат:
- Автоматически сохраняет 3 лучшие модели
- Останавливается раньше, если нет улучшений в течение 5 эпох.
- Регистрирует скорость обучения в TensorBoard.
Используйте PyTorch Lightning, когда:
- Хотите чистый, организованный код
- Нужны готовые к использованию циклы обучения.
- Переключение между одним графическим процессором, несколькими графическими процессорами, TPU
- Хотите встроенные обратные вызовы и журналирование
- Взаимодействие в команде (стандартизированная структура)
Основные преимущества:
- Организованно: отделяет исследовательский код от инженерного.
- Автоматический: DDP, FSDP, DeepSpeed с 1 линией
– Обратные вызовы: модульные расширения обучения.
- Воспроизводимость: меньше шаблонов = меньше ошибок.
- Протестировано: более 1 млн загрузок в месяц, проверено в боевых условиях.
Вместо этого используйте альтернативы:
- Ускорение: минимальные изменения в существующем коде, большая гибкость.
- Ray Train: многоузловая оркестровка, настройка гиперпараметров.
- Raw PyTorch: максимальный контроль, цели обучения.
- Keras: экосистема TensorFlow.
Распространенные проблемы
Проблема: потери не уменьшаются
Проверьте данные и настройку модели:
# Add to training_stepdeftraining_step(self,batch,batch_idx):ifbatch_idx==0:print(f"Batch shape: {batch[0].shape}")print(f"Labels: {batch[1]}")loss=...returnloss
Проблема: недостаточно памяти
Уменьшите размер пакета или используйте накопление градиента:
Проблема: DDP неожиданно запускает несколько процессов
Lightning автоматически определяет графические процессоры. Явно заданные устройства:
# Test on CPU firsttrainer=L.Trainer(accelerator='cpu',devices=1)# Then GPUtrainer=L.Trainer(accelerator='gpu',devices=1)
Расширенные темы
Обратные вызовы: см. references/callbacks.md для получения информации о EarlyStopping, ModelCheckpoint, пользовательских обратных вызовах и перехватчиках обратного вызова.
Распределенные стратегии: см. references/distributed.md для DDP, FSDP, интеграции DeepSpeed ZeRO, настройки нескольких узлов.