杨铭作者

地平线杨铭:从无形视觉到有形芯片

编者按:人工智能先驱阿兰.图灵曾设想过这样一个机器,它拥有电子的大脑,以摄像头为眼睛,以轮为脚,可以在乡间漫步,这其实是阿兰.图灵对人工智能走入生活的一个憧憬。而在很长的时间之内,由于硬件条件的不成熟,智能只能从无形的算法入手,随着深度学习研究的深入,在很多领域都取得了里程碑式的进展。

然而,要想让人工智能真正融入人们的生活,则亟需解决算法在端侧落地的问题,而芯片,作为衔接算法与场景之间的桥梁,无可避免地成为了一大挑战。

本文中,地平线联合创始人、美国西北大学杨铭博士,来和大家分享“在芯片上加速神经网络用于视觉任务的挑战”。

非常高兴来到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算法真正推向大家的生活中去,谢谢大家

深度学习大讲堂
深度学习大讲堂

高质量原创内容平台,邀请学术界、工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术、产品和活动信息。

入门神经网络AI 芯片地平线
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

自动驾驶技术技术

从 20 世纪 80 年代首次成功演示以来(Dickmanns & Mysliwetz (1992); Dickmanns & Graefe (1988); Thorpe et al. (1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

人脸识别技术

广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

机器人技术技术

机器人学(Robotics)研究的是「机器人的设计、制造、运作和应用,以及控制它们的计算机系统、传感反馈和信息处理」 [25] 。 机器人可以分成两大类:固定机器人和移动机器人。固定机器人通常被用于工业生产(比如用于装配线)。常见的移动机器人应用有货运机器人、空中机器人和自动载具。机器人需要不同部件和系统的协作才能实现最优的作业。其中在硬件上包含传感器、反应器和控制器;另外还有能够实现感知能力的软件,比如定位、地图测绘和目标识别。之前章节中提及的技术都可以在机器人上得到应用和集成,这也是人工智能领域最早的终极目标之一。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

无人机技术

无人机(Uncrewed vehicle、Unmanned vehicle、Drone)或称无人载具是一种无搭载人员的载具。通常使用遥控、导引或自动驾驶来控制。可在科学研究、军事、休闲娱乐用途上使用。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

摩尔定律技术

摩尔定律是由英特尔创始人之一戈登·摩尔提出来的。其内容为:积体电路上可容纳的电晶体数目,约每隔两年便会增加一倍;经常被引用的“18个月”,是由英特尔首席执行官大卫·豪斯所说:预计18个月会将芯片的性能提高一倍。

推荐文章
暂无评论
暂无评论~