跳转至

mlflow

mlflow是一个用于对机器学习全生命周期管理的第三方库, 是由做Spark的公司出品的开源工具,主要功能包括模型训练阶段的日志记录、模型环境的打包迁移和模型文件 的打包部署。对代码侵入性较低,不但可以配合pytorch、tensorflow等深度学习框架使用,也可以配合sklearn、 xgboost等机器学习框架使用。这里主要介绍mlflow用于深度学习中训练过程的日志记录功能,主要对标tensorboard

安装及使用

pip install mlflow
安装完成后使用mlflow的ui命令启动ui界面
mlflow ui --backend-store-uri file:///media/3TB/mlruns/
其中--backend-store-uri指定了mlflow的日志存储位置,这里使用了本地文件系统,也可以使用mysql、sqlite等数据库存储。 日志存储位置可以对每个项目单独指定,也可以使用统一的位置方便管理。mlflow的核心概念包括实验(Experiment)和运行(Run)。 实验通常是指一个任务,运行是指一个实验中的一个执行过程。然后在自己的代码中使用mlflow的api记录日志。
experiment_id = mlflow.create_experiment(name="牙齿检测")
mlflow.start_run(experiment_id=experiment_id, run_name="测试LOG1 config")
mlflow.set_tag("tag1", 'value1')
mlflow.set_tag("tag1", 'value2')
print("Running mlflow_tracking.py")
log_param("param1", randint(0, 100))
log_param("val_transform", val_transform)

log_metric("foo", 1, step=1)
log_metric("foo", random() + 1, step=2)
log_metric("foo", random() + 2, step=3)
log_metric("foo2", 1, step=1)
log_metric("foo2", random() + 1, step=2)
log_metric("foo2", random() + 2, step=3)

mlflow.log_artifact("/home/yujiannan/图片/2022-12-03_11-43.png", artifact_path="step1")
mlflow.log_artifact("/home/yujiannan/图片/2022-12-03_11-43.png", artifact_path="final_result")
mlflow.log_artifact(__file__, artifact_path="file")
mlflow.log_artifact("./__init__.py", artifact_path="file")
主要的api包括:

  • set_tag: 给某次运行加一些标签,方便后续查询
  • log_param: 记录某次运行的参数,主要用于后续的分析过程,用于分析参数和结果的关系
  • log_metric: 记录某次运行的指标,可以记录在某个step上的metric,方便后续的分析
  • log_artifact: 记录某次运行的文件,任何类型的文件都可以,这个记录本质上就是把对应的文件给复制一份。通常用于保存生成的模型文件或者是训练过程中的一些val图片

mlflow server使用

有的时候实验在另外的机器B上运行,但是实验结果和实验日志希望在一个统一的机器A记录,这个时候可以使用mlflow server。即在机器A上搭建mlflow的server, 在机器B上通过连接将数据发送至A记录。首先在A上启动mlflow server

mlflow server --backend-store-uri file:///media/3TB/mlruns/ --host 0.0.0.0 --port 6000
其中--backend-store-uri指定了mlflow的日志存储位置,然后在机器B上连接A的server即可

需要注意的是,param和tag和metric都可以直接通过http请求发送到A,但是artifact不会上传,需要额外的配置

  1. 首先在A上启动mlflow server,然后启动mlflow ui,手动新建一个实验,记录实验id,如971360555420878396
  2. 修改实验的artifact位置。需要注意的是UI界面上目前是无法修改,需要找到对应的目录中的meta.yaml文件,修改其中的artifact_location字段。修改成 sftp://yujiannan@192.168.1.11/media/3TB/mlruns/971360555420878396。注意路径最后要以实验id结尾,这个id可以在ui界面上看到。否则在 log_artifact的时候就会再新建一个文件夹导致目录结构错误
  3. 在机器A和B上运行mlflow的环境中分别安装pysftp
  4. 在机器A上添加B的公钥,使得SFTP认证通过,在机器B上执行ssh-copy-id yujiannan@192.168.1.11,输入密码即可。

这样就配置完成,然后在实验中使用mlflow

mlflow.set_tracking_uri("http://192.168.1.11:6000")
experiment = mlflow.get_experiment_by_name("颌骨分割").experiment_id
mlflow.start_run(experiment_id=experiment, run_name="run name")
...

评论