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 он сотрудничает с израильским сообществом высоких технологий, чтобы решать реальные проблемы с помощью технологий, меняющих правила игры, которые затем документируются, публикуются в открытом доступе и передаются остальному миру.