当前位置:网站首页>【MindSpore易点通机器人-02】设计与技术选型
【MindSpore易点通机器人-02】设计与技术选型
2022-08-10 14:22:00 【昇思MindSpore】

作者:王磊
更多精彩分享,欢迎访问和关注: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,为后续迭代工作提供输入。
一、需求梳理
1. 功能概述
通过提供面向MindSpore开发者学习和使用的智能机器人服务,接受用户问题查询,自动帮助开发者找到问题答案,覆盖80%以上常见问题,提升社区开发者体验,提升用户满意度。
主要包括三大功能:
- 问题答案查询:直接回答用户关于MindSpore官网/资料/指南等问题。
- 多轮对话交互:通过多轮交互引导用户补充问题上下文,最终精准找到答案。
- 问答推荐:如果没有准确命中的答案,可以给用户推荐相似的3个问题和答案。
2. 需求故事(Epic Story)
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?二、 架构设计
该部分从四个主要视图(逻辑视图、开发视图、部署视图和运行视图)展开,指导后续实现。
1. 逻辑视图
主要包括 业务模型、技术模型(技术选型)、API设计、数据模型。
1) 业务模型
逻辑架构如下图所示,NLP服务接受来自多客户端的请求,返回生成的应答内容。

逻辑架构
主要模块如下所示 :
- 客户端:表征以REST方式发起请求的用户,包括IDE、MindSpore主页、公众号,掌中宝、Gitee等。
- NLP服务(业务层):提供语义理解、内容生成、会话管理等能力。
- 数据服务(数据层):提供模型版本存储、会话状态、知识图谱的数据管理能力。
- 监控服务:提供基础的生产环境、基础设施监控以及业务监控能力。
2) 技术模型
我们将NLP服务作为独立的微服务在云上以容器形式部署运行,同时利用云侧提供的服务,完成NLP服务的监控、高可用和安全性保障。

技术模型
主要技术方案:
客户端
- IDE:基于PyCharm,提供UI节目。
- 主站:基于Reactjs实现对话框;
- Gitee:通过Webhook方式对接;
NLP服务
- 基于Bert模型完成意图识别、内容生成。
- REST API基于Serving实现。
数据服务
- 模型版本:数据和模型打包在一起,通过SWR管理。
- 会话状态:基于Redis管理。
- 知识图谱:基于Gauss数据库管理。
监控服务
基于APM实现基础监控,通过自定义指标实现业务监控。
3) API设计
针对问答过程,客户端使用REST API完成提问及获取答案:
GET /query
Request:{
question: string,
tag: string //标记问题的类型或者领域
}
Response:
{
question: string,
answer: string,
tag: string,
ref: string //承载url链接,针对某些问答可能需要给出参考链接的场景
}4) 数据模型
数据模型主要考虑数据集的格式。数据集使用csv格式进行存储,主要包含以下字段:文档内容,流程,标签。
- content:文档内容,为文档所有的文字内容,以便匹配用户的搜索关键词。
- process:流程主要是tag信息,用于聚类,反问;当前定义流程为(不建议自行增加流程):安装,数据处理,代码编写,编译,调试,调优,推理。
- tag:内容可能归属于多个tag(领域),环境也属于tag信息,只是从不同角度进行定义,如系统信息(Windows、Mac),芯片架构(CPU、GPU),AI领域(NLP、CV)。
样例
| title | link | content | process | tag |
|---|---|---|---|---|
| id | http://.... | Conda方式安装MindSpore GPU版本 | 安装 | GPU、Linux |
2. 开发视图
开发视图通常承载代码结构、流水线设计等内容。
1) 代码结构
当前MindSpore易点通机器人的代码仓按照如下目录组织:
代码仓结构:
data:源数据目录
src: 源码目录
- Data:数据处理
- Train: 训练代码
- inference :推理代码
tests:自动化测试代码
scripts: CI/CD相关脚本
infra:基础设施即代码的配置
workflow:Argo workflow的配置文件
notebooks:Jupyter notebook,记录案例教程
Jenkinsfile:CI/CD流水线配置文件
Dockerfiles:镜像打包配置文件2) 流水线设计

MLOps流水线设计
流水线分类
- 构建(CI/CD)流水线:包含代码规范检查、单元测试、接口测试,完成代码打包和自动化部署。
- 训练( CT )流水线:数据处理(生成新语料库)、训练模型、评估模型、发布新版本模型。
构建元素
- 模型及推理代码包(容器)。
- 语料数据集(CSV/MindRecord)。
版本管理
- 数据版本管理:可分为原始数据以及语料库数据(mindrecord格式),使用OBS进行存储及版本管理。
- 模型版本管理:同样通过OBS托管模型,也可以考虑和推理代码打包在一起发布到到镜像仓库进行版本管理。
3. 部署视图
对于NLP服务云侧部署,参考微服务的云原生部署方式,最大程度的利用云服务来保障系统的高可用,弹性,并降低维护成本。

部署视图
云侧部署:
- 极简部署:负载均衡(ELB),NLP服务器(CCE 容器),状态存储(Redis)。
- 高可用:NLP服务多AZ部署,Redis主从。
- 安全性:NLP服务只接收ELB安全组请求,Redis只接收NLP服务安全组请求。
- 可维护性:监控指标聚合到APM服务,NLP服务上传自定义指标到APM。
4. 运行视图
运行视图介绍NLP服务以及在端侧IDE运行时的进程详情。

运行视图
NLP服务以及客户端的运行视图比较简单,NLP服务和HTTP服务运行在一个进程中,而IDE客户端则作为插件和IDE进程运行在一起。
三、总结
该篇文章主要介绍了设计的4类主要视图:逻辑视图、开发视图、部署视图、运行视图。
完成初步设计后,我们接下来就可以参考《03-迭代0:机器学习项目开始前要做哪些准备工作?》开始迭代0
边栏推荐
- The a-modal in the antd component is set to a fixed height, and the content is scrolled and displayed
- mysql进阶(三十三)MySQL数据表添加字段
- 使用决策树对鸢尾花进行分类
- vue 怎么清除tab 切换缓存问题 ?
- C#实现访问OPC UA服务器
- MQTT服务器搭建
- 开源SPL消灭数以万计的数据库中间表
- AWS 安全基础知识
- High-paid programmers & interview questions series 135 How do you understand distributed?Do you know CAP theory?
- 正则表达式(包含各种括号,echo,正则三剑客以及各种正则工具)
猜你喜欢

记录几道整型提升的题目

强意识 压责任 安全培训筑牢生产屏障
![[Gazebo Introductory Tutorial] Lecture 3 Static/Dynamic Programming Modeling of SDF Files](/img/ec/87566763daf7faa3769ee186f93ee0.jpg)
[Gazebo Introductory Tutorial] Lecture 3 Static/Dynamic Programming Modeling of SDF Files

Alibaba的秒杀系统—千亿级并发设计手册上线了

Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!

【Gazebo入门教程】第三讲 SDF文件的静/动态编程建模

Send a post request at the front desk can't get the data

统信 UOS V20 专业版(1050update2)发布:文件共享、全局搜索等优化

1W字详解线程本地存储 ThreadLocal

C#实现访问OPC UA服务器
随机推荐
How is the monthly salary table stored in the database?Ask for a design idea
【剑指offer】---数组中的重复数字
MySQL - storage engine for databases
Summary of Force Buckle Solution 640 - Solving Equations
Flask框架——MongoEngine使用MongoDB数据库
“Oracle 封禁了我的账户”
【有限元分析】异型密封圈计算泄漏量与参数化优化过程(带分析源文件)
Send a post request at the front desk can't get the data
【量化交易行情不够快?】一文搞定通过Win10 wsl2 +Ubuntu+redis+pickle实现股票行情极速读写
Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!
使用决策树对鸢尾花进行分类
一种能让大型数据聚类快2000倍的方法,真不戳
学习日记8
[target detection] small script: extract training set images and labels and update the index
PHP 判断文件是否有内容,没有内容则复制另一个文件写入
【POI 2008, BLO】割点
正则表达式(包含各种括号,echo,正则三剑客以及各种正则工具)
How does vue clear the tab switching cache problem?
简单的写一个防抖跟节流
一汽奥迪:持续34年聚焦品质与体验 立足市场需求推进产品迭代