MLOps极致细节:2. MLFlow Tracking 案例介绍(Gitee代码链接)
MLflow Tracking
是一个API以及包含UI界面,能够允许我们记录代码中的log matrics和artifacts文件,查看运行历史记录,并且进行一些结果的数据可视化。
在这个案例中,我们会具体说明MLflow Tracking
如何被使用,以及结果。相关的代码存于此gitee链接。首先,我们先简单地过一遍概念,然后介绍如何把这个代码跑起来。关于此代码的详细解释,请参见我的博客:MLOps极致细节:3. MLFlow Tracking 案例代码解读。
- 平台:Win10。
- IDE:Visual Studio Code
- 需要预装:Anaconda3。
1 一些概念
当我们使用MLFlow Tracking,例如,引用了log_metric, log_param, log_artifacts
这些模块,运行代码过后,我们会发现,系统会自动生成一个mlruns
的文件夹,里面就会包含我们Tracking的日志等相关文件。这些记录包括:
Code Version
Start & End Time
:每次项目运行(experiment run)的开始和结束时间Source
:运行文件的名称,或者MLflow项目运行时的项目名称和entry point。Parameters
:日志的参数。键(Key)和值(Value)都是字符串(String)。Metrics
:键(Key)-值(Value)矩阵。值是一个数字(numeric)。Artifacts
:以任何格式输出文件。例如,图片,模型和数据文件都可以作为artifacts。
2 数据保存
MLFlow项目运行后,默认会将上述数据记录到本地(mlruns
文件夹下),也支持保存至与SQLAlchemy兼容的数据库,或者远程记录到服务器。然后我们可以运行mlflow ui
查看记录的运行,以及一些可视化结果。这里我们先不一一描述,而是将重点放在保存到本地。
此图直白地介绍了我们将MLFlow的Tracking记录保存到本地的情况,即,后端数据(backend)和工件(artifacts)都存储在本地文件并共享一个目录:mlruns
。MLFlow客户端可以直接与FileStore和LocalArtifactRepository的实例接口。
3 相关函数的介绍
这里,我们将简单介绍几个常用的MLFlow Tracking
相关函数。详细的描述见此网站。
experiment
相关。mlflow.create_experiment()
: 创建一个新的experiment
,返回experiment_id
。我们可以在这个基础上使用mlflow.start_run
来run我们的代码。与experiment
相关的函数还有:mlflow.set_experiment()
,mlflow.get_experiment()
等;run
相关。mlflow.start_run()
:启动一个新的MLflow run,在这个run里面我们可以log_param
或者log_metric
。通常这个函数和with一起使用(见下面的例子);最后,我们调用end_run()
来终止当前项目run的运行。与run
相关的函数还有:mlflow.end_run()
,mlflow.active_run()
等;tag
相关。mlflow.set_tag()
:在当前的run中设置单个Tag标记。键(Key)和值(Value)都是字符串。与tag
相关的函数还有:mlflow.set_tags()
;log
相关。mlflow.log_param()
:记录单一的键(Key)和值(Value)参数;mlflow.log_metric()
:记录单一的键(Key)和值(Value)“矩阵”;mlflow.log_artifact()
:记录一个本地的文件或者路径。(我们会在之后的例子中解释三者的区别);
4 代码运行
在运行起代码之前,我们还是需要在我们的主机(host machine)新建虚拟环境(比如conda create -n [your vm name] python=3.8
),python版本按照你的主机运行环境而定,我这边3.8,3.9都可以。进入虚拟环境(conda activate [your vm name]
)。
然后,我们将代码克隆到本地:git clone https://gitee.com/yichaoyyds/mlflow-ex-tracking-basic.git
,进入文件夹:cd mlflow-ex-tracking-basic
,安装好依赖(pip3 install mlflow -i requirements.txt
)。
运行代码:python mlflow_tracking_ex.py
。