杜克大学陈怡然:高效人工智能系统的软硬件协同设计(1)

简介: 杜克大学陈怡然:高效人工智能系统的软硬件协同设计
不久之前,杜克大学电子计算机工程系教授陈怡然发表了主题演讲《高效人工智能系统的软硬件协同设计》,介绍了如何软硬协同设计出高性能的人工智能系统,包括存内计算深度学习加速器、模型方面的优化,分布式训练系统以及一些涉及自动化操作等内容。



不久之前,机器之心AI科技年会在线上召开。杜克大学电子计算机工程系教授陈怡然发表了主题演讲《高效人工智能系统的软硬件协同设计》。
演讲视频回顾(点击「阅读原文」也可观看):https://www.bilibili.com/video/BV1yP4y1T7hq?spm_id_from=333.999.0.0

以下为陈怡然在机器之心 AI 科技年会上的演讲内容,机器之心做了不改变原意的编辑。

我经常用这张图,来源于大概 32 年前的一本书《The Age OF Intelligent Machines》,作者是 Kurzweil 博士 ,他当时就预言了未来人工智能所需要的算力发展。我们对这张图做了些延伸,单个器件上大概能够集成多少计算能力。过去 100 年,计算能力几乎呈指数增长趋势,到现在,比如今天英伟达发布会最新 GPU 的计算,包括上周苹果发布的 GPU 芯片,基本上可以带来超过一个人脑级别的计算能力,为我们带来了非常大的可能。


人工智能计算平台分很多种,从大家比较熟悉的 GPU、FPGA、ASIC 到新型架构,实际都遵循了一个原则:要么更高效,要么更专业需要更长时间,要么更灵活,不可能在多个维度达到统一,永远存在一个设计上的矛盾。

比如,在 GPU 上算力最高,功耗也最高。FPGA 上会实现一些非常容易可重构的计算,但能效比可能不是那么好。ASIC 能效比非常好,但需要更长的开发周期 ,基本上是对特定应用做设计,当出货量比较小的时候,不是特别有效。


大家比较熟悉冯 · 诺伊曼瓶颈,实际上是说计算能力可以通过不断增加计算单元来实现,但最后瓶颈在于能不能把数据及时给到计算单元。过去四五十年,片上计算能力和片外数据通过存储带宽提供给片上的能力差距越来越大,也带来了 “内存墙” 的概念。当然,实际具体设计中,比如不能及时挪走产生的热量、不能无限制增大使用频率等,(这些)都迫使我们寻找新的计算设计。


现在比较热门的是近存或存内计算设计,想法也非常简单,既然瓶颈来源于数据间流动,尤其是存储空间到计算空间的流动,能不能想一些办法让计算跟存储发生在同一个地方?这实际上正好和冯诺依曼体系相对,后者是将两者分开,这个要合在一起。

为什么可以这么做?因为新型计算,比如神经网络或图计算,经常有一方不变,另外一方不断变化的情况。比如 A 乘上 B,A 不断变化而 B 不变,这种情况下,可以在存储 B 的地方进行计算,不需要把数据挪来挪去。

大家进行了非常多尝试,比如用 DRAM 来做计存。最近,阿里好像也写了一篇文章讲了存内计算,把存储器设计成可以有计算单元,直接在里面进行相应计算,这都是一些有益的尝试。与在从外面拿到数据过来进行计算相比,这个计算能效强几千倍,是非常有希望的未来发展方向。

   我们今天讲的一些内容与这些相关,包括存内计算深度学习加速器、模型方面的优化,分布式训练系统以及一些涉及神经网络架构设计自动化方面的操作。

当你看到存内计算时,第一个想法是把神经网络参数存到一个地方,数据进到这个地方后直接进行计算,避免数据搬运。一个比较常见的场景是,把这些参数存在一个特殊纳米芯片上,(纳米芯片里的)一些器件上的阻值可以通过电流或电压变化(而变化,进而可以被用)来进行编程,表现一个参数。

当涉及一个比较大的矩阵形式,所有输入跟所有输出可以在某些交叉节点上进行连接,非常像一个矩阵在神经网络里面的状态,所有输入相当于一个向量,向量乘以矩阵可以看做所有电压进行输入,电压经过电流产生一个合并的电流就是他们所有统计的和。这就以一个非常高效的方式实现了向量跟矩阵的相乘。


过去十几年,我们在杜克做了大量相关尝试,并设计了一些芯片。


2019 年我们在 VLSI 发了一篇文章,可以用新型存储器和传统 CMOS 进行连接,集成之后可以将比如卷积神经网络整个映射到这样一个矩阵状态里,同时可以选择精度,进行精度和能效之间的权衡(tradoff)。相比传统 CMOS 设计,性能最后可以得到几十倍的提高。


今年在 ISSCC 上我们也有另外一个工作,主要是我们毕业的学生燕博南在北大的一个课题小组工作,这个设计思想还可以放到传统 SRAM 。这个设计的一个特别之处在于,传统设计通过电阻进行参数表达,实际上是一种模拟计算方式。换句话说,组织上连续态表达一个参数,这就需要模拟到数字的转换,数模转换非常昂贵。而我们在 ISSCC 上的工作:ADC-Less SRAM 实际上是一个二值的整数表达,比如零和一,这就有可能去掉数模转换,直接实现数字状态下的计算。这是当时实现的一个技术突破。


可以看到下面这张图 Digital CIM(最右边, This Work), 能效大概可以达到 27.4 ( TOPS/W,8 比特状态下 ),已经超过原先其他所有设计,整个 density 非常高,在 28 纳米工艺情况下,每平方毫米上差不多有上兆的晶体管。


除了电路,还要有架构跟编译器之间的支持才能够实现整个计算系统的设计。2014-2015 年之前,我们就开始做相关设计,比如设计编译器,找到可以用来加速的程序的一部分,同时在片上通过一些方式连接各种各样的阵列,把大的网络分成小的网络,或在不同网络层(layer)之间进行数值的转换。

 

比较值得一提的是,我们经常会在一个大的网络里遇到很多阵列,至少存在两种网络并行计算的方式——数字并行和模型并行。所谓数字并行,是指有很多输入(input),些数据可以被并行的分到不同运算单元(PE)里面去。对于模型并行来说也是一样,大的模型可以被分块进行计算。

但是,这两种并行的方式并不排他。即使对于一个 Layer 来说,当你把这一个 layer 映射到不同 PE 上,在每个 PE 仍可能采用不同的并行方式。比如下图用黑点和白点来表达,大部分并行方式是通过模型并行的方式来操作,也有少部分是数字并行。

为什么会这样?因为只有集成不同并行的分布方式,才能使得在整个算力全部被表达的情况下,所有数字跟数字正好达到一个稳态平衡,整体能效最高。如果是单一表达,有的地方就空了或者算得比较慢,拖累了整个计算。这是 2019 年发表的文章 HyPar。


2020 年我们发现一个新问题,我们实际上没有太考虑卷积网络本身的表达,而你经常会在卷积层里一个层一个层地去计算,会有一些中间结果,直到最后才会被用到。这样一来会产生第三种并行方式,就是 Tensor 并行的方式,比如下图这种,输入和输出各有三种并行的可能。3 乘以 3,总共有 9 种表达方式。


如果考虑到每个 PE 都有 9 种方式进行表达,就没有办法通过人工方式进行优化,必须通过自动化方式(比如线性规划)完成整个系统的表达。同时,你也不可能逐个去找这些表达方式,需要一些的层次化的方式。

比如,先有些大的区分,再由小的区分一直到最后单个表达。如果用三种颜色来做表达,会发现即使在一个层次的映射下也有不同 PE 有不同运行表达来满足整体上数据流动的最优。这样,能效就能再推进一倍。


同样的思路不仅仅可以用到深度学习里面。深度学习只是一个图计算特例。而任何可用图方式来表达数据流动的计算都是图计算,深度学习虽然很丰富但仍然只是图计算的一种特殊表达。所以,你可以用存内计算方式来进行图计算。

这是我们另外一个 HPCA 2018 上的工作。我们发现是图计算,尤其是深度优先或者网络优先搜索这类算法,可以把他们在矩阵上的表达,用图计算的方式来实现。相对于在传统 CPU 平台上的计算,能效会有上百倍提高。


讲完整个架构设计,在算法上如何继续优化计算能效?下一个例子是结构稀疏化。稀疏化早就被熟知,当神经网络的一些权重很小或者近乎于零,无论输入多大,对输出没有影响,这个时候,你根本不需要算结果,直接丢掉这个结果(其实是零)就可以了。

2016 年以前,所有针对神经网络的稀疏化操作基本都是非结构稀疏化,只要你看到一个零,就把它去掉。这就带来一个问题——所有数据在计算机存储的时候有一个 locality(局域性),因为有时域跟空域的局域性,当用到一个数,基本上会有一个预期,这个数字会不断被用到,或者存储在其周围的数也会在未来被不断用到。当你把很多零去掉后,会产生很多洞。当你找到一个数之后,会期待下一个数,但你根本没有存。整个缓存会陷入一个状态:不断到很远地方把数字弄过来,结果你发现这不是需要的,然后继续去找。

怎么解决这个问题?做稀疏化的时候,仍然希望把去掉的这些零或者计算,以某种局域性来做表达,比如整行或者整列全部去掉。这样就可以在满足存储局域性的前提下,仍然达到计算优化。


说起来容易,关键是怎么做?我们 2016 年 NeurIPS 有篇文章讲了结构稀疏化,这篇文章后来也变得很有名。(文章讲的是)基本上可以找到这些参数,对应了某种存储结构,这种结构使得这些数以一块一块方式进行存储。这样在清零时,把整个行或者列全部清零,仍然能够在满足优化条件的前提下同时满足 局域性。这个可以用在 CNN、LSTM、RNN 甚至一些更复杂计算。这项技术现在基本上已经是神经网络优化的一个标配。


另一个常用的神经网络优化是量化. 网络训练需要高精度,但推理时并不需要高精度。这就产生了一个很有趣的事情:究竟什么样的精度,优化是最好的,而且这个精度用什么方式去表达。

传统上,大家可以逐个去找最佳结果。比如,一个 bit、两个 bit、四个 bit...... 去找就对了。但你会发现,还要考虑到这个 bit 怎么在存储进行表达。比如,对这个 layer 来讲,当有某个 bit 于所有数字来说都是零,那就不需要存这一整个 bit。举个例子,只要保证你只要这四个 bit 里的第二个和第四个存在,而不是每个都需要,这就丰富了整个精度的优化。这也是我们第一次将结构稀疏化运用到 bit 水平的稀疏化研究上。


我们用 Group LASSO 的方式,把数据表达里面整个 column 或者整个结构为零的 bit 全部去掉,这样就极大降低存储成本。这是我们 2021 年的一篇文章。

   


相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
5月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
512 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
11月前
|
人工智能 自然语言处理 算法
生成式人工智能认证(GAI认证)与标准化进程协同发展及就业市场赋能研究
本文探讨生成式人工智能认证(GAI认证)在人工智能标准化进程中的重要性,分析其对就业市场的积极影响及未来发展趋势。GAI认证不仅是个人AI能力的权威认可,还推动行业标准化与技术创新。文章指出,随着技术融合加速和应用场景拓展,GAI认证标准需不断完善,以应对技术更新、数据安全等挑战,为AI健康发展贡献力量。
|
4月前
|
人工智能 IDE 开发工具
拔俗人工智能辅助评审系统:如何用技术为“把关”提效
人工智能辅助评审系统融合大模型、提示工程与业务流程,实现上下文深度理解、场景化精准引导与无缝集成。通过自动化基础审查,释放专家精力聚焦核心决策,提升评审效率与质量,构建人机协同新范式。(239字)
409 0
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
拔俗AI人工智能评审管理系统:用技术为决策装上“智能导航”
AI评审系统融合NLP、知识图谱与机器学习,破解传统评审效率低、标准不一难题。通过语义解析、智能推理与风险预判,构建标准化、可复用的智能评审流程,助力项目质量与效率双提升。(238字)
360 0
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
1187 55
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
627 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
10月前
|
人工智能 自然语言处理 API
MCP与A2A协议比较:人工智能系统互联与协作的技术基础架构
本文深入解析了人工智能领域的两项关键基础设施协议:模型上下文协议(MCP)与代理对代理协议(A2A)。MCP由Anthropic开发,专注于标准化AI模型与外部工具和数据源的连接,降低系统集成复杂度;A2A由Google发布,旨在实现不同AI代理间的跨平台协作。两者虽有相似之处,但在设计目标与应用场景上互为补充。文章通过具体示例分析了两种协议的技术差异及适用场景,并探讨了其在企业工作流自动化、医疗信息系统和软件工程中的应用。最后,文章强调了整合MCP与A2A构建协同AI系统架构的重要性,为未来AI技术生态系统的演进提供了方向。
1505 62
|
11月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
649 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
1190 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
652 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别

热门文章

最新文章