机器学习工作流程
机器学习(ML)通常需要使用广泛的数据集、数据预处理步骤和算法逻辑进行实验,以构建最优指标的模型。模型构建成功后,还需要将其部署到生产系统,监控其效果和性能,并根据新数据不断对其进行重新训练和迭代模型工作,如下:1
早期,各种算法烟花齐放,多种框架各自为政,因此,如何保障 ML 流程的生产可靠性和共通性成了一个棘手问题,具体如下:
追踪实验困难:如果只是在笔记本电脑或 Jupyter Book [0] 上处理文件,你如何汇总数据、代码、参数和对应的结果呢?
复现代码困难:有时候我们对代码版本和参数进行细致的保存,由于环境的不一致或某个第三方依赖包版本的不一致,换平台复现代码,通常也比较困难。
缺少统一的打包、部署模型标准:多团队协作或多深度框架协作时,都有各自的一套模型管理方式,导致不通用。
缺少模型管理Hub:缺乏统一的模型管理服务,各自维护自己的算法,重复造轮子常态化。
MLflow 解决了什么问题?
MLflow
是一个用于管理 ML 生命周期的开源平台,旨在简化机器学习的开发流程,提供实验追踪、将代码打包成可重现的运行模块以及共享和部署模型功能。支持多种工具和内嵌算法,使算法开发者能更加专注于算法本身的工作。
项目架构
MLflow
提供了一组轻量级 API,可用于任何现有的机器学习应用程序或库,如:TensorFlow、PyTorch、XGBoost 等。MLflow
还支持在任何环境中运行 ML 代码,如:本地笔记本电脑、独立应用程序或者云环境中MLflow
目前提供四个组件,具体如下:
MLflow Tracking
用于记录机器学习实验中的参数、代码、数据和结果,并提供交互式 UI 和 API 支持实验对比和查看。
MLflow Projects
可在任何平台上重复运行的打包格式,基于 Conda 和 Docker 构建,因此你可以很方便的与他人共享你的 ML 代码,并且可在任何平台上重复运行它们。
MLflow Models
将模型发送到各种部署工具的通用格式,支持让你轻松的将相同模型(如:来自其他任务 ML 库)部署到 Docker、Apache Spark Azure ML 和 AWS SageMaker 等平台的批处理或实时处理任务。
MLflow Registry
一个集中的模型存储库,提供了简单的 API 和UI,支持在公共存储库中存储、注释、发现和管理模型,主要用于协作管理 MLflow 模型的整个生命周期。
API 算法服务构建
- Anaconda环境搭建,可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本
mlflow安装
pip install mlflow
OR
conda install mlflow
UI启动
git clone https://github.com/mlflow/mlflow.git
cd mlflow/examples
mlflow ui
模型运行
# 模型生成
python sklearn_logistic_regression/train.py
# 启动算法服务
mlflow models serve -m runs:/<Model_id>/model --port 1234
可能报错:mlflow.utils.process.ShellCommandException: Non-zero exitcode: 1
mlflow models serve -m runs:/<Model_id>/model --port 1234 --no-conda
# API 推理验证
curl -d '{"columns":["x"], "data":[[1], [-1]]}' -H 'Content-Type: application/json; format=pandas-split' -X POST localhost:1234/invocations
# 结果:[1, 0]
对于简单的输入->推理->结果
场景,通过使用MLflow
平台功能,我们只需要专注于train.py
代码开发即可很方便的完成一个算法的训练和上线工作。
但生产场景多种多样,有时候并不仅仅是一个简单的算法API就可以满足,算法直接还可能存在层级关系、依赖关系、转换关系,我们接着往下。
流处理服务构建
API算法服务
中MLflow
旨在输出一个完全独立的算法服务,而流处理服务
中描述了如何将多个API算法服务
链接在一起,每个运行都封装一个转化或者训练步骤,定义各个流程间的接口和允许缓存和重用中间结果,如下:
该流程包含四个步骤:
- Load 流程:加载数据集
- ETL 流程: ETL 预处理数据集
- ML 流程: ML 预处理数据集
- Train流程:模型训练
具体代码参见:[3]
总结一下
优点:相比谷歌的 TFX、Facebook FBLearner Flow等平台,MLflow的创建为了统一多种深度框架训练标准和流程管理标准,立意更高。支持多种模型存储方式和软件插件机制,便于第三方集成和定制接入。
缺点:当前 MLflow Pipeline 还过度依赖代码,缺少平台功能,对于快速接入生产,需要一定的学习成本。
参考文档
- [0] https://jupyter.org/
- [1] https://github.com/mlflow/mlflow
- [2] https://mlflow.org/docs/latest/index.html
- [3] https://github.com/mlflow/mlflow/tree/master/examples/multistep_workflow
❤️❤️❤️读者每一份热爱都是笔者前进的动力!
我是三十一,感谢各位朋友:求点赞、求评论、求转发,大家下期见!