按网上大拿们的文章弄。
一,再次重申测试的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
网友评论