电子说
人工智能先驱阿兰.图灵曾设想过这样一个机器,它拥有电子的大脑,以摄像头为眼睛,以轮为脚,可以在乡间漫步,这其实是阿兰.图灵对人工智能走入生活的一个憧憬。而在很长的时间之内,由于硬件条件的不成熟,智能只能从无形的算法入手,随着深度学习研究的深入,在很多领域都取得了里程碑式的进展。
然而,要想让人工智能真正融入人们的生活,则亟需解决算法在端侧落地的问题,而芯片,作为衔接算法与场景之间的桥梁,无可避免地成为了一大挑战。
本文中,地平线联合创始人、美国西北大学杨铭博士,来和大家分享“在芯片上加速神经网络用于视觉任务的挑战”。
非常高兴来到VALSE,来到美丽的大连,首先和大家分享一下人工智能芯片的话题,另外介绍一下地平线在最近两年做的工作。由于最近的热点新闻,大家对芯片这个话题比较感兴趣,希望今天的分享能给大家一个概念:为什么人工智能芯片非常重要,它的研发具有哪些挑战,都需要做哪些工作。
这是我要分享的几个要点,先简介一下地平线,接着介绍一下AI芯片的背景,包括AI芯片研发的必要性,以及现在主流的AI芯片的类型和选择。随后会介绍关于AI芯片的两个主要研究,一个是Google TPU的第一代,这应该是目前公开资料最多的AI芯片,另一个是地平线研发的BPU,最后是关于AI芯片的一个总结。
地平线机器人成立于2015年,我们的愿景是希望能够成为嵌入式人工智能的领导者,为大家提供高性能、低功耗、低成本、完整开放的嵌入式人工智能解决方案。主要业务面向智能驾驶、智慧城市、智慧零售等应用场景,为多种终端设备装上人工智能“大脑”,让它们具有从感知、交互、理解到决策的智能,赋能万物,让每个人的生活更方便、更安全、更美好。
从2015年7月开始运作,目前地平线已经成长为500人左右的公司,总部位于首都北京,主要进行算法研发、硬件研发、芯片研发;2016年在南京成立了第二个研发基地,包括应用开发、硬件开发;2017年在上海成立了第三个研发中心,主要目标是把自动驾驶产品和方案落地,同时在深圳也有一个分部,主要负责完成客户支持、销售服务工作。
地平线的主要核心团队都具有计算机视觉与机器学习的背景,我们选择了从计算机视觉出发转向于硬件芯片开发。余凯博士是CEO创始人,黄畅博士负责基础算法的研发,吴强博士是在计算机体系结构以及云端后台服务器的专家,也负责南京所有的研发工作。
首先谈谈我们为什么需要人工智能?在经历了PC互联网和移动互联网时代以后,未来10年最大的可能就是让万事万物所有的设备本身都具备互联能力和智能功能。什么是智能功能?就是能够自主感受环境,能够根据感受环境的结果自主做出判断和控制。相信在未来的10年、20年,包括无人车、无人机,也包括摄像头和玩具,所有这些设备慢慢都会具有智能功能,都会具有自主判断能力,同时这些设备都会对人工智能提出更高的要求。过去的10年,由于人工神经网络重新焕发出活力,为我们解决这些人工智能问题提供了可能。
近几年来,神经网络基本改变了我们对人工智能问题解决的范式,现在的基本模式是,数据入、结果出,由神经网络解决问题,只要能够定义好数据格式,标注好数据,就很有可能在短时间内得到不错的解决方案,这也是人工智能被广泛关注的重要原因。
同时,我们发现神经网络是一种非常灵活的建模语言,可以有效描述各种问题,之前的嘉宾也都谈到它确实能解决很多不同领域的问题。
神经网络、深度学习正在慢慢改变着很多行业,首先是互联网行业的广告搜索业务,之后是语音识别、图像识别,在金融领域也开始应用神经网络。近两年来,自动驾驶领域、医学图像识别、工业控制领域都逐步应用了神经网络技术。
大规模地应用深度学习还需要解决哪些核心的挑战呢?我们总结了三个主要问题。
第一:如果将AI和神经网络应用到一些行业中去,必须对行业和应用场景有非常深入的理解,这些行业和应用场景有很多痛点,它们描述问题的语言和我们研究AI的语言并不是很兼容的。比如说我们讲识别率是99%,大家就会觉得这就很准确了,而我们要表达的是在多数情况下我们的识别率是100%,少数情况的识别率是0%,平均下来才是99%。另一方面,很多行业如果需要AI的话,并不是应用技术,往往需要应用完整的解决方案或者系统,我们需要做进一步深入的工作,才能把技术转化为系统应用起来,也就是让算法和行业之间能够有很好的交流和理解。
第二:目前还没有低成本、低功耗,成本很经济的硬件平台。如果有了这样很好的硬件平台,应用范围和难度也会降低很多。在各种行业中,包括无人车、无人机或者其它设备都具有不同的限制,比如功耗、成本,以及散热性和可靠性等。因此,缺少低成本、低功耗、高性能的硬件平台限制了大规模应用AI和神经网络的解决方案。
第三:近年来,算法发展非常迅速,带来的问题是人们的期望也不断提高,算法的发展是不是能够一直跟上期望值的增加呢?比如说随便在一个应用场景只要应用神经网络就能够达到很好的性能,这是不能保证的。神经网络存在解释性的问题,它是一个黑匣子,用对了当然很好,如果性能很差,为什么差呢?这是很难解释的一个问题。神经网络是基于统计的,针对很少见的情况,比如说在自动驾驶中出现车祸的情况,训练集能否覆盖这种情况呢?在实际应用中很难给应用方解释我们的方法是非常可靠的。
另外,虽然加大数据量可以解决一些问题,但是能不能够把所有数据都标注呢?这也是值得思考的问题。AI或者神经网络距离大规模应用有这样三个问题,我们今天想谈的是第二个问题,能不能先做好硬件平台准备。
我们也看到在整个行业中,众多公司中最近几年最受益于AI发展的是NVidia。这也说明现阶段,有了很好的硬件平台才能做应用,才能让各种行业应用AI算法。
为什么神经网络适合专用芯片或者硬件来加速呢?神经网络结构这几年有很大发展,从计算角度给大家带来了新的挑战。首先神经网络运算有大规模的并行性,所有运算都有共同基本单元,就是相乘累加,非常适合硬件实现的运算符方式。神经网络运算中间会产生很多中间结果,这些中间结果并不会被重用,这与之前的通用计算方式很不同。在神经网络计算中,无论是网络的权重还是数据本身,对硬件带宽的需求都很高。
这些新的挑战使得原来非常强大的CPU并不能高效计算神经网络,CPU计算方式还是串行的方式,即使有些指令可以处理多个数据。CPU设计花了很多精力优化多级的缓存,可以方便获取数据,这对一般运算来说非常好的,但是对于神经网络不必要。这些CPU的优化,如分支预测,让一般运算非常高效,对神经网络来说额外开销,因此用CPU来训练神经网络效率是相对比较低的。因此我们发现近年来提出来很多CPU+X,对神经网络做专门的运算加速。
AI片基本上等价于神经网络加速,我们需要AI芯片的原因是,通过硬件工艺的提高已经很难大幅度提升计算性能,而需要专用芯片架构提高计算性能。例如,硬件工艺改进,随着三极管数量增加,频率更高,功耗不变,这条规律在2006年的时候已经不成立了;我们所熟知的摩尔定律,在2015、2016年也已经终结,单纯通过硬件改善不太可能继续提高计算性能,所以需要新的专用架构设计来帮助提高对神经网络计算性能。
通常来讲,根据之前提到的神经网络计算的特点,神经网络芯片能采取的针对措施有以下几点:
1.由于有大量数据吞吐,可试图降低数据量,让芯片上保存更多的片上数据,存储计算中间结果。
2.由于需平行运算很多,尽量用比较简单的数据类型和数据大小,实现大量基本运算单元,不需要复杂的调度、分支预测、配置的管理,尽量减少管理调度所需芯片面积开销。
3.神经网络运算资源调度优化工作让软件去做,而不是用硬件实现复杂的调度。那么这个软件是指哪些层面的软件呢?后面可以会明确地提到。
下面介绍一下已有的神经网络加速芯片的类型,我们可以看到在过去几年中,很多层出不穷的xPU出现。
首先是GPU,具有很强大的并行计算能力,但能耗比较高,也是目前最成熟的一个软件工具平台,有很多开源社区软件的支持;
其次是DSP,利用一些单指令多数据的计算单元,一次性提供超过100个字节的运算,优点是低功耗,并具有硬件支持的低开销或无开销循环及跳转运算。问题在于DSP的指令集取决于其厂商与型号,不同型号的DSP的指令集都是不太一样的,这样给学习和编程开发造成了较大的困难。
FPGA是一种半定制化的硬件,采用编程方式,对片内门电路进行编程,配置片内RAM使用,具有一定的灵活性和可修改性。从编程的角度来看,FPGA采用硬件描述语言,调度连接已有的LUT等运算单元,开发难度高一些;从功耗和成本来看,FPGA采用CMOS工艺,功耗低比GPU低,但比DSP之类ASIC高。
对于TPU,在后面的工作中会提到。
最后是IBM做的仿人脑的芯片,芯片的单元只有激活状态下才会工作,功耗会非常低。
设计AI芯片,主要有哪些挑战呢?
1.设定合理恰如其分的目标。由于资源的限制,对行业理解的限制,设计一个放之四海而皆准、而全的芯片是很难的,如何去设定好支持哪些功能,如何设定好成本、功耗、可靠性的目标,这是最难的一个问题。另外,整个芯片设计流程周期长、成本高,并不能在实施期间随意更改目标。
2.如何设计系统架构,包括指令集的设计,能够让架构尽可能满足更多需求,实现更多类型的神经网络,这是一件不容易的事情。
3.为了让神经网络芯片能广泛可用,需要提供全面的工具支持,提高编程开发效率。而工具链的支持也是相当复杂的,需要训练平台,需要编译器把神经网络转换成可运行模块下载到芯片中去,需要模拟器在没有芯片的时候可以模拟开发,并且能够调试分析性能,能够设计出参考模型。这一系列软件工具链的支持,对AI芯片能否成功起着关键性的作用。
当然由于这是一个非常复杂的过程,而任何人的资源都不是无限的,总是要做一些非常痛苦的抉择和权衡,在成本、开发时间、各种资源条件限制下做一个权衡。
对于神经网络加速芯片,又会有哪些具体难题呢?
1.首先要确定支持的网络子集。神经网络多种多样,新的算法层出不穷,到底要支持到什么程度,支持哪些网络结构激活函数和操作。
2.支持哪些函数和数据类型,同时要考虑是否支持模型压缩、量化方法,这些都需要在算法层面上对神经网络目标做很好的设定。
3.设计芯片结构,比如片上内存和片下内存,片上内存当然越多越好,但是成本高,功耗和测试时间都会增加。尽量让硬件本身简易化,只完成神经网络加速,把任务调度、任务优化交给软件去完成。这些最终都需要对开发者透明,需要由中间件工具链来做优化,这也是工作量非常大的一项工作。
4.最后还要提供很多参考模型和设计,完成具体应用场景中的功能示例。
这是一个非常简化的开发AI芯片的流程,从需求(MRD)开始,首先是算法的研发,要明确哪些神经网络模型是最重要的,是需要支持的,是否能够满足应用场景的要求;之后会生成很多参考模型,实现Golden C,在设计的时候可以参考C的实现;右边是芯片设计的过程,实现架构设计,实现核心神经网络相关的编程,同时芯片需要访问内存,访问接口,需要IP集成,集成之后需要进行验证,并需要实现FPGA平台去做实际验证;之后是后端设计,包括逻辑综合、布局布线等;然后进行流片(Tapeout),这需要之前各种验证都已经做得很充分之后,流片之后修改的机会就很少了,而且流片经济成本和时间非常高。最后需要把硬件芯片放在一个硬件平台上,启动起来之后能够开发中间件运行软件。左边是软件相关工作,包括训练平台、编译器、模拟器和调试器,最终做到应用,再测试。可以看出,整个流程的工程量非常巨大。
具体介绍两个例子。先看一下TPU,这是Google 2013年开发的,经历了大约15个月,TPU的定位是对神经网络加速的芯片,它可以在数据中心使用,15个月的开发时间已经是相当快的速度,功耗大概是75瓦。TPU上有256×256×8bit的矩阵乘法器,这是最核心的计算单元,所有的设计目标都是希望能够让这个乘法器效率最高。每个TPU指令都是由服务器通过PCIe总线发送回来的;然后通过指令把数据调到24兆的缓冲区,安排好数据,同时把神经网络权重从外部DRAM调到芯片中去,让矩阵乘法器不断计算,并把中间结果、乘加结果存到4兆缓存区中去;最后再通过激活归一化函数后存回到缓存区。可以看到TPU实现了一个非常直观的神经网络预测,并做了很多简化和约束工作。
TPU的主要指令是从主存储器中读数据、读权重,然后进行乘加,最后通过激活函数把结果写进去。
对比之前提到的几个原则,TPU首先做了一些限制,只支持神经网络预测(inference),根据Google内部的业务的需求,主要支持MLP(Multi-layer Perceptron)网络。它支持整数运算,通常为8bit运算,也可以进行16bit或32bit的运算,但处理速度会降低一半或者4倍。从存储角度上设计了24MB的SRAM来存储中间结果,权重也是通过SRAM调用进去。它把优化工作基本上都交给软件来完成,芯片本身的架构没有非常复杂的优化,主要优化是在于让乘法器核心能够持续运算,同时把其它的运算并行起来。从分析和处理的角度来看,TensorFlow和TPU是兼容的,TensorFlow能够让它的工作效率很高,因为很多Google软件工程师针对TensorFlow和TPU进行了开发。
地平线也做了AI芯片,我们做的是什么呢?首先也是针对于神经网络预测,同时这种预测还只针对图像和计算机视频的任务。我们做了一些限制,输入是8bit 多通道的2D的矩阵,可以是灰度或YUV图像。我们针对的就是图像应用,目标是开发高性能、低功耗、低成本神经网络协同处理器,通过编程方式改变算法架构和替换不同的神经网络。
开发过程首先从MxNet的训练开始,同样支持TensorFlow网络架构。主要支持8bit整数的运算,用芯片来实现的话,支持很多的数据类型成本和复杂度会提高。
我们的工作核心是把一个神经网络模型编译成我们支持的汇编语言,一方面我们知道具体的神经网络模型,另一方面我们知道这是一个检测算法,把检测算法对应的模型和算法架构合并在一起,通过联接器(Linker)得到机器语言的模型文件,其物理地址没有完全确定,如果是真实芯片则确定物理地址在芯片上运行,如果是软件模拟器就则可仿真运行。
我们会提供比较全面的开发平台支持,从算法角度来说,能够在不同尺度下进行图象识别,在不同的视频中进行时间维度上的融合,可以支持分类、检测、跟踪、识别等任务。
从芯片架构来讲,一个比较创新的思考方式是弹性的Tensor Core。把图像所需要的一些操作(卷积、池化等)进行硬件化,同时有很多片上内存,通过一个data routing bridge从SRAM中选择这些操作所需的数据并同时存储,把存储跟运算作为两个资源,通过编程方式灵活调动,实现更多的算法。
这是图像所需要的一些基本操作,除了卷积以外,还包括升采样,降采样等操作。
第一代芯片在2017年流片,目前已经生产出来了,它支持单路高清视频进行30帧的物体检测、跟踪和识别。第二代芯片支持6~8路的物体检测识别,包括像素级的分割和识别。
这就是我们在2017年12月份发布的产品,包括两个系列,一个是面向自动驾驶,叫做“征程系列芯片(Journey)”;一个是面向智能摄像头的,叫做“旭日芯片(Sunrise)”。它们可以实现1路视频检测,同时处理200个物体,并且功耗很低,可以实现物体级别的检测识别。
这是我们能够实现的一些功能,包括大范围的非常密集的场景下的人脸识别(先抓拍,再识别人脸属性),在本地可以做到一万人左右的识别,我们已经有了样机,大家可以体验。也包含视频结构化的应用,在复杂的交通环境下,检测机动车、非机动车、行人,区别属性、车牌,这也是非常实用的功能,如果把这些功能应用到摄像头中可以节省很多带宽和成本。
这是第二代芯片架构,能达到像素级别的识别,这是今年在拉斯维加斯的车上实测的结果,另外一个是在三藩市实时运行的结果,包括物体分割和检测。
总结一下,在未来10-20年AI功能将无处不在,AI芯片将是非常必要的基础设施,只有芯片成功才能让AI算法真正在生活中得到大规模应用。我们相信我们公司会坚定地致力于“算法+芯片”,把算法和芯片两者结合,做一些创新的、有趣的工作,把AI算法真正推向大家的生活中去,谢谢大家。
作者简介:
杨铭博士,地平线(Horizon Robotics)联合创始人 & 软件副总裁,Facebook 人工智能研究院创始成员之一。杨铭曾任 NEC 美国研究院高级研究员,专注于计算机视觉和机器学习领域研究,包括物体跟踪、人脸识别、海量图片检索、及多媒体内容分析。他在 Facebook 工作期间负责的深度学习研发项目 DeepFace 在业界产生重大影响,被多家媒体广泛报道,包括 Science Magazine、MIT Tech Review、Forbes 等。他领导 NEC-UIUC 团队参加 TRECVID08/09 视频监控事件检测评测,获得最佳成绩;参与 NEC 团队 ImageNet2010 大规模图像分类挑战,获得第一名。申请获得美国专利15项。杨铭毕业于清华大学电子工程系并获得工学学士和硕士学位,于美国西北大学电气工程与计算机科学系获得博士学位。他在顶级国际会议 CVPR/ICCV 发表论文20余篇,在顶级国际期刊 T-PAMI 上发表9篇论文,被引用超过7600次;多次担任 CVPR/ICCV/NIPS/ACMMM 等顶级国际会议程序委员会成员,T-PAMI/IJCV/T-IP 等顶级国际期刊审稿人。
全部0条评论
快来发表一下你的评论吧 !