首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MLflow Kubernetes Pod部署

MLflow Kubernetes Pod部署
EN

Stack Overflow用户
提问于 2020-04-07 20:37:04
回答 1查看 3K关注 0票数 0

我正在尝试创建一个kubernetes吊舱,它将运行MLflow跟踪器,将mlflow工件存储在指定的s3位置。下面是我试图部署的内容

Dockerfile:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#!/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:

代码语言:javascript
复制
---
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

然后,我正在构建码头映像,将其保存到迷你库环境中,然后尝试在kubernetes吊舱上运行对接映像。

当我尝试这样做时,我会得到图像pod的CrashLoopBackOff错误,而使用yaml创建的pod的'pod已经解除绑定立即PersistentVolumeClaims‘。

我试图跟踪这里的信息(MLFlow.ipynb)。

在这种情况下我做错了什么吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 12:06:32

这里的问题与持久卷声明有关,而这些请求不是由您的minikube集群提供的。

您需要决定切换到平台管理的kubernetes服务,或者坚持使用minikube,并手动满足持久性卷声明或替代解决方案。

最简单的选择是使用掌舵图表来安装mflow,如

第一个舵机图表列出了要求:

先决条件

  • Kubernetes簇1.10+
  • 舵机2.8.0+
  • 底层基础设施中的PV供应器支持。

就像您遵循的指南一样,这一项需要PV提供程序的支持。

因此,通过切换到EKS,您很可能更容易使用s3部署带有工件存储的mflow。

如果您希望停留在minikube,您将需要修改舵机图表值或yaml文件,从您的指南链接,以兼容您手动配置的PV。它还可能需要s3的权限配置。

第二个helm 图表具有以下限制/特性:

本图表的已知限制 我创建这个图表是为了在我的公司的生产准备环境中使用它。我们使用的是MLFlow和Postgres后端商店。 因此,图表中忽略了以下功能:

  • 使用持久卷作为后端存储。
  • 使用其他数据库引擎,如MySQL或SQLServer。

你可以试着把它安装在迷你库上。此设置将导致工件存储在远程数据库上。为了连接到s3,它仍然需要调整。

无论如何,minikube仍然是以学习为主要目标的kubernetes的轻量级发行版,所以如果您坚持太久,最终会达到另一个限制。

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61089001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档