当前位置:网站首页>【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
边栏推荐
猜你喜欢
统信 UOS V20 专业版(1050update2)发布:文件共享、全局搜索等优化
图式图例规范尺寸
Error: Rule can only have one resource source (provided resource and test + include + exclude)
Error: Rule can only have one resource source (provided resource and test + include + exclude)
IT小白怎么系统的php学习
物资采购小程序开发制作功能介绍
MySQL interview questions
强意识 压责任 安全培训筑牢生产屏障
2022年五大云虚拟化趋势
重要通知 | “移动云杯”算力网络应用创新大赛初赛延期!!
随机推荐
redhat替换yum源时redhat.repo无法删除或无法禁用的问题解决方法
数学建模学习视频及资料集(2022.08.10)
简单的写一个防抖跟节流
基于ArcGIS水文分析、HEC-RAS模拟技术在洪水危险性及风险评估
vue 怎么清除tab 切换缓存问题 ?
从洞察到决策,一文解读标签画像体系建设方法论
普林斯顿微积分读本05第四章--求解多项式的极限问题
高数_证明_弧微分公式
The a-modal in the antd component is set to a fixed height, and the content is scrolled and displayed
1004 (tree array + offline operation + discretization)
高薪程序员&面试题精讲系列135之你对分布式是怎么理解的?CAP理论你知道吗?
字节终面:CPU 是如何读写内存的?
MySQL interview questions
镜像瘦身:每一层都不能放过
Vivado crashes or the message is not displayed
系统架构系列文章三--解决传统企业核心系统的性能问题
关于已拦截跨源请求CORS 头缺少 ‘Access-Control-Allow-Origin‘问题解决
[JS Advanced] Creating sub-objects and replacing this_10 in ES5 standard specification
开源SPL消灭数以万计的数据库中间表
司空见惯 - 股市狠狠下跌后,何時能反弹?