Найти тему
17 подписчиков

Процесс развертывания Kubeflow и Seldon для обработки и предсказания данных на основе модели машинного обучения (Часть 1)


Устанавливаем kubernetes локально:

curl -sfL https://get.k3s.io | sh -

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

Меняем владельца конфигурационного файла:

sudo chown user.user /etc/rancher/k3s/k3s.yaml

Далее для развертывания kubeflow использую Kustomize.
Kustomize — инструмент, позволяющий управлять конфигурациями Kubernetes. Он помогает создавать и модифицировать YAML-манифесты, избегая дублирования кода.
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash && chmod +x kustomize && sudo mv kustomize /usr/local/bin/

Клонируем репозиторий с манифестами Kubeflow, а затем применяем их с помощью Kustomize и kubectl:

git clone https://github.com/kubeflow/manifests.git
cd manifests
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 20; done

Если возникают ошибки, процесс повторяется каждые 20 секунд.

Если поды находятся в статусе CrashLoopBackoff (баг с которым столкнулся):

sudo sysctl fs.inotify.max_user_instances=1280
sudo sysctl fs.inotify.max_user_watches=655360

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

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

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80

команда перенаправляет локальный порт на сервис istio-ingressgateway, позволяя взаимодействовать с приложениями, развернутыми в Kubernetes.

Для проверки создания pipeline из notebook лучше получить Exterlan IP:

kubectl patch svc istio-ingressgateway -n istio-system -p '{"spec": {"type": "LoadBalancer"}}'

Данная команда изменяет тип сервиса istio-ingressgateway на LoadBalancer, что позволяет Kubernetes автоматически создать внешний IP-адрес для доступа к этому сервису.

В коде клиента, компилируем пайплайн и запускаем его через клиент Kubeflow:

import kfp
from kfp import dsl

@dsl.component
def load_mnist_data() -> str:
...

@dsl.component
def preprocess_data(data_path: str) -> str:
...

kfp.compiler.Compiler().compile(mnist_pipeline, 'mnist_pipeline.yaml')
client = kfp.Client(host='http://127.0.0.1:8080')
client.create_run_from_pipeline_func(mnist_pipeline)

#MLOps
Процесс развертывания Kubeflow и Seldon для обработки и предсказания данных на основе модели машинного обучения (Часть 1)  Устанавливаем kubernetes локально:  curl -sfL https://get.k3s.
2 минуты