智能化软件开发微访谈·第二十期暨2022新年特辑:AI软件架构实践

bea7be51fe3c4704d747733245d73e2b.png

ca7844372872ab3347b36ad52866b37f.gif

90cf966e782b73831b873a43e84fbe43.gif

b25d8fdcfa4c5d810d816ce073969360.gif

2a819e0f44153fbc02ce5afe76d57dea.png

CodeWisdom

智能化软件开发沙龙是复旦大学CodeWisdom团队参与组织的专注于代码大数据与智能化软件开发的学术和技术沙龙,面向相关领域的学术界研究者和工业界实践者,通过各种线上和线下交流活动促进学术研究与实践技术的发展。微访谈是智能化软件开发沙龙依托沙龙微信群开展的线上交流活动,其形式是围绕某一具体话题邀请嘉宾进行在线访谈并与微信群成员互动。

73f483cebb98668e8555c69d8a7cf4e5.png

AI软件架构实践

b15d82ee9ec365ad79f6e306b42a74f0.png

outside_default.png

智能化软件开发微访谈·二十期

2022新年特辑

b8fdaf608368af8cdd23c8ea34b7c458.gif

17aad1d7a7a2e6d8f53a202024b91747.gif

7a39ab49370f143e127ac4ea03294f4c.png

机器学习和深度学习模型已经被广泛应用于电子商务、社交网络、智能汽车、智能安防、金融服务等各种领域,形成了大量AI软件系统。在这种系统中,机器学习和深度学习模型与传统的软件模块紧密集成在一起并密切交互,形成了完整的软件系统。机器学习和深度学习模型具有数据驱动和不确定性等方面的特性,其开发、测试和演化与传统的软件模块有很大区别。另一方面,在软件系统层面上,如何设计整体架构,让不同的机器学习和深度学习模型及其不同版本与其他软件模块构成一个有机的整体并实现持续的部署、更新和运维,也是需要探索的问题。

针对这些问题,本次微访谈邀请了来自学术界和工业界的多位专家,围绕AI软件架构及开发实践这一主题展开讨论,总结业界实践、分析相关技术问题以及未来的发展方向。

dc76f9302c3a0bb4db79c941d6e5e37f.gif

66398f23649b75ad42b5665605044f1d.png

彭鑫

复旦大学计算机科学技术学院教授

d43b28dfabef96699c8d4478ea5cd92c.gif

访

daf1c57953fac584d49c525634ea0e27.png

刘杨

南洋理工大学领导论坛首席教授

dea12e699efa3298965b6ff7cadc462b.png

潘青华

讯飞研究院副院长、AI工程院院长

88f08210d624db948f639084d9f76241.png

马雷

加拿大阿尔伯塔大学副教授

加拿大国家AI战略CIFAR AI Chair

cbea193a15e410df7015a7a2388c1507.png

余跃

国防科技大学副研究员

鹏城实验室开源研究所技术总师

c24d759872b528878227c79aaeb5fd64.png

陈碧欢

复旦大学计算机科学技术学院副教授,博导

80a72c9575904dbb8ffcf665e4c27182.png

冯洋

南京大学计算机系助理研究员

8a6c4042d9c552cb988c536fc60f53d6.png

鞠剑勋

携程旅游研发部算法专家

c09e14231db5156a53a76a4e22059bee.gif

访

AI软件架构实践

01

能否介绍下你所熟悉的一些典型的AI软件系统,这些系统采用了哪些机器学习和深度学习模型?用于实现什么样的能力?机器学习和深度学习模型之间以及与软件模块之间是什么样的交互和协作关系?是否存在一些通用的架构模式和策略,包括机器学习和深度学习模型及其不同版本与其他软件模块之间的组织结构和交互关系(类似于传统的软件设计模式、架构风格)?

02

当前AI软件系统中的机器学习和深度学习模型开发采用了什么样的软硬件技术栈?形成哪些技术生态?由此导致的环境和生态依赖对于AI软件开发带来了什么样的困难,与传统软件开发中的环境依赖和依赖管理有什么区别?

03

在企业开发实践中,机器学习和深度学习模型的功能和非功能性测试、分析和调试一般采用什么样的方法和技术?此外,在AI软件系统层面上的整体测试一般会采用什么样的策略和技术?

04

AI软件系统特别是其中的机器学习和深度学习模型是如何持续演化的,例如如何评估其效果、提出改进需求、实施改进和更新?AI软件系统特别是其中的机器学习和深度学习模型的版本如何管理?

05

在用户端和云端运行的AI软件系统一般都采用了什么样的部署结构和部署方式?云端的AI软件系统是否有采用当前流行的云原生和微服务架构?其中的机器学习和深度学习模型如何进行服务化封装、部署、动态更新和持续的运维管理?云原生和微服务系统中广泛采用的动态伸缩以及熔断、限流等可用性保障策略在AI软件系统中是否有所应用?

06

AI软件系统的架构设计及其开发、测试、运维和长期演化方面存在哪些问题和挑战?有哪些AI软件系统工程实践问题需要学术界进一步关注和探索?

1e53795eee871397bb0334d788a90516.gif

访

Question 1

能否介绍下你所熟悉的一些典型的AI软件系统,这些系统采用了哪些机器学习和深度学习模型?用于实现什么样的能力?机器学习和深度学习模型之间以及与软件模块之间是什么样的交互和协作关系?是否存在一些通用的架构模式和策略,包括机器学习和深度学习模型及其不同版本与其他软件模块之间的组织结构和交互关系(类似于传统的软件设计模式、架构风格)?

刘杨:

以人脸匿名系统为例。人脸匿名(Face anonymization or Face De-ID)是一项通过去除人脸原有ID信息并生成新的ID信息的隐私保护技术,在有关隐私保护的软件系统(例如街景软件、疲劳驾驶检测软件)以及公开数据集(去除敏感ID信息)中有着广泛应用。

人脸匿名系统一般采用人脸检测、人体关键点检测和人脸生成等机器学习或深度学习模型。其中人脸检测是为了定位人脸区域的位置,方便后续的人脸替换;人体关键点检测是为了确定人体各关节(头部、双肩等)的位置,使新生成的人脸与原人体姿势相互协调一致;人脸生成则是合成一个自然逼真的新人脸,用以替换原有人脸。人脸检测和人体关键点检测既可以采用传统的机器学习模型,也可以采用深度学习模型;而人脸生成普遍采用目前广为流行的对抗生成网络(GAN)。

在人脸匿名系统中,各模型之间的交互和协作关系分为并行关系和串行关系两类。其中人脸检测和人体关键点检测是并行的关系,二者相互独立;人脸检测/人体关键点检测与人脸生成则是串行的关系,前者的输出(去除人脸区域的头部图像、人体关键点坐标)作为后者的先验信息,生成符合先验条件的人脸。

基于深度学习的软件系统根据具体任务的不同,有不同的的架构模式。以人脸匿名系统为例,由于它通常是本地操作,所以一般采用最常见的分层模式,即表示层,应用层,业务逻辑层,数据访问层。该模式用于构建可分解为多组子任务的程序,每个子任务都在某个抽象层,每个层对上一个更高层提供服务。对于简单的任务,例如单纯的人脸检测系统,通过构造端到端的深度学习模型,使模型自动学习人脸的检测策略。而对于复杂的任务,往往需要多个模型相互交互来完成,例如人脸匿名系统中三个模型之间是协作关系。

潘青华:

讯飞在AI领域做了很多年了,从语音到NLP,再到CV领域,很多方向都有涉及,已经积累很多AI软件系统。

以语音交互AIUI系统为例,是一套全双工语音交互解决方案,包括了麦克风阵列拾音、语音唤醒、语音识别、语义理解、对话管理和语音合成等核心技术模型,用系统性创新的思路进行贯穿,从而实现更自然的人机交互交互。

在讯飞的AI工程化中,我们分3个阶段。第一阶段是内核引擎工程,将机器学习和深度学习模型变成一个能力引擎模块,不同的版本也是按照软件版本的管理模式,关注新增feature,bugfix,以及性能优化等;第二阶段是平台工程化,分几个部分,第一部分是将能力引擎变成分布式服务,提供API/SDK方便快速接入,API的版本会跟着能力引擎的feature映射;第二部分是把多个能力引擎的分布式服务变成平台化,实现无服务架构,适配各类能力引擎,这个架构本身会有版本号;第三阶段是做大型应用软件工程,例如做一个人机交互系统,里面涉及到使用多种能力引擎服务,最终会形成新的API/SDK版本。

我们在这些软件系统的开发过程中,整体也是沿用了软件工程中的微服务架构范式,平台化部分参考无服务低代码的范式。

观点讨论

@彭鑫:刘杨老师的这个AI系统的实例已经包含多个模型之间的组合了。后面还可以看下AI模型与软件模块之间的交互关系。

潘青华老师讲的AI应用开发中的微服务架构和低代码很棒,后面可以展开讨论下。

@刘杨:已经有一些文章看model和框架的关系,尤其是debug的时候做错误定位。这些其实是很难的。

马雷:

我们早期 (2016~2019)工作主要聚焦在AI模型(Unit Level ) 层面,围绕着Model的质量,可靠性,安全,可解释等进行了一系列初步的探索。2020年开始,我们工作逐步转向关注AI复杂软件系统,也做了一些初步探索也; 对一些典型的AI软件系统有了一些了解。通常,一个AI软件系统会包含多个功能模块与支撑代码(chaining code),通常连接支撑代码一般是传统Rule based软件形式(对数据流进行预处理或后处理,或用来链接模块输入输出)。子功能模块通常根据具体系统任务与功能不同,可以是完全采用AI模型组合,或者是AI模型与传统Rule-based 软件模块结合的方式。

我们初步的了解是AI软件系统大体结构与传统软件既有相似又有不同,相似之处是AI也可以采用多种结构化,模块化构成方式。不同之处是处理的具体子任务模块通常是AI模型比传统软件模块块更具有优势的一些任务(比如,物体分类,障碍物检测)。此外,AI系统也可以采取end-to-end模式,整个系统都是由AI模型组成。

  • 我们在FSE 20的一个初期工作,A First Look at the Integration of Machine Learning Models in Complex Autonomous Driving Systems - A Case Study on Apollo 对百度apollo无人车系统做了一个初步架构的分析与探索。大体架构与工作采取了perception, planning, control等一个流程 (架构如下图所示), 其中 perception 过程中主要用来处理camera, lidar, radar信号感知车载周围环境,一共采用了20余个深度学习模型,模型之间有串联,并联 包括前后信号预处理与后处理,也包括信号整合fusion模块 (比如 Kalman filter),为后端环境感知(行人感知,障碍物检测,红绿灯检测等)以及planning 与control做支撑。在具体子任务中采取了不同专门设计的AI模型模块,但是预处理与后处理在apollo中也大量采用了大量传统软件方式。另外一种是类似Tesla无人驾驶系统采用的更为激进的做法,感知模块尽量采取end-to-end的方式,这样使得维护起来相对容易,但是也存在AI黑盒带来的安全可靠性等质量层面挑战。

0fc8aa19ddc1a1818b9833d9acd1ca3e.png

  • 其次,我们也分析了语音语言等交互等系统,比如siri,alex,百度小度,DeepSppech Rasa等一般采取下图架构流程: 从语音识别, 自然语言理解, 语义关联与对应智能反馈文本生成,再到语音合成。每个步骤都是高度AI依赖任务模块,前后各模块子系统通过串接或并行连接,形成复杂复合任务AI软件系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值