Как организовать эксперименты, испытания, задания и метаданные машинного обучения с помощью 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 наборов переменных, варьируя оптимизатор, модель и эпохи. На этом этапе я пройдусь по этим наборам и создам пробное и обучающее задание для каждого набора. Вот подход. Для каждого набора переменных я буду:
- Создайте пробную версию и свяжите ее с экспериментом
- Свяжите трекер на шаге 3 с этой пробной версией в качестве пробного компонента
- Создайте новый трекер для отслеживания гиперпараметров, специфичных для пробной версии, и свяжите ее с пробной версией в качестве пробного компонента.
- Создайте учебное задание с гиперпараметрами, специфичными для пробной версии, и свяжите его с пробной версией в качестве пробного компонента учебного задания.
В следующем фрагменте кода показано, как реализовать шаги 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:
- Как отлаживать модели машинного обучения, чтобы своевременно и часто обнаруживать проблемы
- Краткое руководство по распределенному обучению с TensorFlow и Horovod на Amazon SageMaker
- Краткое руководство по использованию спотовых инстансов с Amazon SageMaker для экономии затрат на обучение
- Kubernetes и Amazon SageMaker для машинного обучения - лучшее из обоих миров
Если у вас есть вопросы по этой статье, предложения по ее улучшению или идеи для новых сообщений, напишите мне в Twitter (@shshnkp), LinkedIn или оставьте комментарий ниже. Наслаждаться!