mlflow的入门实践一

2022-05-30  本文已影响0人  万州客

按网上大拿们的文章弄。

一,再次重申测试的docker-compose.yml

为什么要重申呢?因为上次把s3的console-adress配置错了,导致不能上传。

version: "3.3"
services:
  s3:
    image:  minio/minio:RELEASE.2021-11-24T23-19-33Z
    restart: unless-stopped
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      - MINIO_ROOT_USER=${AWS_ACCESS_KEY_ID}
      - MINIO_ROOT_PASSWORD=${AWS_SECRET_ACCESS_KEY}
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
    volumes:
      - /etc/localtime:/etc/localtime:ro
    command: server /data --console-address ":9001" --address ":9000"
    networks:
      - internal
      - public
  db:
    image: mysql/mysql-server:5.7.28
    restart: unless-stopped
    container_name: mlflow_db
    expose:
      - "3306"
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    networks:
      - internal
  mlflow:
    container_name: tracker_mlflow
    image: tracker_ml
    restart: unless-stopped
    build:
      context: ./mlflow
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    environment:
      - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
      - AWS_DEFAULT_REGION=${AWS_REGION}
      - MLFLOW_S3_ENDPOINT_URL=http://s3:9000
    networks:
      - public
      - internal
    entrypoint: bash ./wait-for-it.sh db:3306 -t 90 -- mlflow server --backend-store-uri mysql+pymysql://${MYSQL_USER}:${MYSQL_PASSWORD}@db:3306/${MYSQL_DATABASE} --default-artifact-root s3://${AWS_BUCKET_NAME}/ -h 0.0.0.0
  create_s3_buckets:
    image: minio/mc
    depends_on:
      - "s3"
    entrypoint: >
      /bin/sh -c "
      until (/usr/bin/mc alias set minio http://s3:9000 '${AWS_ACCESS_KEY_ID}' '${AWS_SECRET_ACCESS_KEY}') do echo '...waiting...' && sleep 1; done;
      /usr/bin/mc mb minio/mlflow;
      exit 0;
      "
    networks:
      - internal
networks:
  internal:
  public:
    driver: bridge
volumes:
  db_volume:
  minio_volume:

试试用python代码保存参数,指标和模型文件

这里,又要配置mlflow,又要配置s3的minio才行哟。mlflow由于没有权限管理,所以一切放空档。

import os
import mlflow
from mlflow import log_metric, log_param, log_artifact

os.environ["AWS_ACCESS_KEY_ID"] = "admin"
os.environ["AWS_SECRET_ACCESS_KEY"] = "adminadmin"
os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://192.168.1.111:9000"

if __name__ == '__main__':
    mlflow.set_experiment("Default")
    mlflow.set_tracking_uri('http://192.168.1.111:5000')

    log_param('param1', 15)
    log_param('param2', 25)
    log_param('param3', 35)
    log_param('param4', 5)
    log_param('param5', 55)


    log_metric('foo', 1)
    log_metric('foo', 2)
    log_metric('foo', 4)
    log_metric('foo', 6)
    log_metric('foo', 8)

    with open('wine.mdl', 'w') as f:
        f.write('hello, mlops.')
    log_artifact('wine.mdl')

三 查看mlflow的效果和s3的效果

为什么要看s3呢?因为mlflow启动的时候,指这s3作为文件存储 。
mlflow server --backend-store-uri mysql+pymysql://${MYSQL_USER}:${MYSQL_PASSWORD}@db:3306/${MYSQL_DATABASE} --default-artifact-root s3://${AWS_BUCKET_NAME}/ -h 0.0.0.0

image.png image.png image.png
上一篇 下一篇

猜你喜欢

热点阅读