
作者:王磊
更多精彩分享,欢迎访问和关注:https://www.zhihu.com/people/wldandan
2022年3月,MindSpore易用性SIG成立后,很快吸引了不少开发者加入SIG群中进行交流。作为和开发者进行连接的桥梁,易用性SIG的目标是和开发者共同打造易学易用、灵活高效的AI框架,持续提升MindSpore易用性,助力开发者成功。
通过易用性SIG,我们不仅倾听开发者的声音,为开发者提供帮助,也希望能和开发者一起围绕“MindSpore的学习与实践”这个主题,打造一些有趣的开源项目。
MindSpore易点通机器人是易用性SIG发起的一个开源项目,希望能够基于MindSpore框架提供的能力,与社区一起从0到1打造易用性问答机器人,帮助提升MindSpore易用性,更多背景请参考 01-MindSpore易点通机器人介绍
本篇文章,我们将梳理需求、设计初始架构、定义MLOps,为后续迭代工作提供输入。
通过提供面向MindSpore开发者学习和使用的智能机器人服务,接受用户问题查询,自动帮助开发者找到问题答案,覆盖80%以上常见问题,提升社区开发者体验,提升用户满意度。
主要包括三大功能:
1) 问题答案查询场景 : 直接回答用户关于MindSpore官网/资料/指南等问题,举例如下所示:
学习型用户,当我提出关于学习教程的问题,期望机器人回答教程清单- 用户提问:图像分类相关的教程有哪些?
- 响应:返回图像分类相关的教程地址。
教学/科研型用户,当我提出从Pytorch到MindSpore迁移的问题时,期望机器人回答API映射信息- 用户提问:pytorch torch.chunk api 对应的MindSpore API是什么?
- 响应:对应的接口为 mindspore.ops.split,详细地址为(https://mindspore.cn/docs/api/zh-CN/r1.6/api_python/ops/mindspore.ops.Split.html#mindspore.ops.Split)。
生产型用户,当我提出精度调试调优的问题,期望机器人回答精度调优以及错误定位相关清单- 用户提问:精度问题如何定位?
- 响应:返回精度调优、定位相关的案例以及指南文章。
2) 多轮对话交互场景 :通过多轮对话缩小用户问题范围,从而给出答案,举例如下所示:
学习型用户,当我提出安装的问题,期望机器人交互式获取详情并回答- 用户提问:安装mindspore,提示该版本不支持当前平台。
- 响应:请输入您的操作系统版本及处理器。
- 用户回答:win10、intel处理器。
- 响应:请输入您的显卡相关信息。
- 用户回答:AMD集成显卡。
- 响应:请输入您安装的MindSpore版本。
- 用户回答:mindspore_gpu 1.6.0。
- 响应:mindspore当前不支持 AMD显卡,请安装CPU版本。
教学科研型用户,当我提出MindInsight无法运行问题,期望机器人交互式获取详情并回答- 用户提问:请问在Ubuntu上安装了MindInsight运行时提示无法使用,应该怎么解决?
- 响应:请问使用的是什么操作系统?
- 用户回答:Ubuntu。
- 响应:请输入提示的错误信息。
- 用户回答:提示8080端口无法使用。
- 响应:8080端口可能已被占用,建议切换启动端口,如 mindinsight start --port 8080 --summary-base-dir xxx。
生产型用户,当我提如何部署问题,期望机器人交互式获取详情并回答- 用户提问:模型如何部署到生产环境?
- 响应:请问部署的目标硬件是什么?
- 用户回答:GPU。
- 响应:请问部署的操作系统是什么?
- 用户回答:Windows。
- 响应:请问是离线还是在线部署?
- 用户回答:离线。
- 响应:给出MindSpore Lite Windows版本下载地址以及相应的指南。
3) 问答推荐场景 :推荐相关的问题和答案
- 用户提问:龙芯支持的版本?
- 响应:您可能想了解以下问题:
- 1. 如何在青松服务器上编译MindSpore?
- 2. 如何在海光服务器上编译MindSpore?
该部分从四个主要视图(逻辑视图、开发视图、部署视图和运行视图)展开,指导后续实现。
主要包括 业务模型、技术模型(技术选型)、API设计、数据模型。
1) 业务模型
逻辑架构如下图所示,NLP服务接受来自多客户端的请求,返回生成的应答内容。

逻辑架构
主要模块如下所示 :
2) 技术模型
我们将NLP服务作为独立的微服务在云上以容器形式部署运行,同时利用云侧提供的服务,完成NLP服务的监控、高可用和安全性保障。

技术模型
主要技术方案:
客户端
NLP服务
数据服务
监控服务
基于APM实现基础监控,通过自定义指标实现业务监控。
3) API设计
针对问答过程,客户端使用REST API完成提问及获取答案:
- GET /query
- Request:{
- question: string,
- tag: string //标记问题的类型或者领域
- }
- Response:
- {
- question: string,
- answer: string,
- tag: string,
- ref: string //承载url链接,针对某些问答可能需要给出参考链接的场景
- }
4) 数据模型
数据模型主要考虑数据集的格式。数据集使用csv格式进行存储,主要包含以下字段:文档内容,流程,标签。
样例
| title | link | content | process | tag |
|---|---|---|---|---|
| id | http://.... | Conda方式安装MindSpore GPU版本 | 安装 | GPU、Linux |
开发视图通常承载代码结构、流水线设计等内容。
1) 代码结构
当前MindSpore易点通机器人的代码仓按照如下目录组织:
- 代码仓结构:
- data:源数据目录
- src: 源码目录
- - Data:数据处理
- - Train: 训练代码
- - inference :推理代码
- tests:自动化测试代码
- scripts: CI/CD相关脚本
- infra:基础设施即代码的配置
- workflow:Argo workflow的配置文件
- notebooks:Jupyter notebook,记录案例教程
- Jenkinsfile:CI/CD流水线配置文件
- Dockerfiles:镜像打包配置文件
2) 流水线设计

MLOps流水线设计
流水线分类
构建元素
版本管理
对于NLP服务云侧部署,参考微服务的云原生部署方式,最大程度的利用云服务来保障系统的高可用,弹性,并降低维护成本。

部署视图
云侧部署:
运行视图介绍NLP服务以及在端侧IDE运行时的进程详情。

运行视图
NLP服务以及客户端的运行视图比较简单,NLP服务和HTTP服务运行在一个进程中,而IDE客户端则作为插件和IDE进程运行在一起。
该篇文章主要介绍了设计的4类主要视图:逻辑视图、开发视图、部署视图、运行视图。
完成初步设计后,我们接下来就可以参考《03-迭代0:机器学习项目开始前要做哪些准备工作?》开始迭代0