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
2 минуты
9 октября 2024