Обслуживание пользовательской модели из конвейера Kubeflow

#kubernetes #kubeflow #kubeflow-pipelines #knative-serving

Вопрос:

У меня есть конвейер kubeflow, который обучает пользовательским (т. Е. Не основанным на sklearn / tensorflow и т. Д. классы) модель ml. Теперь я хотел бы добавить обслуживание в конце конвейера. Т. Е. Я хочу, чтобы в моем кластере Kubernetes была служба, которая использует модель для ответа на запросы прогнозирования, и эта служба должна обновляться новой моделью после каждого запуска конвейера.

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

  1. Заверните мою модель в kfserv.Класс KFModel
  2. Создайте образ докера с помощью оболочки из 1) запущенного
  3. Создайте конечную точку службы вывода с изображением из 2)

Существует ли какой-либо облачный агностический способ сделать это в компоненте Kubeflow? (таким образом, в основном компонент должен иметь возможность создавать образы докеров)

Есть ли какой-то лучший способ достичь моей цели?

Возможно, мне следует перенести шаги 1-3 за пределы компонента конвейера и просто создать компонент, который инициировал бы внешнее выполнение 1-3. Можно ли это сделать?

Ответ №1:

Я не могу говорить конкретно с Kubeflow, но https://buildpacks.io/ предоставляет универсальный способ создания контейнеров, удовлетворяющих определенным входным критериям (например, «является программой на python с a main и a requirements.txt «). Также возможно (но сложнее) создать новый пакет сборки (например, взять «код python, который реализует kfserving.KFModel , и обернуть вокруг него main и все остальное, что необходимо»). Я делал это несколько раз для python для демонстраций/и т. Д:

https://github.com/evankanderson/klr-buildpack
https://github.com/evankanderson/pyfun

Обратите внимание, что это не производственный класс, просто я играю день или три.

Вы можете создавать пакеты сборки локально с pack помощью команды или в кластере, используя несколько технологий. Здесь есть подробная документация по 5 вариантам сборки: https://buildpacks.io/docs/tools/, а также более длинный список «поддерживаемых платформ» в нижней части https://buildpacks.io/features/.

Комментарии:

1. проблема в том, что ему все еще нужен докер, поэтому я не могу использовать его внутри компонента Kubeflow. Я могу автоматизировать все, что мне нужно, с помощью сценария bash. Увы, я хотел бы сделать это внутри компонента Kubeflow.

2. Я признаю, что не знаком с компонентом, но пакеты сборки можно использовать и создавать без доступа к сокету Docker; например, так работает задача Tekton buildpack.

Ответ №2:

Вам определенно следует перенести шаги 1-3 за пределы конвейера Kubeflow, создание образов docker для вашего сервера пользовательских моделей не должно выполняться при каждом запуске конвейера.

Сказав это, ваше пользовательское изображение должно загрузить благословенную модель запуска из внешнего источника, т. Е. ведра S3/GS/minio.

Вы уверены, что ваша модель построена на платформе, которой нет в списке серверов моделей, которые уже поддерживает Kserve, и вам нужно создать собственный сервер моделей?