
作者:王磊
更多精彩分享,欢迎访问和关注:https://www.zhihu.com/people/wldandan
在上一篇【MindSpore易点通机器人-02】设计与技术选型,我们介绍了MindSpore易点通机器人整体的设计,本篇将会向大家介绍进入迭代0所需要的准备工作。在03-迭代0:机器学习项目开始前要做哪些准备工作?中,提到了迭代0中需要准备的内容:
从MindSpore易点通机器人这个项目出发,按照实际的需求依次完成以上准备内容。
在机器学习的流程中,开发者需要在本地进行网络的开发调试,在CI上完成集成和部署,在训练流水线上完成持续训练和模型验证,在生产环境完成部署推理。因此,在这些不同的环境中,可能需要不同类型的计算资源。
训练和部署的具体资源数量可以根据实际的测试验证来选择规格。
开发环境准备涉及Python环境准备、MindSpore开发相关依赖安装、IDE安装配置等工作。其中Python的环境可以基于Miniconda完成,可以很方便的完成Python版本切换。对于MindSpore框架的开发,当前也有一系列自动化的脚本,帮助开发者快速完成安装配置工作。其它的依赖及IDE安装配置,都可以在MindSpore易点通机器人代码仓的README找到。
开发所需的具体的组件及作用如下:
版本控制包括三个部分,一个代码的版本控制,这部分通过gitee来完成,另外的包括数据和模型的版本控制,我们选择对象存储服务来承载,保证数据和模型的一对一的一致性,同时,对象存储服务也可以管理数据和模型的元数据信息(如版本等)。MindSpore易点通机器人项目使用了华为云的对象存储服务(OBS)作为训练数据和模型的版本管理工具。OBS是一个基于对象的存储服务,适合训练数据这种大规模但碎片化的类型的数据存储,同时不用担心扩容和数据可靠性问题。
OBS的使用很简单,通过华为云的Console选择OBS服务后,直接创建标准的OBS桶即可。训练流水线使用的Argo工具,可以在配置文件中直接对接OBS读写训练数据和模型。在OBS桶的概览中可以看到相关的连接信息,结合华为云用户的AK/SK完成读写操作。

MindSpore易点通机器人的MLOps流水线包含两个部分,CI/CD流水线以及持续训练流水线,其中本地我们基于WSL+Ubuntu+Minikube搭建K8S集群,在K8S集群上构建CI/CD流水线(Jenkins)以及持续训练流水线(参考MindSpore DX Sig的 MLOps-Tool项目)。

整个MLOps流水线运作的流程如下:
在代码仓库的Workflow目录给出了当前初步的训练例子的编排配置,使用argo summbit mnist-train-eval.yaml提交例子训练任务,从Argo的UI中看到运行的结果。

持续训练流水线完成时,会触发持续集成和部署流水线,由代码仓的Jenkinsfile基于Pipeline as Code完成初始流水线的构建。

迭代0主要看重端到端流程的打通,以保证后续功能的持续交付。迭代0的准备工作完成后,我们就可以开始下一步的训练数据准备工作了。