Как организовать эксперименты, испытания, задания и метаданные машинного обучения с помощью Amazon SageMaker и обрести душевное спокойствие

Слово «эксперимент» означает для разных людей разные вещи. Для ученых (и, надеюсь, для строгих специалистов по данным) эксперимент - это эмпирическая процедура, позволяющая определить, соответствует ли результат некоторой гипотезе или противоречит ей. В эксперименте с машинным обучением ваша гипотеза может заключаться в том, что определенный алгоритм (например, деревья с градиентным усилением) лучше альтернатив (таких как случайные леса, SVM, линейные модели). Проведя эксперимент и запустив несколько испытаний, изменяя значения переменных, вы можете собирать данные и интерпретировать результаты, чтобы принять или отклонить свою гипотезу. Ученые называют этот процесс научным методом.

Независимо от того, следуете ли вы научному методу или нет, проводить эксперименты с машинным обучением и управлять ими сложно. Это сложно из-за огромного количества переменных и артефактов, которые нужно отслеживать и управлять. Вот неполный список вещей, которые вы, возможно, захотите отслеживать:

  • Параметры: гиперпараметры, архитектуры моделей, алгоритмы обучения.
  • Задания: задание предварительной обработки, задание обучения, задание постобработки - они потребляют другие ресурсы инфраструктуры, такие как вычислительные ресурсы, сеть и хранилище.
  • Артефакты: обучающие сценарии, зависимости, наборы данных, контрольные точки, обученные модели.
  • Метрики: точность обучения и оценки, потери
  • Данные отладки: веса, смещения, градиенты, потери, состояние оптимизатора.
  • Метаданные: названия экспериментов, пробных версий и заданий, параметры задания (ЦП, графический процессор и тип экземпляра), расположение артефактов (например, корзина S3).

Как разработчик или специалист по обработке данных, последнее, что вы хотите сделать, - это тратить больше времени на управление электронными таблицами или базами данных, чтобы отслеживать эксперименты и связанные объекты и их отношения друг с другом.

Как часто вы пытались выяснить, какой набор данных, сценарии обучения и гиперпараметры модели использовались для модели, которую вы обучили неделю назад? месяц назад? год назад? Вы можете просмотреть свои заметки, контрольные журналы, журналы и коммиты Git и попытаться собрать воедино условия, которые привели к этой модели, но никогда нельзя быть уверенным, что не все было организовано изначально. У меня было несколько разработчиков, которые говорили мне что-то вроде: «Мы не знаем, как воспроизвести нашу производственную модель, человека, который работал над этим, больше нет рядом, но он работает, и мы не хотим». возиться с этим ».

В этой записи блога я расскажу, как определить и организовать свои эксперименты, чтобы не попасть в подобную ситуацию. На примере кода я покажу, как можно проводить эксперименты, отслеживать данные экспериментов и извлекать их для анализа с помощью Amazon SageMaker Experiments. Данные, которые вам нужны о конкретном эксперименте или учебном задании, всегда будут доступны в любой момент, когда вам это нужно, без необходимости ведения бухгалтерии.

Полный пример в записной книжке Jupyter доступен на GitHub: https://github.com/shashankprasanna/sagemaker-experiments-examples.git

Анатомия эксперимента с машинным обучением

Основная проблема с отслеживанием экспериментов с машинным обучением заключается в том, что существует слишком много сущностей, которые необходимо отслеживать, и сложные отношения между ними. Сущности включают параметры, артефакты, задания и отношения, которые могут быть «один-к-одному», «один-ко-многим», «многие-к-одному» между экспериментами, испытаниями и сущностями. Было бы неплохо, если бы вы могли отслеживать все автоматически? Таким образом вы сможете меньше беспокоиться и стать более продуктивным, зная, что ваши эксперименты всегда самодокументируются. Мы и будем использовать именно такой подход.

Начнем с знакомства с несколькими ключевыми понятиями. Я буду возвращаться к ним на протяжении всей статьи, так что это не последнее, что вы о них услышите. Я надеюсь, что представив эти ключевые концепции заранее, вы сможете лучше понять взаимосвязь между экспериментами, испытаниями, пробными компонентами, заданиями, артефактами, метриками и метаданными по мере прохождения примера.

  • Эксперимент с машинным обучением: систематическая процедура проверки гипотезы (например, модель A лучше модели B, гиперпараметры X положительно влияют на ответ Y)
  • Переменные: контролируемые факторы, которые вы изменяете и измеряете реакцию (например, архитектуры моделей, гиперпараметры).
  • Пробная версия: итерация обучения с использованием определенного набора переменных. Набор переменных может быть выбран из исчерпывающего набора взаимодействий переменных (например, архитектура модели, оптимизатор, другие гиперпараметры).
  • Пробные компоненты: различные параметры, задания, наборы данных, модели, метаданные и другие артефакты. Компонент пробной версии может быть связан с пробной версией (например, учебное задание) или быть независимым (например, метаданные).

Свойства эксперимента, пробной и пробной составляющих:

  • Эксперимент уникально характеризуется своей целью или гипотезой.
  • Эксперимент обычно содержит более одного испытания, по одному испытанию для каждого набора переменных.
  • Пробная версия уникально характеризуется набором переменных, взятых из заданного вами пространства переменных.
  • Компонент пробной версии - это любой артефакт, параметр или задание, связанное с конкретной пробной версией.
  • Компонент Trial обычно является частью Trial, но может существовать независимо от эксперимента или испытания.
  • Пробный компонент нельзя напрямую связать с экспериментом. Он должен быть связан с испытанием, которое связано с экспериментом.
  • Пробный компонент может быть связан с несколькими испытаниями. Это полезно для отслеживания наборов данных, параметров и метаданных, общих для всех испытаний в эксперименте.

Эти концепции станут понятнее по мере прохождения примера, поэтому не беспокойтесь, если вы их не запомнили. Мы будем выстраивать каждый шаг, начиная с создания эксперимента.

Управление экспериментами, пробными версиями, заданиями и метаданными машинного обучения с помощью Amazon SageMaker

Лучший способ усвоить концепции, обсуждаемые до сих пор, - это использовать примеры кода и иллюстрации. В этом примере я определю формулировку проблемы, сформулирую гипотезу, создам эксперимент, создам трекеры для отслеживания различных артефактов и параметров, проведу испытания и, наконец, проанализирую результаты. Я сделаю это с помощью экспериментов Amazon SageMaker. Я сделал полный рабочий пример доступным для вас в следующем блокноте Jupyter на GitHub: sagemaker-sizes-examples.ipynb.

Самый быстрый и простой способ запустить этот ноутбук - запустить его в Amazon SageMaker Studio. SageMaker Studio Notebooks позволяет запускать среду записной книжки Jupyter одним щелчком мыши и включает панель отслеживания экспериментов и возможности визуализации, которые упрощают отслеживание ваших экспериментов. Вы также можете запустить это на своем собственном ноутбуке или настольном компьютере с установленными пакетами Amazon SageMaker python SDK и Amazon SageMaker Experiments.

Шаг 1. Сформулируйте гипотезу и проведите эксперимент.

Первый шаг - сформулировать вашу гипотезу. Если вы предпочитаете деловую речь академической речи, вы можете вместо этого указать цель или цель эксперимента. Может возникнуть соблазн «просто попробовать несколько вещей и выбрать лучшее», но небольшое усилие заранее при определении проблемы даст вам душевное спокойствие позже.

Давайте определим пример гипотезы. Ваша гипотеза учитывает ваш опыт в предметной области и любые предварительные исследования или сделанные вами наблюдения. Например:

Гипотеза: если я использую свою пользовательскую модель классификации изображений, она будет обеспечивать более высокую точность по сравнению с моделью ResNet50 в наборе данных CIFAR10.

Эксперимент однозначно определяется своей гипотезой. Сформулировав гипотезу, вы получите четкий путь к разработке эксперимента, выбору правильных переменных и сбору достаточного количества данных, чтобы принять или отклонить эту гипотезу. Используя пакет SDK для экспериментов SageMaker, вы можете определить эксперимент следующим образом. В описание включаю гипотезу своего эксперимента.

Следующий код создает эксперимент SageMaker:

Шаг 2. Определите переменные эксперимента

Эксперимент включает в себя список переменных, которые вы изменяете в нескольких испытаниях. Эти переменные могут быть гиперпараметрами, такими как размер пакета, скорость обучения, оптимизаторы или архитектуры модели, или каким-либо другим фактором, который, по вашему мнению, может повлиять на отклик, то есть точность или потери в нашем примере. В области экспериментального дизайна их также называют контролируемыми факторами.

В нашем примере я хочу проверить эффективность нашей настраиваемой архитектуры нейронной сети, которая, по моему мнению, лучше, чем стандартный ResNet50. Поэтому архитектура модели - это наш первый переменный или контролируемый фактор. Я также хочу изучить влияние других гиперпараметров на отклик - оптимизатора (adam, sgd, rmsprop), эпохи (высокая точность при меньшем количестве эпох). Я могу определить их с помощью следующего кода.

Выход:

Другие гиперпараметры, не участвующие в эксперименте, можно сделать статическими (неизменными для разных испытаний), поэтому я назову их статическими гиперпараметрами.

Примечание. Это не означает, что статические гиперпараметры не влияют на ответ. Это просто означает, что в этом эксперименте вы не контролируете эту переменную. Есть и другие факторы, которые вы не можете контролировать, например, ошибки программного обеспечения, неэффективное распределение ресурсов операционной системой, погода или ваше настроение во время эксперимента. Они называются неконтролируемыми факторами в области экспериментального дизайна.

Шаг 3. Отслеживание экспериментальных наборов данных, статических параметров, метаданных

Прежде чем я начну несколько экспериментальных испытаний и обучающих заданий для каждого из вариантов гиперпараметров на шаге 2, я должен убедиться, что я также отслеживаю артефакты и параметры, общие для всех испытаний.

В этом примере следующие параметры остаются неизменными в ходе испытаний:

  • Статические гиперпараметры (размер партии, скорость обучения, уменьшение веса, импульс)
  • Список переменных (архитектуры модели и гиперпараметры переменных)
  • Набор данных для обучения, проверки и тестирования
  • Скрипт предварительной обработки набора данных, который генерирует файлы TFRecord

Вы можете отслеживать все, что хотите связать с этим экспериментом. Следующий код создает трекер под названием «эксперимент-метаданные» с приведенной выше информацией:

Этот трекер является пробным компонентом, который в настоящее время не связан с экспериментом. Напомним, что из «Анатомии эксперимента с машинным обучением» пробный компонент нельзя напрямую связать с экспериментом. Сначала он должен быть связан с пробной версией. В следующем разделе я свяжу этот общий пробный компонент со всем испытанием в эксперименте.

Шаг 4. Создайте пробные версии и запустите обучающие вакансии

На шаге 2 я создал список из 18 наборов переменных, варьируя оптимизатор, модель и эпохи. На этом этапе я пройдусь по этим наборам и создам пробное и обучающее задание для каждого набора. Вот подход. Для каждого набора переменных я буду:

  1. Создайте пробную версию и свяжите ее с экспериментом
  2. Свяжите трекер на шаге 3 с этой пробной версией в качестве пробного компонента
  3. Создайте новый трекер для отслеживания гиперпараметров, специфичных для пробной версии, и свяжите ее с пробной версией в качестве пробного компонента.
  4. Создайте учебное задание с гиперпараметрами, специфичными для пробной версии, и свяжите его с пробной версией в качестве пробного компонента учебного задания.

В следующем фрагменте кода показано, как реализовать шаги a-d, описанные выше.

Отрывок показан только для иллюстрации, для полного примера запустите этот блокнот на Github: https://github.com/shashankprasanna/sagemaker-experiments-examples/blob/master/sagemaker-experiment-examples.ipynb

После запуска приведенного выше кода вы увидите, что SageMaker запускает несколько обучающих заданий, каждое из которых связано с его уникальной пробной версией.

В Amazon SageMaker Studio вы также можете просмотреть пробную версию эксперимента на панели экспериментов слева.

Если дважды щелкнуть одну из пробных версий, и вы увидите связанные компоненты пробной версии:

  • cifar10-training-rmsprop-resnet-120-XXXXX: пробный компонент для учебного задания.
  • trial-metadata-XXXXX: пробный компонент для гиперпараметров пробной версии.
  • эксперимент-метаданные: пробный компонент для сущностей, общих для всех испытаний (статические гиперпараметры, список переменных, обучение, проверка и тестовый набор данных, сценарий предварительной обработки набора данных)

Шаг 5. Анализ результатов эксперимента

После завершения обучающих заданий я могу сравнить все пробные запуски и сделать выводы об эксперименте. Приложив немного усилий для тщательного определения и организации экспериментов и использования таких сервисов, как SageMaker Experiments, вам не придется тратить слишком много времени на создание отчетов для анализа путем объединения нескольких цифровых и аналоговых источников. Вы можете взять отпуск или поработать над другим проектом, пока ваш босс думает, что вы усердно работаете, просматривая коммиты Git, контрольные журналы и вводя данные в электронные таблицы.

В этом разделе я построю отчет об эксперименте, который я только что провел. Все, что мне нужно, это название эксперимента, и с помощью пакета SageMaker Experiments я могу получить аналитику, используя следующий код:

В выходных данных ниже вы можете видеть, что (1) лучшая точность в целом (2) лучшая точность @ 60 эпох и (3) лучшая точность @ 30 эпох - все соответствует моей пользовательской модели.

Я могу использовать эти данные, чтобы принять или отклонить мою гипотезу о том, что моя пользовательская модель обеспечивает лучшую точность, чем ResNet50 для набора данных CIFAR10. Я построил этот пример, чтобы проиллюстрировать ключевые концепции управления экспериментом, и приведенных выше данных может быть недостаточно, чтобы сделать какие-либо выводы. В этом случае вы можете провести еще один эксперимент, обновив свою гипотезу и переменные.

(Бонус) Шаг 6. Использование SageMaker Debugger для визуализации кривых производительности

Если вам нравится углубляться в каждую тренировочную работу и анализировать метрики, веса или информацию о градиенте, вы можете использовать SageMaker Debugger. SageMaker Debugger автоматически захватывает некоторую отладочную информацию по умолчанию из каждого учебного задания, и вы также можете настроить, какие данные должны быть отправлены для последующего анализа. Если вас интересует отладка машинного обучения с помощью SageMaker, ознакомьтесь с моей предыдущей публикацией, в которой подробно рассказывается об отладке:

Сообщение в блоге: Как отлаживать модели машинного обучения, чтобы своевременно и часто обнаруживать проблемы

Библиотека с открытым исходным кодом smdebug позволяет читать и анализировать данные отладки. Приведенный ниже код загрузит точность проверки для всех испытаний для каждого шага во время обучения и построит 3 лучшие модели для 30, 60 и 90 эпох. Вы также можете построить промежуточные тензоры и градиенты во время обучения для дальнейшей отладки. Ознакомьтесь с приведенным выше сообщением в блоге для получения более подробной информации.

Спасибо за прочтение

Мы прошли долгий путь с первых дней машинного обучения. От высококачественных фреймворков машинного обучения с открытым исходным кодом до полностью управляемых сервисов для обучения и масштабного развертывания моделей и сквозного управления экспериментами - в инструментах нет недостатка, независимо от ваших потребностей в машинном обучении. В этом сообщении блога я рассказал, как с помощью Amazon SageMaker можно облегчить боли, связанные с управлением экспериментами с машинным обучением. Надеюсь, вам понравилось читать. Весь код и примеры доступны на GitHub здесь:

Https://github.com/shashankprasanna/sagemaker-experiments-examples

Если вы нашли эту статью интересной, ознакомьтесь с другими сообщениями в моем блоге о машинном обучении и SageMaker:

Если у вас есть вопросы по этой статье, предложения по ее улучшению или идеи для новых сообщений, напишите мне в Twitter (@shshnkp), LinkedIn или оставьте комментарий ниже. Наслаждаться!