你可以通过MLflow Python,R,Java,REST APIs等记录runs。可以从单独的项目,远程云,或一个交互notebook记录runs.
你可以选择性的组合runs到实验中,一旦开始记录,就可以通过Tracking UI或者MLflow API进行查看。
Runs 在哪记录?
可以记录到本地文件、SQLAIchemy编译数据库或远程服务器。默认是记录到项目的mlruns本地文件夹中,可以通过运行mlflow UI查看。
有四种不同的远程跟踪URIs(详见教程).
Runs和Artifacts如何记录?
MLflow有两个组件用来保存Runs和Artifacts:Backend Store 和 Artifacts Store. Backend Store 保存runs\parameters\metrics\tags\notes\metadata等,artifacts Store保存files\models\images\in-memory objects\model summary.
MLflow客户端可以与四种Backend、Artifacts Store交互,如下是四种常见设置:
- 场景一:本地运行runs, 存储Entities和Artifacts在本地文件夹./mlruns/下。
- 场景二:本地运行runs,Artifacts存储在本地文件夹./mlruns下,但是用SQlite存储Entities。
- 场景三:在远程服务器上运行runs,但Entities和Artifacts存储在本地(MLflow on localhost with Tracking Server
)
- 场景四:在远程服务器上运行runs,Entities和Artifacts也存储在远程端。
记录数据到runs
这部分是Python API
Logging Functions
- 设置跟踪URI: mlflow.set_tracking_uri()
- 获取正在跟踪的URI:mlflow.tracking.get_tracking_uri()
- 创建实验,并返回其ID:mlflow.create_experiment()
- 激活实验:mlflow.set_experiment()
- 开启run: mlflow.start_run()
- 终止run:mlflow.end_run()
- 获取mlflow.entities.run: mlflow.active_run()
- 记录一个单独的关键值参数:mlflow.log_param(),记录多个参数用mlflow.log_params()
- 记录单独的metric:mlflow.log_metric(),同理,多个用mlflow.log_metrics()
- 设置tag: mlflow.set_tag() ,多个mlflow.set_tags()
- 记录一个Artifact: mlflow.log_artifact()
- 记录所有的Artifact: mlflow.log_artifacts()
- 获取Artifact URI:mlflow.get_artifact_uri()
Launching Multiple Runs in One Program
在一个项目里运行多个runs。例如:正在本地调超参数,就可以同时跑多个runs。
Performance Tracking With Metrics
在Tracking API中跟踪Metrics,支持两个x轴刻度:时间和训练进程step(Training iterations,epochs)。对x轴的值有一些约束,详见文档。
Visualizing Metrics
自动记录 Automatic Logging
不用设置,直接记录metrics, parameters, and models。
俩方式:
- 直接用 mlflow.autolog() 自动选择环境中已有的工具进行记录。
- 指定记录工具进行记录。
- 工具支持:
- Scikit-learn
- TensorFlow and Keras
- Gluon
- XGBoost
- LightGBM
- Statsmodels
- Spark
- Fastai
- Pytorch
Organizing Runs in Experiments
- MLflow 支持在实验中运行一组runs,这样可以通过比较不同的runs来解决一些难题。
Managing Experiments and Runs with the Tracking Services API 用Tracking Services API管理实验和Runs
- MLflow提供了一个更详细的Tracking Service API 用于管理直接管理实验和runs,通过mlflow.trackingd的SDK客户端实现。功能支持:查询之前的runs的数据,j记录关于这些数据的额外信息,创建实验,给一个run添加tag。
给runs添加tags
- 跟踪UI
- Tracking UI 可以可视化、搜索和比较runs,并且下载artifacts或者用其他工具来分析的元数据。假如是本地运行,直接在本地文件夹运行MLflow UI,假如是远程用MLflow tracking server,详见文档。
- UI包括以下特点:
- 以实验为单位的run列表和比较
- 通过参数和metric值搜索runs
- 查看runs的metrics
- 下载runs的结果。
Querying Runs Programmatically
- 可以通过功能函数访问Tracking UI。这样可以让以下任务变得更简单。
- 使用外部工具来查询和比较runs,比如pandas
- 确定artifacts的URI,可以将这些Artifacts输入到工作流的下一个组件中。
- 从之前的runs中加载artifacts作为MLflow Model。比如训练、导出、加载一个模型或者是用模型进行推理。
- 运行自动参数搜索算法,当从不同的runs中查询metrics用来提交新的runs时。例如:超参数调优。详见文档示例。
MLflow Tracking Servers MLflow跟踪服务器
- 可以通过mlflow server在服务器上用MLflow进行跟踪
- 存储
- 一个MLflow有两个组件可以用来存储:一个backend Store和Artifacts Store
- Backend Stores
- 存储实验或runs的参数、metrics、tags,支持两种格式:文件和数据库(file store or database-backed store)
- Artifacts Stores
- 除了本地存储,MLflow同样支持以下文件系统: Amazon S3, Azure Blob Storage, Google Cloud Storage, SFTP server, and NFS.
- File store performance
- Deletion Behavior
- 卸载MLflow后,Backend和Artifacts文件不会自动删除,需要用mlflow gc手动删除
- SQLAlchemy Options
- Networking
- host操作会暴露所有的接口服务,所以在产品上运行server的话,不建议广泛暴露内置服务器(不保密且未经鉴定),建议适应VPN链接。
- backend的位置也建议是长期存在的稳定的硬盘位置。
- Logging to a Tracking Server
- System Tags
- MLflow在适当时机会自动设置一些标签,可供读取。你可以随意定义一个标签,但是以mlflow.开头的标签是共内部使用的。