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

Обучение-перекос в обслуживании – это разница между выходными данными модели во время обучения и во время обслуживания. Этот перекос вызван несоответствием между конвейерами обучения и обслуживания.

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

Разделение также помогает в самостоятельной разработке библиотек и системы на каждом этапе. Вот типичные слои:

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

Преобразования: прямой ациклический граф пользовательских функций (UDF) для преобразования данных. Они используются в обучении и включены в комплект модели для логического вывода. Мы должны обеспечить согласованность выходных данных преобразований при обработке одной строки или пакетов строк. [1]

Тренеры. Процесс обучения модели машинного обучения включает в себя предоставление алгоритму обученияобработанных обучающих данных (функции пост-преобразования) для обучения. Модель ML относится к артефакту модели, созданному в процессе обучения. Обратите внимание, что во время обслуживания это эквивалентно преобразованию.

Построение графа обслуживания:
Модуль упаковщика объединяет обученную модель, дату преобразований и необходимые функции в единое целое (например, nn.Module в pytorch). Теперь этот граф обслуживания можно развернуть на обслуживающих системах.

Производственная обслуживающая система имеет строгие ограничения по памяти и задержке. Разработка ML обычно выполняется в коде Python (например, в программе pytorch). Для повышения производительности во время обслуживания (память и задержка) может возникнуть проблема с зависимостью от Python. Например, программы Pytorch компилируются в код Torchscript для обслуживания. (также известный как торч-скриптинг) [2]

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

Проверка на перекос в обучении:

  • Возьмите N (скажем, 1000) случайных входных данных. (Тестовый корпус)
  • Настройте систему 1(график обслуживания, загруженный в память) систему 2 (не связанные функции, преобразования и модель).
  • Прогоните примеры через системы 1 и 2. Выходные данные должны быть идентичными.

  • Если нет, проверьте слой, в котором результаты расходятся (это функции, преобразования или модель).
  • Запустите этот тест перед развертыванием модели в обслуживающих системах. Сделайте это блокирующим тестом, поскольку нет смысла использовать модель с таким перекосом в обучении в производственной среде.

Подведение итогов:

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

Ссылки

[1] Правило №28 https://developers.google.com/machine-learning/guides/rules-of-ml

[2] https://pytorch.org/docs/stable/jit.html