MLflow Kubernetes Pod Развертывание - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать модуль kubernetes, который будет запускать MLflow tracker для хранения артефактов mlflow в указанном месте s3. Ниже описывается то, что я пытаюсь развернуть с помощью

Dockerfile:

FROM python:3.7.0

RUN pip install mlflow==1.0.0
RUN pip install boto3
RUN pip install awscli --upgrade --user

ENV AWS_MLFLOW_BUCKET aws_mlflow_bucket
ENV AWS_ACCESS_KEY_ID aws_access_key_id
ENV AWS_SECRET_ACCESS_KEY aws_secret_access_key

COPY run.sh /

ENTRYPOINT ["/run.sh"]

# docker build -t seedjeffwan/mlflow-tracking-server:1.0.0 .
# 1.0.0 is current mlflow version

run. sh:

#!/bin/sh

set -e

if [ -z $FILE_DIR ]; then
  echo >&2 "FILE_DIR must be set"
  exit 1
fi

if [ -z $AWS_MLFLOW_BUCKET ]; then
  echo >&2 "AWS_MLFLOW_BUCKET must be set"
  exit 1
fi

if [ -z $AWS_ACCESS_KEY_ID ]; then
  echo >&2 "AWS_ACCESS_KEY_ID must be set"
  exit 1
fi

if [ -z $AWS_SECRET_ACCESS_KEY ]; then
  echo >&2 "AWS_SECRET_ACCESS_KEY must be set"
  exit 1
fi

mkdir -p $FILE_DIR && mlflow server \
    --backend-store-uri $FILE_DIR \
    --default-artifact-root s3://${AWS_MLFLOW_BUCKET} \
    --host 0.0.0.0 \
    --port 5000

mlflow.yaml:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mlflow-tracking-server
  namespace: default
spec:
  selector:
    matchLabels:
      app: mlflow-tracking-server
  replicas: 1
  template:
    metadata:
      labels:
        app: mlflow-tracking-server
    spec:
      containers:
      - name: mlflow-tracking-server
        image: seedim/mlflow-tracker-service:v1
        ports:
        - containerPort: 5000
        env:
        # FILE_DIR can not be mount dir, MLFLOW need a empty dir but mount dir has lost+found
        - name: FILE_DIR
          value: /mnt/mlflow/manifest
        - name: AWS_MLFLOW_BUCKET
          value: <aws_s3_bucket>
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: aws-secret
              key: AWS_ACCESS_KEY_ID
        - name: AWS_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: aws-secret
              key: AWS_SECRET_ACCESS_KEY
        volumeMounts:
        - mountPath: /mnt/mlflow
          name: mlflow-manifest-storage
      volumes:
        - name: mlflow-manifest-storage
          persistentVolumeClaim:
            claimName: mlflow-manifest-pvc

---
apiVersion: v1
kind: Service
metadata:
  name: mlflow-tracking-server
  namespace: default
  labels:
    app: mlflow-tracking-server
spec:
  ports:
  - port: 5000
    protocol: TCP
  selector:
    app: mlflow-tracking-server

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mlflow-manifest-pvc
  namespace: default
spec:
  storageClassName: gp2
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

Затем я создаю образ docker, сохраняю его в среде мини-кубов, а затем пытаюсь запустить образ docker на модуле kubernetes.

Когда я пытаюсь это сделать, я получаю ошибку CrashLoopBackOff для модуля изображений, и «модуль имеет несвязанные немедленные PersistentVolumeClaims» для модуля, созданного с помощью yaml.

Я пытаюсь следить за информацией здесь (https://github.com/aws-samples/eks-kubeflow-workshop/blob/master/notebooks/07_Experiment_Tracking/07_02_MLFlow.ipynb).

Что-нибудь заметное, что я делаю не так в этой ситуации?

Спасибо

1 Ответ

1 голос
/ 09 апреля 2020

Эта проблема связана с требованием о постоянных томах, которое не предоставляется вашим кластером мини-кубов.

Вам необходимо будет принять решение о переходе на службу kubernetes, управляемую платформой, или придерживаться мини-куба и вручную выполнить Заявка о постоянном объеме или альтернативные решения.

Простейшим вариантом будет использование helm диаграмм для установки mflow, таких как this или this .

Первый шлем Диаграмма содержит перечисленные требования:

Предварительные условия

  • Скопление Kubernetes 1.10 +
  • Шлем 2.8 .0 +
  • Поддержка провайдера PV в базовой инфраструктуре.

Как и в руководстве, которому вы следовали, требуется поддержка провайдера PV.

Итак переключившись на EKS Скорее всего, вам будет проще развернуть mflow с сохранением артефактов с помощью s3.

Если вы останетесь на мини-кубе sh, вам нужно будет изменить схему управления шлемом v alues ​​или файлы yaml из руководства, которое вы связали, чтобы быть совместимыми с вами, вручную настраивают PV. Также может потребоваться настройка разрешений для s3.

Второй шлем chart имеет следующее ограничение / функцию:

Известные ограничения этой диаграммы

Я создал эту диаграмму, чтобы использовать ее в рабочей среде моей компании. Мы используем MLFlow с Postgres внутренним хранилищем.

Таким образом, следующие возможности были исключены из диаграммы:

  • Использование постоянных томов в качестве внутреннего хранилища.
  • Использование других механизмов баз данных, таких как MySQL или SQLServer.

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

Надеюсь, это поможет.

...