Сразу оговорюсь, что я ни разу не ML Engineer / Devops. Бакалавриат я закончил вообще по мат.методам в экономике. И до начала работы почти ничего не слышал о юнит- и других тестах
Но как только мои модели начали использоваться, даже мне стало очевидно, что без тестов - никуда. Без них пайплайны падают, их починка отнимает кучу времени, а бизнес-заказчики недоумевают где их 300кк/сек от внедрения ML
А если ваши пайплайны падают слишком часто - не за горами тот момент, когда и вы будете недоумевать про свои 300кк/сек 🙂
Так что начнем мое небольшое введение в тестирование ML-пайплайнов!
ML-тесты очень специфичны. В продакшене каждый день мы обучаемся на немного разных данных. При этом даже на одних и тех же inputs можно получать разные outputs. Мы в общем случае не знаем, какой должен быть ответ на одном или другом примере
Поэтому я предлагаю покрывать отдельными тестами:
— входные данные (да-да, и для нейронок тоже)
— каждый этап трансформации данных
— predict
В моем идеальном мире, код может выглядеть примерно так:
df = read_data()
test_on_inputs(df)
df = first_transform(df)
test_on_transform(type='first')
df = second_transform(df)
test_on_transform(type='second')
model = MyFavoriteModel()
model.fit(df)
test_on_predict(model, df)Далее опишу тесты, которые я