MLOps - Как обновить модель машинного обучения
На изображении ниже показаны два конвейера, которые используются в моей компании для управления жизненным циклом модели.
- Первый конвейер, "Приложение", относится к созданию компонента приложения, в котором размещается модель, и имеет логику вывода.
- Второй, "Модель", представляет собой конвейер, который приводит к созданию модели в двоичном формате.
Вместе (модель и приложение) будут развернуты в нашем оркестраторе (кластер кубернетов).
Я нахожусь в ситуации, когда логика приложения не меняется, а модели меняются. Я мог оказаться в ситуации ниже.
Я предполагаю, что есть два подхода к управлению обновлением модели времени выполнения в оркестраторе (надеюсь, кто-то предложит мне другие возможности, о которых я не думал):
- В логике приложения; Код управляет обновлением через поток, принимая новую модель.
- Плюсы: не создается новый контейнер
- Минусы: возможность внести ошибку.
- Через трубопровод; Конвейер должен запускаться событием (в моем случае слияние в ветке git) и приводить контейнер, выполняя скользящее обновление. Новый контейнер при запуске загрузит новую модель.
- Плюсы: существующий процесс
- Минусы: каждая новая версия модели должна предусматривать новую сборку контейнера, даже если логика приложения не изменилась.
[Вопрос] Есть ли какие-нибудь передовые методы для этих случаев (возможно, с помощью системы тегов на изображениях), которые кто-то может мне посоветовать?
Спасибо Киплико
1 ответ
Самый простой способ - выполнить скользящее обновление через k8s / kubectl. Для этого потребуется новый контейнер, однако это считается лучшей практикой, поскольку каждый контейнер остается атомарным и воспроизводимым. Обновление модели через потоки будет трудно отладить.
Другой сценарий, который вы могли бы сделать, - это сине-зеленое развертывание с использованием Istio и медленное перемещение трафика между старой и новой моделью, хотя это потребует немного больше накладных расходов.