TL; DR: В этом посте показано, как подключить ведение журнала PyTorch Lightning к Azure ML с помощью ML Flow.
Полные сквозные реализации можно найти в официальном репозитории машинного обучения Azure на GitHub.
Если вы новичок в Azure, вы можете оформить бесплатную подписку, перейдя по ссылке ниже.
Azure ML и освещение PyTorch
В моем последнем посте на эту тему я описал преимущества как PyTorch Lightning, так и Azure ML для упрощения обучения моделям глубокого обучения. Если вы еще не попробовали!
После того, как вы обучили свою первую распределенную модель освещения PyTorch с помощью Azure ML, пора добавить ведение журнала.
Почему мы заботимся о регистрации?
Журналы имеют решающее значение для устранения неполадок и отслеживания производительности моделей машинного обучения. Поскольку мы часто обучаемся на удаленных кластерах, журналы предоставляют простой механизм для четкого понимания того, что происходит на каждом этапе разработки нашей модели.
В отличие от простых операторов печати, журналы имеют отметку времени, могут быть отфильтрованы по серьезности и используются Azure ML для визуализации критических показателей во время обучения, проверки и тестирования. Ведение журнала метрик с помощью Azure ML также является необходимым условием для использования службы Azure ML HyperDrive, чтобы помочь найти оптимальные конфигурации модели.
Ведение журнала - прекрасная демонстрация того, как PyTorch Lighting и Azure ML сочетаются, чтобы упростить обучение вашей модели, просто используя Lightning, мы можем сэкономить десятки строк кода PyTorch в нашем приложении, зарабатывая удобочитаемость в процессе.
Ведение журнала с помощью PyTorch Lighting
В обычном PyTorch отслеживание и поддержка кода журналирования может очень быстро усложниться.
Фреймворки и службы машинного обучения, такие как Azure ML, Tensor Board, TestTube, Neptune.ai и Comet ML, имеют свои собственные уникальные API ведения журналов. Это означает, что инженерам машинного обучения часто необходимо вести несколько записей журнала на каждом этапе обучения, проверки и тестирования.
PyTorch Lighting упрощает этот процесс, предоставляя унифицированный интерфейс ведения журналов, который поставляется с готовой поддержкой самых популярных API-интерфейсов ведения журналов машинного обучения.
Несколько регистраторов можно даже объединить в цепочку, что значительно упрощает ваш код.
from pytorch_lightning.loggers import TensorBoardLogger, TestTubeLogger logger1 = TensorBoardLogger('tb_logs', name='my_model') logger2 = TestTubeLogger('tb_logs', name='my_model') trainer = Trainer(logger=[logger1, logger2])
После того, как регистраторы предоставляются тренеру PyTorch Lighting, к ним можно получить доступ в любом lightning_module_function_or_hook за пределами __init__.
class MyModule(LightningModule): def some_lightning_module_function_or_hook(self): some_img = fake_image() # Option 1 self.logger.experiment[0].add_image('generated_images', some_img, 0) # Option 2 self.logger[0].experiment.add_image('generated_images', some_img, 0)
Ведение журнала Azure ML с PyTorch Lighting с ML Flow
Поскольку Azure ML имеет встроенную интеграцию с ML Flow, мы можем воспользоваться модулем ML Flow Logger в PyTorch Lighting, чтобы получить собственные визуализации метрик во время нескольких запусков экспериментов и использовать гипердвигатель с очень незначительными изменениями в нашем обучающем коде.
Ниже я обрисую код, необходимый для использования преимуществ ведения журнала Azure ML с PyTorch Lightning.
Шаг # 1 Окружающая среда
Добавьте пакеты PyTorch Lighting, Azure ML и ML Flow в среду выполнения.
pip - azureml-defaults - mlflow - azureml-mlflow - pytorch-lightning
Шаг № 2 Получите контекст выполнения Azure ML и URL-адрес отслеживания потока машинного обучения
from azureml.core.run import Run run = Run.get_context() mlflow_url = run.experiment.workspace.get_mlflow_tracking_uri()
Шаг № 3: инициализация PyTorch Lighting MLFlow Logger и Link Run.id
mlf_logger = MLFlowLogger(experiment_name=run.experiment.name, tracking_uri=mlflow_url) mlf_logger._run_id = run.id
Шаг # 4 Добавьте операторы ведения журнала в PyTorch Lighting хуки training_step, validation_step и test_step
def training_step(self, batch, batch_idx): # Calculate train loss here self.log("train_loss", loss) # return test loss def validation_step(self, batch, batch_idx): # Calculate validation loss here self.log("val_loss", loss) # return test loss def test_step(self, batch, batch_idx): # Calculate test loss here self.log("test_loss", loss) # return test loss
Шаг # 5 Добавьте ML Flow Logger в PyTorch Lightning Trainer
trainer = pl.Trainer.from_argparse_args(args) trainer.logger = mlf_logger # enjoy default logging implemented by pl!
И вот оно!
Теперь, когда вы отправляете свой сценарий поезда PyTorch Lighting, вы будете получать визуализации в реальном времени и входные данные HyperDrive во время обучения, проверки и тестирования с долей обычного необходимого кода.
Вы не должны, но если у вас возникнут проблемы, дайте мне знать в комментариях.
Следующие шаги
В следующем посте я покажу вам, как настроить многоузловое распределенное обучение с PyTorch и Azure ML с использованием экземпляров вычислений с низким приоритетом, чтобы минимизировать затраты на обучение на порядок.
Благодарности
Я хочу поблагодарить Минна Сяо и Алекс Денг из команды Azure ML за их поддержку и приверженность работе над улучшением взаимодействия с разработчиками с помощью платформ с открытым исходным кодом, таких как PyTorch Lighting в Azure.
об авторе
Аарон (Ари) Борнштейн - исследователь искусственного интеллекта, увлеченный историей, занимающийся новыми технологиями и вычислительной медициной. В качестве инженера с открытым исходным кодом в команде Microsoft Cloud Developer Advocacy он сотрудничает с израильским сообществом высоких технологий, чтобы решать реальные проблемы с помощью технологий, меняющих правила игры, которые затем документируются, публикуются в открытом доступе и передаются остальному миру.