MLflow系列2:MLflow追踪
英文链接:https://mlflow.org/docs/latest/tracking.html
本文链接:https://www.cnblogs.com/CheeseZH/p/11945089.html
MLflow Tracking
MLflow Tracking组件提供了API和UI,用于记录并可视化展示机器学习代码运行过程中的参数,代码版本,评价指标和输出文件。MLflow Tracking可以让你通过Python,REST API,R API或Java API来记录和查询试验。
一些概念
MLflow Tracking围绕着runs的概念进行组织,runs是一些数据科学代码片段的执行。一个run记录了以下信息:
Code Version/代码版本
如果run是来自一个MLflow项目,那么版本就是代码的Git提交对应的hash值。
Start&End Time/起止时间
run的开始时间和结束时间。
Source/源文件
启动run的文件名,或者MLflow项目的项目名和入口。
Parameters/参数
所选输入参数的Key-Value对,Key和Value都是字符串。
Metrics/评价指标
Key-value指标,value是数值。每个指标都可以在run的执行过程中被更新(比如记录模型损失函数的收敛曲线),MLflow记录并可视化指标的完整历史。
Artifacts/模型产品
任何格式的输出文件。你可以记录图片,模型或者数据文件。
你可以通过MLflow Python,R,Java或者REST APIs来记录runs。比如你可以记录一个单独的程序,可以记录远程及其或者交互式notebook。如果你记录MLflow项目的runs,MLflow会记住项目URI和源文件的版本。
你可以通过experiments来组织runs,experiments是用于特定任务的一组runs。你可以通过以下方式创建一个experiment
:
mlflow experiments
命令- mlflow.create_experiment()
- 使用对应的REST API
- MLflow API和UI让你可以创建和搜索experiments
当你的runs被记录之后,你可以通过Tracking UI或者MLflow API来查询。
Runs被记录在哪?
MLflow runs可以被存储在本地文件,SQLAlchemy兼容的数据库或者远程的服务器。默认情况下,MLflow Python API会把runs记录在你的运行程序所在的目录的mlruns
子目录。你可以使用mlflow ui
查看记录的runs。
如果把runs存储到远程服务器,需要配置环境变量MLFLOW_TRACKING_URI
或者调用mlflow.set_tracking_uri()
。
URI可以有多种形式:
- 本地路径,格式为
/my/local/dir
- 数据库,格式为
<dialect>+<driver>://<username>:<password>@<host>:<port>/<database>
,Mlflow支持mysql,sqlite,postgresql等多种SQLAlchemy数据库 - HTTP服务器,格式为
https://my-server:5000
,该服务是一个MLflow tracking server。 - Databricks工作空间,格式为
databricks
或者databricks://<profileName>
,一个Databricks CLI profile。更多信息参考文档或者Databricks社区版快速入门。
把数据保存成runs
你可以通过MLflow Python,R,Java或者REST API来把数据保存成runs,本章节主要介绍Python API。
Logging Functions/日志函数
mlflow.set_tracking_uri() 连接一个记录URI,也可以通过环境变量MLFLOW_TRACKING_URI
来配置,默认是本地的mlruns
目录。
mlflow.tracking.get_tracking_uri()返回当前的记录URI。
mlflow.create_experiment()创建一个新experiment并返回ID。通过将ID传入mlflow.start_run
可以启动experiment下面的runs。
mlflow.set_experiment()激活一个experiment。如果experiment不存在,则创建一个。
mlflow.start_run()返回当前激活的run,或者启动一个新的run并返回一个mlflow.ActiveRun
对象。不需要显示调用start_run,如果没有激活状态的run,日志函数会自动创建一个。
mlflow.end_run()结束当前处于激活状态的run。
mlflow.active_run()返回一个mlflow.entities.Run对象。
mlflow.log_param()记录一个当前run的key-value参数。使用mlflow.log_params()可以记录多个参数。
mlflow.log_metric()记录一个当前run的key-value指标。MLflow会记录每个metric的所有历史值。使用mlflow.log_metrics()可以记录多个指标。
mlflow.set_tag()给当前run设置一个key-value标签。使用mlflow.set_tags()设置多个标签。
mlflow.log_artifact()把一个本地文件或目录存储为一个artifact,可以通过artifact_path指定run的artifact URI。Run artifacts可以通过目录的方式组织。
mlflow.log_artifacts()把指定目录下的所有文件存储为一个artifact。
mlflow.get_artifact_uri()返回当前run指定的artifact URI。
在一个程序中启动多个runs
有时候你希望能够在一个程序中启动多个runs,比如你在执行一个超参数搜索程序或者你的experiments运行非常快。mlflow.start_run()返回的ActiveRun对象是一个python context manager。你可以通过以下代码块来限定每个run的范围。
with mlflow.start_run():
mlflow.log_param("x", 1)
mlflow.log_metric("y", 2)
...
在with语句中,这个run会保持打开状态,语句退出或者有异常时会自动关闭。
通过指标记录模型表现
你通过log方法来记录各个指标,log方法提供了两个可选方法用于区分指标的x-axis:timestamp和step。
timestamp是metric被记录的时间,默认是当前时间。
step是训练过程的量化值,可以是迭代次数,轮数或者其他值,默认是0并且有以下要求和特性:
- 一定是个合法的64位整型
- 可以是负数
- 可以是非连续的,比如(1,3,2)也是合法的
- 可以有跳跃性的,比如(1,5,74,-10)也是合法的
你可以同时指定timestamp和step,MLflow会分别存储。
Python示例:
with mlflow.start_run():
for epoch in range(0, 3):
mlflow.log_metric(key="quality", value=2*epoch, step=epoch)
可视化指标
下图取自quick start,包含一个step x-axis和两个timestamp x-axis。
自动记录TensorFlow和Keras的日志(experimental)
在训练之前调用mlflow.tensorflow.autolog()或mlflow.keras.autolog()即可,参考Tensorflow和Keras的例子。
自动记录以下信息:
注意 tf.keras 使用 mlflow.tensorflow.autolog(), 而不是 mlflow.keras.autolog().
组织experiments中的runs
MLflow允许你在experiments中组织runs,这样可以方便的对比处理同个任务的不同runs。你可以通过命令行mlflow experiments
或者python API mlflow.create_experiment()创建experiments。你可以在命令行中为单独的run指定experiment,例如mlflow run ... --experiment-name [name]
或者通过环境变量MLFLOW_EXPERIMENT_NAME
来指定。或者用experiment ID(--experiment-id命令行参数或者MLFLOW_EXPERIMENT_ID环境变量)也行。
# Set the experiment via environment variables
export MLFLOW_EXPERIMENT_NAME=fraud-detection
mlflow experiments create --experiment-name fraud-detection
# Launch a run. The experiment is inferred from the MLFLOW_EXPERIMENT_NAME environment
# variable, or from the --experiment-name parameter passed to the MLflow CLI (the latter
# taking precedence)
with mlflow.start_run():
mlflow.log_param("a", 1)
mlflow.log_metric("b", 2)
通过追踪服务API来管理Experiments和Runs
MLflow提供了更详细的追踪服务API来管理experiments和runs,主要是用mlflow.tracking模块的client SDK。这样就可以查询过去runs的数据,记录更多日志,创建experiments,添加tag等。
from mlflow.tracking import MlflowClient
client = MlflowClient()
experiments = client.list_experiments() # returns a list of mlflow.entities.Experiment
run = client.create_run(experiments[0].experiment_id) # returns mlflow.entities.Run
client.log_param(run.info.run_id, "hello", "world")
client.set_terminated(run.info.run_id)
为Runs添加标签
mlflow.tracking.MlflowClient.set_tag()方法可以为runs添加个性化标签。一个标签一次只能有一个唯一值。例如:
client.set_tag(run.info.run_id, "tag_key", "tag_value")
注意:不要用mlflow作为tag的前缀,以下是系统tags
。
追踪UI
追踪UI能够可视化,搜索,对比runs,也能下载run的产品或者元数据。
如果将runs记录在本地mlruns目录,只需要在mlruns的上层目录中运行mlfow ui就可以。
或者你也可以通过MLflow tracking server来访问远程的runs。
UI主要包括以下功能:
- 基于experiment的run列表和对比
- 根据参数或者指标搜索runs
- 可视化run的指标
- 下载run的结果
通过编程查询runs
引用artifacts
- /Users/me/path/to/local/model
- relative/path/to/local/model
- /. 例如:
- s3://my_bucket/path/to/model
- hdfs://:/
- runs:/<mlflow_run_id>/run-relative/path/to/model
例如
# Tracking API
mlflow.log_artifacts("<mlflow_run_id>", "/path/to/artifact")
# Models API
mlflow.pytorch.load_model("runs:/<mlflow_run_id>/run-relative/path/to/model")
MLflow Tracking Servers
你可以通过mlflow server
命令启动一个tracking server,一个样例配置:
mlflow server \
--backend-store-uri /mnt/persistent-disk \
--default-artifact-root s3://my-mlflow-bucket/ \
--host 0.0.0.0
存储
一个MLflow tracking server包含两个存储组件:后端存储和产品存储。
后端存储用于保存experiment和run的元数据,比如参数,指标,标签等。后端存储支持两种类型:文件存储,数据库存储。通过--backend-store-uri
来配置后端存储类型。
- ./path_to_store 或者 file:/path_to_store
- SQLAlchemy database URI:+
MLflow系列2:MLflow追踪的更多相关文章
- MLflow系列4:MLflow模型
英文链接:https://mlflow.org/docs/latest/models.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11946260.htm ...
- MLflow系列3:MLflow项目
英文链接:https://mlflow.org/docs/latest/projects.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945432.h ...
- MLflow系列1:MLflow入门教程(Python)
英文链接:https://mlflow.org/docs/latest/tutorial.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11943280.h ...
- 一点理解之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
@2019-02-14 [小记] CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库,用来将单片机故障状态寄存器值翻译出来输出至终端上以便排错 CmBacktrace: AR ...
- ARM Cortex-M 系列 MCU 错误追踪库 心得
一. 感谢CmBacktrace开源项目,git项目网站:https://github.com/armink/CmBacktrace 二. 移植CmBacktrace 2.1 准备好CmBacktra ...
- 【mlflow】mlflow打包、启动、换用mysql backend、mysql配置
mlflow是一个自动化机器学习平台,支持python2也支持python3 mlflow9.0添加了数据库作为tracking data的存储: https://github.com/mlflow/ ...
- 33.Odoo产品分析 (四) – 工具板块(4) – 问题追踪及群发邮件营销(1)
查看Odoo产品分析系列--目录 问题追踪 该应用程序允许您管理项目中可能遇到的问题,如系统中的bug.客户投诉或物料故障. 该模块安装后没有菜单显示,而是作为后台管理,接收一些问题报告. 群发邮件 ...
- Sqlautocode使用过程的一些坑
Sqlautocode是SQLAlchemy一个数据库映射工具,可以将数据库文件映射为python代码,直接在程序中移植使用.最近在使用过程中遇到了一些坑,通过用代码编辑工具pycharm阅读源码和多 ...
- 阿里重磅开源全球首个批流一体机器学习平台Alink,Blink功能已全部贡献至Flink
11月28日,Flink Forward Asia 2019 在北京国家会议中心召开,阿里在会上发布Flink 1.10版本功能前瞻,同时宣布基于Flink的机器学习算法平台Alink正式开源,这也是 ...
随机推荐
- Spring Boot加载application.properties配置文件顺序规则
SpringApplication会从以下路径加载所有的application.properties文件: 1.file:./config/(当前目录下的config文件夹) 2.file:./(当前 ...
- CDA数据分析【第一章:数据分析概述】
一.数据分析行业发展 1.如何收集.保存.管理.分析.共享正在呈指数式增长的数据是我们必须要面对的一个重要挑战. 2.数据分析包括数据采集.数据存储.检查.清洗.分析.转换和建模等方法对数据进行处理的 ...
- Tuple VS ValueTuple
深入理解 c# 元组与值元组(Tuple,ValueTuple) 为什么有此文章 首先要说的是我们公司内部技术框架是用 abp.vnext 框架整合而来的,我们架构师对于 abp 相关的知识都很了然于 ...
- H3C CSMA/CA
- 《linux就该这么学》课堂笔记09 存储结构、磁盘划分
Linux一切都是文件 "/"为根目录(万物起始) **挂载后要想永久生效,需要修改开机启动项 vim /etc/fstab
- 程序员式优雅表白,教你用python代码画爱心
还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...
- 【解决】Error: ENOSPC: no space left on device, watch
发现问题: 启动 node 项目ReactNative时候出现报错Error: ENOSPC: no space left on device, watch [root@iz2zeihk6kfcls5 ...
- Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置
Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义站点主页面 [root@node101.yi ...
- test20191210 钟子谦
100+40+0=140.暴力没写满-- 简单模拟 很久很久以前,有一个 \(1\sim n\) 的排列 \(a\),还有一个长度为 \(q\) 的,每个元素在 \(1\) 到 \(n\) 之间的序列 ...
- SpringBoot——探究HelloWorld【三】
前言 前面我们写了helloworld的一个,这里我们对他进行分析 探究 那么下面就开始我们的探究之旅吧,首先从POM文件来,在POM文件中我们导入了项目所需要的依赖 POM文件 父项目 <pa ...
- MLflow系列4:MLflow模型