MLFlow的简单使用和理解
什么是MLflow
mlflow的口号喊的很响亮,实际我们分解开看,mlflow提供的其实是一个模型开发过程的管理平台,一个很轻量化的工具。
也就是说mlflow并不限制和关心你使用的什么机器学习框架,只是要求在模型开发过程中,使用mlflow提供的sdk的api对过程中的动作进行注册,以便在mlflow中进行监控。
同时mlflow提供了过程中的标准,包括日志,模型等,这样的好处就是mlflow可以统一的负责模型的管理和部署,以统一的模型服务对模型进行发布,还能基于不同版本对模型进行管理。
MLFlow的配置
我使用的mysql作为mlflow的tracking的存储介质:
mlflow server --backend-store-uri mysql+pymysql://root:baifachuan@localhost/mlflow --default-artifact-root file:./mlruns -h 0.0.0.0 -p 5000 |
可以看到mysql数据库中有这样的表:
mysql> use mlflow; |
用来把tracking的数据存储在表中。
结合MLFlow的开发
以下代码是我使用sklearn
构建的一个线性回归模型,并且将tracking注册到MLFlow进行跟踪。
# The data set used in this example is from http://archive.ics.uci.edu/ml/datasets/Wine+Quality |
模型保存后会存储在当前目录mlruns
下,按照不同的版本进行管理。
MLflow部署
MLFlow在部署的时候需要一个python
的运行隔离环境,和virtualenv
的概念类似,mlflow默认使用的conda,但是我自己本身已经有virtualenv
了,又不想再安装conda的全家桶污染环境,所以使用了手动的静默安装:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -O ~/miniconda.sh |
其中的参数解释如下:
-b---Batch mode with no PATH modifications to ~/.bashrc. Assumes that you agree to the license agreement. Does not edit the .bashrc or .bash_profile files. |
在运行部署的时候先设置Conda的环境变量:
export MLFLOW_CONDA_HOME=/Users/fcbai/software/workspace/python/mlflow_ws/miniconda |
紧接着启动部署:
mlflow models serve -m file:/Users/fcbai/software/workspace/python/mlflow_ws/mlruns/1/84bad08c43f34c78a4ada11ea0e30cf6/artifacts/model/ |
也可以指定端口:
mlflow models serve -m file:/Users/fcbai/software/workspace/python/mlflow_ws/mlruns/1/84bad08c43f34c78a4ada11ea0e30cf6/artifacts/model/ -p 8088 |
在经过启动部署后,有如下输出:
2021/01/20 10:26:06 INFO mlflow.pyfunc.backend: === Running command 'source /Users/fcbai/software/workspace/python/mlflow_ws/miniconda/bin/../etc/profile.d/conda.sh && conda activate mlflow-73c2330f885e4aee44450a5d5830493e7d78ae67 1>&2 && gunicorn --timeout=60 -b 127.0.0.1:5000 -w 1 ${GUNICORN_CMD_ARGS} -- mlflow.pyfunc.scoring_server.wsgi:app' |
代表模型正式启动,以htt的方式,json的协议提供模型的访问,例如:
curl -X POST -H "Content-Type:application/json; format=pandas-split" \ |
返回结果如下:
[6.379428821398614] |
整个流程便跑完了。
扫码手机观看或分享: