mlflow¶
mlflow是一个用于对机器学习全生命周期管理的第三方库, 是由做Spark的公司出品的开源工具,主要功能包括模型训练阶段的日志记录、模型环境的打包迁移和模型文件 的打包部署。对代码侵入性较低,不但可以配合pytorch、tensorflow等深度学习框架使用,也可以配合sklearn、 xgboost等机器学习框架使用。这里主要介绍mlflow用于深度学习中训练过程的日志记录功能,主要对标tensorboard
安装及使用¶
pip install mlflow
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")
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不会上传,需要额外的配置
- 首先在A上启动mlflow server,然后启动mlflow ui,手动新建一个实验,记录实验id,如
971360555420878396
- 修改实验的artifact位置。需要注意的是UI界面上目前是无法修改,需要找到对应的目录中的
meta.yaml
文件,修改其中的artifact_location
字段。修改成sftp://yujiannan@192.168.1.11/media/3TB/mlruns/971360555420878396
。注意路径最后要以实验id结尾,这个id可以在ui界面上看到。否则在 log_artifact的时候就会再新建一个文件夹导致目录结构错误 - 在机器A和B上运行mlflow的环境中分别安装
pysftp
包 - 在机器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")
...