MLOps - Как обновить модель машинного обучения

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

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

Вместе (модель и приложение) будут развернуты в нашем оркестраторе (кластер кубернетов).

Я нахожусь в ситуации, когда логика приложения не меняется, а модели меняются. Я мог оказаться в ситуации ниже.

Я предполагаю, что есть два подхода к управлению обновлением модели времени выполнения в оркестраторе (надеюсь, кто-то предложит мне другие возможности, о которых я не думал):

  1. В логике приложения; Код управляет обновлением через поток, принимая новую модель.
    • Плюсы: не создается новый контейнер
    • Минусы: возможность внести ошибку.
  2. Через трубопровод; Конвейер должен запускаться событием (в моем случае слияние в ветке git) и приводить контейнер, выполняя скользящее обновление. Новый контейнер при запуске загрузит новую модель.
    • Плюсы: существующий процесс
    • Минусы: каждая новая версия модели должна предусматривать новую сборку контейнера, даже если логика приложения не изменилась.

[Вопрос] Есть ли какие-нибудь передовые методы для этих случаев (возможно, с помощью системы тегов на изображениях), которые кто-то может мне посоветовать?

Спасибо Киплико

1 ответ

Самый простой способ - выполнить скользящее обновление через k8s / kubectl. Для этого потребуется новый контейнер, однако это считается лучшей практикой, поскольку каждый контейнер остается атомарным и воспроизводимым. Обновление модели через потоки будет трудно отладить.

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

Другие вопросы по тегам