开发者学堂课程【Databricks数据洞察公开课:使用 Databricks 和 MLflow 进行机器学习模型训练和部署的应用实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1058/detail/15565
使用 Databricks 和 MLflow 进行机器学习模型训练和部署的应用实践
Anaconda 的安装包已经下载好了,下一步,要把 conda 的路径添加到系统路径中。
ecal
“s(/root/anaconda3/bin/conda shell.bash hook)”
然后,初始化 Conda
conda init
紧接着去创建一个新的 Anaconda 的环境
conda create-n m\flow-server
然后去激活这个环境。
conda activate m\flow-server
在这个新的环境中,我们去安装 python 3.9。
conda install pathon=3.9
conda install pymysql
由于,Mlflow server 需要将原数据存储到数据库中,所以,还需要 python 到Mysql的 connecter ,接着就可以使用 pip 去安装Mlflow Server。
Mlflow Server安装好之后需要在 Mysql 里创建一个新的数据库用来存储 Mlflow Server 的一些原数据信息,然后需要设置一些环境变:MLFLOW_OSS_ENDPOINT_URL=”
http://oss-cn-beijing.aliyuncs.com/mlflow-demo
这个环境变量是 OSS 的ENDPOINT 的URL ,它的组成是oss 以及地域和 OSS Bucket ,下方是AK ,AK KEY 和 AK SECRET
。
此外这里需要用到 Mlflow 和 OSS 的 conducter ,需要下载安装包,然后再在本地区安装,已经在本地下载好了后,直接在这个路径下执行 pip install ,如下图。
之后就可以在这个机器上启动一个Mlflow Server , Mlflow 的 Web UI 是开在5000端口,如下图:
可以看到Mlflow Server 已经运行起来了,但是目前这里还没有实验,也没有模型, Mlflow Server 环境搭建好之后,就可以在 DDI 的 notebook 上进行操作,首先把需要的包都给导入进来,然后需要设置三个环境变量,如下图:
和前面的 ECS Server 设置的环境变量是一致的,再去设置一下 log 的级别,如下图:
还有下图定义了一个计算均方误差,平均绝对误差和 R2 的一个函数,这是用来计算模型的相应的指标的。
之后,将 OSS 中的训练数据加载进来,下图是红酒质量数据,对应的每一行的是红酒的酸碱度,然后还有含糖量以及酒精含量等等这些信息,最后一列呢是这个酒的质量
把这些数据加载进来,加载完成后,我们先把它转成 Pandas ,
Pandas 的data free ,然后把它分割成训练集和测试集
然后,使用 SK LUNCH 去搭建一个简单的线性回归的模型,这里的参数设置为0.6和0.1如下图:
然后需要去设置tracking server的 uri ,使用的是内网的地址: http://10.0.0.246:5000/
之后去创建一个实验环境,这个实验环境的名称叫 wine quality ,还需要设置模芯的存储地址,是存储到 models 里。
环境创建好之后,就可以开启一次实验,开启一次实验与打开一个文件是类似的,使用 with 语句,然后start run 方法就可以开启一次实验。
首先去把参数给记录下来,再使用这个 log_param 的 alpha 还有 l1_racial这两个参数记录下来,去创建一个简单的线性回归模型,之后使用train_x,train_y去训练这个模型,再计算这个模型的性能指标,再使用 log metric 把这些性能指标给记录下来,最后还需要把训练好的模型给记录下来,在这个 Mlflow 的这个 Web UI 上,可以看到实验以及这次实验产生的模型,还有性能指标以及参数。
在这次实验的详情页面,可以看到这次实验的详细的信息,比如参数、性能指标,还可以为这次实验打上一些标签,方便快速的去检索这个这次实验。
还有这次实验相关的一些 Artifacts ,包括了模型的参数、执行环境、以及这次训练得到的模型。
参数:执行环境:模型:
再次回到这个 DDI的这个notebook ,去修改一下 alpha 和 r1_ratio ,再次去执行一次实验。
多修改几次:
在 Mlflow 的这个界面,就会看到新生成了两次实验。
并且可以将两次实验进行一个简单的对比,可以对比它们的性能指标和参数之间的关系。
在 Models 里可以看到,4次执行的这些模型以及它的版本。
可以把这个模型标记一下,标记为它目前处于什么阶段,它是出于那个 Staging阶段还是处于生产的阶段。
Mlflow的模型部署也非常的简单,比如这次实验它的性能不错,那要如何去部署它,先把Model 的 OSS path copy下来。
只需要在 ECS server上去执行这样一条指令。
模型已经部署在12345端口
可以使用personnel 调用模型得到推断的结果。
使用 Post 方法。在 Body 面传入相应的参数。调用接口就可以得到反馈结果。
从开始一次实验去训练模型到模型的部署,整个流程都可以通过 Mlflow 去搞定,而且 Mlflow UI上会显示所有的实验以及所有训练好的模型。