Производственные системы машинного обучения: тестирование развертывания

Вы готовы развернуть модель единорога, которая предсказывает появление единорогов! При развертывании ваш конвейер машинного обучения (ML) должен запускаться, обновляться и обслуживаться без проблем. Если бы только развертывание модели было так же просто, как нажатие большой кнопки «Развернуть» . К сожалению, полная система машинного обучения требует тестов на:

  • Проверка входных данных.
  • Проверка разработки функций.
  • Проверка качества новых версий модели.
  • Проверка обслуживающей инфраструктуры.
  • Тестирование интеграции между компонентами конвейера.

Многие инженеры-программисты предпочитают разработку через тестирование (TDD). В TDD инженеры-программисты пишут тесты до написания «настоящего» исходного кода. Однако TDD может оказаться непростым в машинном обучении. Например, перед тренировкой модели вы не можете написать тест для проверки потери. Вместо этого вы должны сначала обнаружить достижимые потери во время разработки модели, а затем протестировать новые версии модели на предмет достижимых потерь.

О модели единорога

Этот раздел относится к модели единорога . Вот что вам нужно знать:

Вы используете машинное обучение для создания модели классификации, которая предсказывает появление единорогов. В вашем наборе данных содержится информация о 10 000 появлениях единорогов и 10 000 неявках единорогов. Набор данных содержит местоположение, время суток, высоту, температуру, влажность, древесный покров, наличие радуги и некоторые другие характеристики.

Обновления тестовых моделей с воспроизводимым обучением

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

  • Детерминированно задайте начальное значение генератора случайных чисел. Подробности см. в разделе «Рандомизация при генерации данных».

  • Инициализируйте компоненты модели в фиксированном порядке, чтобы гарантировать, что компоненты получают одно и то же случайное число от генератора случайных чисел при каждом запуске. Библиотеки ML обычно обрабатывают это требование автоматически.

  • Возьмите среднее значение нескольких прогонов модели.

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

Даже после следования этим рекомендациям другие источники недетерминизма все еще могут существовать.

Тестовые вызовы API машинного обучения

Как вы тестируете обновления вызовов API? Вы можете переобучить свою модель, но это отнимает много времени. Вместо этого напишите модульный тест для генерации случайных входных данных и выполните один шаг градиентного спуска. Если этот шаг завершится без ошибок, то любые обновления API, вероятно, не испортили вашу модель.

Написание интеграционных тестов для компонентов конвейера.

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

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

Проверка качества модели перед ее показом

Прежде чем запускать новую версию модели в производство, проверьте ее на наличие следующих двух типов ухудшения качества:

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

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

Перед обслуживанием проверьте совместимость модели и инфраструктуры.

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