智东西(公众号:zhidxcom)
编辑 | 孙悦
智(zhi)东西6月5日(ri)消息,近日(ri)GTIC 2021嵌入式(shi)AI创新峰会(hui)在北京圆满收官!在这场全天座无(wu)虚席、全网直播观(guan)看人数(shu)逾150万(wan)次的(de)(de)高规格产业(ye)峰会(hui)上(shang),来(lai)自产业(ye)链上(shang)下(xia)游的(de)(de)16位大(da)佬共聚一堂,围(wei)绕嵌入式(shi)AI的(de)(de)软(ruan)硬件生态(tai)创新、家(jia)居AIoT、移动(dong)机(ji)器人和工业(ye)制造(zao)产业(ye)4大(da)版块地图,带(dai)来(lai)了深入浅出的(de)(de)分享。
会(hui)上,商汤科技(ji)副总裁、通用智能技(ji)术负责(ze)人(ren)闫(yan)俊杰博士发(fa)表了《极致灵(ling)活(huo)的深度学习模型优化(hua)与部署》的主题演讲。

▲商汤科技(ji)副总裁、研(yan)究(jiu)院副院⻓、通⽤智能负责(ze)⼈闫俊杰
商汤推出(chu)Spring.NART模(mo)型(xing)部署框架(jia),支持代码级(ji)(ji)别、算子级(ji)(ji)别及(ji)网络级(ji)(ji)别等不同的(de)接(jie)入级(ji)(ji)别,以通过统一的(de)接(jie)入框架(jia)适(shi)配多种(zhong)深度学习芯(xin)片。据称,该框架(jia)支持16类不同硬件设备,能保证算法方(fang)案灵活跑在各类设备上。
同(tong)时(shi),商(shang)汤通过编译优化(hua)技(ji)术(shu)及一套量(liang)化(hua)模型生产(chan)工具,使模型在Arm框架和英伟达GPU上都(dou)能实现(xian)低bit量(liang)化(hua);同(tong)时(shi),除了系统层面(mian)的优化(hua),商(shang)汤今(jin)年(nian)还提出了媲美在线量(liang)化(hua)的离(li)(li)线量(liang)化(hua)算(suan)法(fa)BRECQ,首次将4bit离(li)(li)线量(liang)化(hua)的效果做到接近量(liang)化(hua)训练,以此实现(xian)高效的模型自动化(hua)部(bu)署。
另外,在软硬件协同(tong)方面,商汤兼顾结构(gou)、推理库(ku)和(he)硬件,建立(li)了一个计算数(shu)据库(ku)Spring.GPDB(Graph Performance DataBase),基于(yu)这一软硬件协同(tong)的数(shu)据库(ku)对已有模(mo)型做诊(zhen)断并(bing)改进,使模(mo)型得到较好的精度和(he)速度提升。
总的(de)来说,针(zhen)对硬件多(duo)样化、模(mo)型压缩、模(mo)型自动化部署三大挑战(zhan),商汤试图(tu)让(rang)深(shen)度学习模(mo)型在嵌入式设(she)备上(shang)灵活优化和部署。
以下为闫俊杰演讲实录整理:
大家好,非(fei)常高兴有机会跟(gen)大家分享(xiang)过去(qu)几年我(wo)们(men)在(zai)深度学(xue)习模(mo)(mo)型(xing)(xing)的(de)优化(hua)和(he)部署(shu)上做的(de)工作。首先我(wo)们(men)给一个(ge)定义:深度学(xue)习模(mo)(mo)型(xing)(xing)生产的(de)流水线。首先从数据(ju)经(jing)过训练(lian)系统(tong),得到(dao)一个(ge)设备无(wu)关的(de)模(mo)(mo)型(xing)(xing),这个(ge)模(mo)(mo)型(xing)(xing)只包含一些参数和(he)网络结构。接下来需要通过部署(shu)系统(tong)和(he)硬件做一些适(shi)配,得到(dao)设备绑定的(de)模(mo)(mo)型(xing)(xing)。最后加上深度学(xue)习算法之外的(de)串联(lian),就可以(yi)得到(dao)在(zai)各种不(bu)同设备如(ru)服务器、边缘(yuan)设备、AIoT设备上来使用的(de)完(wan)整解决方案。

一、深度学习模型的三大挑战:设备、性能、自动化能力
这(zhei)里的(de)假设是(shi)我(wo)们得到了(le)一个模(mo)型(xing),这(zhei)个模(mo)型(xing)可能用在(zai)各种各样(yang)的(de)设备上,包(bao)含任(ren)意(yi)的(de)芯片(pian)。我(wo)们需(xu)要(yao)有一套(tao)好(hao)的(de)方案,让这(zhei)个模(mo)型(xing)非常(chang)灵活地(di)部(bu)署(shu)在(zai)任(ren)意(yi)的(de)芯片(pian)上,同时还要(yao)有较高的(de)部(bu)署(shu)效率。那这(zhei)里面(mian)有哪些挑战?经(jing)过过去几年(nian)的(de)实践,我(wo)们总结主要(yao)有三点(dian)。
(1)支持多款(kuan)硬件设(she)(she)备。商汤科技从2017年(nian)开始,首次把深(shen)度学习的(de)人脸检测放到相机上(shang)(shang)。当时芯片比较少,边缘上(shang)(shang)只有Arm可(ke)以用(yong)(yong),没有NPU。随着近几年(nian)的(de)发展,在(zai)边缘设(she)(she)备上(shang)(shang)可(ke)用(yong)(yong)的(de)芯片越来越多,同(tong)时也出现(xian)了另一(yi)个问题:怎么让同(tong)一(yi)模型能够(gou)灵活地配适于任意的(de)设(she)(she)备上(shang)(shang)?这是我们需(xu)要(yao)解决的(de)第一(yi)个挑战。
(2)其次是高效能。这一点在(zai)边(bian)缘设(she)备上尤其明显,边(bian)缘设(she)备的功耗很低,计算能力没(mei)有那么高。怎么能在(zai)边(bian)缘设(she)备上发挥极(ji)致(zhi)的性(xing)能?这就(jiu)需要(yao)进(jin)一步进(jin)行量化或(huo)者稀疏的工作。
(3)最后是(shi)(shi)自(zi)动化(hua)。如(ru)果只(zhi)需(xu)(xu)要(yao)(yao)部署(shu)一个模型,这没有什么挑战(zhan),实在不行(xing)手工(gong)(gong)来(lai)调(diao)就好了。但是(shi)(shi)在工(gong)(gong)业(ye)化(hua)的(de)(de)时代,比如(ru)像商(shang)汤这样的(de)(de)公司每天需(xu)(xu)要(yao)(yao)产(chan)出几百个模型,显然不可能全(quan)部靠人来(lai)手工(gong)(gong)部署(shu),我们需(xu)(xu)要(yao)(yao)有一套自(zi)动化(hua)的(de)(de)系统。而(er)这套自(zi)动化(hua)系统需(xu)(xu)要(yao)(yao)能够处理(li)各(ge)种hard case和(he)corner case,因此面临很多(duo)新的(de)(de)挑战(zhan)。
首先给大家介(jie)绍我们怎么解决(jue)多设备(bei)(bei)的(de)(de)问题(ti)?假如(ru)设备(bei)(bei)可控,基(ji)于(yu)(yu)代码生成(cheng)的(de)(de)方案是最简单的(de)(de),比如(ru)TVM,类似(si)这(zhei)样(yang)的(de)(de)技术提供(gong)了非(fei)常(chang)灵活的(de)(de)框(kuang)架。现在大部(bu)分能(neng)用的(de)(de)芯片(pian)一般都会提供(gong)网(wang)(wang)络(luo)编(bian)译器(qi),但是网(wang)(wang)络(luo)编(bian)译器(qi)只(zhi)提供(gong)网(wang)(wang)络(luo)级(ji)别的(de)(de)支持,不会提供(gong)到(dao)指令级(ji)别的(de)(de)支持。除(chu)了Arm或(huo)者(zhe)英伟达非(fei)常(chang)成(cheng)熟(shu)的(de)(de)硬(ying)件能(neng)够提供(gong)指令级(ji),大部(bu)分国产(chan)化芯片(pian)属于(yu)(yu)网(wang)(wang)络(luo)级(ji)别的(de)(de)编(bian)译器(qi),完全基(ji)于(yu)(yu)代码生成(cheng)的(de)(de)方案在实际中(zhong)对大多数芯片(pian)很难(nan)走得通。
商汤(tang)主要(yao)使(shi)用(yong)的是其他厂商的芯(xin)片(pian),过(guo)去几(ji)年我(wo)(wo)们适配了近20种芯(xin)片(pian),可以发现(xian)不同芯(xin)片(pian)所提供的接(jie)入级(ji)(ji)(ji)别(bie)非常不一(yi)样。有代码级(ji)(ji)(ji)别(bie),比(bi)(bi)如(ru)Arm、X86、cuda;还有算子级(ji)(ji)(ji)别(bie),比(bi)(bi)如(ru)cuDNN计算库;还有提供网络级(ji)(ji)(ji)别(bie)的芯(xin)片(pian),比(bi)(bi)如(ru)TensorRT、华(hua)为的一(yi)些芯(xin)片(pian)等(deng)。我(wo)(wo)们需要(yao)一(yi)套系统(tong)能(neng)够灵(ling)活(huo)接(jie)入代码级(ji)(ji)(ji)别(bie)、网络级(ji)(ji)(ji)别(bie)、算子级(ji)(ji)(ji)别(bie),只有这样才能(neng)实现(xian)统(tong)一(yi)的自(zi)由框架。

这(zhei)套系(xi)统在我(wo)们内(nei)部(bu)(bu)命名为NART,其全称(cheng)是(shi)Nart is Not A Runtime。NART主(zhu)(zhu)要包含(han)两部(bu)(bu)分(fen):一(yi)(yi)部(bu)(bu)分(fen)是(shi)编(bian)译器(qi)(qi)、一(yi)(yi)部(bu)(bu)分(fen)是(shi)运(yun)(yun)行时(shi)。它主(zhu)(zhu)要有(you)如下(xia)特(te)点(dian):第一(yi)(yi)点(dian):多(duo)算(suan)(suan)(suan)(suan)子(zi)(zi)级(ji)别。代码、算(suan)(suan)(suan)(suan)子(zi)(zi)、网(wang)络都可(ke)(ke)以(yi)是(shi)一(yi)(yi)个(ge)算(suan)(suan)(suan)(suan)子(zi)(zi)。第二(er)点(dian):编(bian)译器(qi)(qi)和(he)运(yun)(yun)行时(shi)解藕。运(yun)(yun)行时(shi)主(zhu)(zhu)要是(shi)包含(han)大量(liang)已(yi)实现好的(de)(de)(de)算(suan)(suan)(suan)(suan)子(zi)(zi),现在已(yi)经有(you)上百种算(suan)(suan)(suan)(suan)子(zi)(zi)。编(bian)译器(qi)(qi)部(bu)(bu)分(fen)主(zhu)(zhu)要是(shi)处理一(yi)(yi)些量(liang)化校准(zhun)、图优化和(he)格式(shi)(shi)转(zhuan)换相关的(de)(de)(de)问题。第三点(dian):混(hun)合运(yun)(yun)行时(shi)。这(zhei)一(yi)(yi)点(dian)在工业级(ji)使用中非(fei)常(chang)重(zhong)要,一(yi)(yi)方面(mian)可(ke)(ke)以(yi)将NPU上不(bu)支持的(de)(de)(de)算(suan)(suan)(suan)(suan)子(zi)(zi)灵(ling)活回(hui)退到(dao)次级(ji)设备。比如在华为海思的(de)(de)(de)处理器(qi)(qi)上,NNIE不(bu)能支持的(de)(de)(de)算(suan)(suan)(suan)(suan)子(zi)(zi)可(ke)(ke)以(yi)直接回(hui)退到(dao)Arm上处理,实现非(fei)常(chang)灵(ling)活的(de)(de)(de)接入,不(bu)需要等着芯片厂商的(de)(de)(de)排(pai)期。并且(qie)在实操过程中,我(wo)们发(fa)现这(zhei)样(yang)的(de)(de)(de)处理方式(shi)(shi)既简单(dan)又高效,同时(shi)整个(ge)生(sheng)产(chan)周期也(ye)非(fei)常(chang)快。另一(yi)(yi)方面(mian)混(hun)合运(yun)(yun)行时(shi)便(bian)于(yu)实现混(hun)合精度(du)(du),在不(bu)同精度(du)(du)的(de)(de)(de)算(suan)(suan)(suan)(suan)子(zi)(zi)间(jian)自动切(qie)换,保证模型(xing)的(de)(de)(de)效果。

现(xian)在我们已经支(zhi)持了超过16类不同的(de)硬(ying)件(jian)设备(bei),大家看到的(de)市场(chang)上主流的(de)硬(ying)件(jian)都(dou)使用这一(yi)套框架来支(zhi)持。这保(bao)证了商汤的(de)算(suan)法(fa)方案可以灵活的(de)跑(pao)在任意(yi)一(yi)个市场(chang)上已有的(de)设备(bei)上。
二、实现低bit量化,提高自动化部署效率
模(mo)型量(liang)(liang)化(hua),是一种比(bi)较高(gao)效的(de)(de)(de)处理方法,与之对应(ying)的(de)(de)(de)还有其他的(de)(de)(de)如网络结构优化(hua)等方案。量(liang)(liang)化(hua)属于最(zui)常用的(de)(de)(de)技(ji)术,这里重点分享一下我(wo)们在量(liang)(liang)化(hua)上做的(de)(de)(de)工作,主要是为(wei)了达到极致的(de)(de)(de)效率。
现在INT8的(de)(de)(de)量化很常用,在绝大多数(shu)芯片上都(dou)支持(chi),效(xiao)率确实有所提升。但(dan)问题(ti)是(shi)随着算法的(de)(de)(de)进展,它(ta)可(ke)以(yi)做到(dao)比8bit更低的(de)(de)(de)4bit,但(dan)是(shi)却很少能支持(chi)8bit以(yi)下的(de)(de)(de)计(ji)算方案。
为了解决这个问题,我们做(zuo)了很(hen)多研究,在现代体(ti)系(xi)结(jie)构下(xia)首次实现极低比特量化,并且(qie)能够带来很(hen)好的效率提升(sheng)。
简单来说我们实(shi)现了2个平台的(de)(de)(de)(de)极低比特模型(xing)部署,一个在Arm上(shang),一个在GPU上(shang)。在Arm上(shang)使用5-8bit或1-4bit卷积都(dou)(dou)是可以(yi)(yi)的(de)(de)(de)(de)。通过对(dui)比ResNet18中各层的(de)(de)(de)(de)性(xing)能,可以(yi)(yi)发现大部分层的(de)(de)(de)(de)提升都(dou)(dou)是非常明(ming)显的(de)(de)(de)(de)。在英伟达(da)的(de)(de)(de)(de)GPU上(shang),也针(zhen)对(dui)tensorecore实(shi)现了超低比特的(de)(de)(de)(de)优化。从右(you)下(xia)(xia)角(jiao)的(de)(de)(de)(de)图(tu)表可以(yi)(yi)看出,在batch=1的(de)(de)(de)(de)情况下(xia)(xia)对(dui)于大型(xing)网络(luo)提速(su)非常明(ming)显。

在量化这块(kuai)我(wo)(wo)们(men)(men)还观察到(dao)一(yi)个状(zhuang)态(tai),现在很(hen)多厂商会提供一(yi)些(xie)标准的(de)库(ku)比(bi)(bi)如(ru)英伟达的(de)TensorRT。但问题是(shi)对于很(hen)多新的(de)模(mo)型,他们(men)(men)提速不明显,更新会比(bi)(bi)较慢(man)。举(ju)个例子,最近在计算机视觉领域非常火的(de)ViT(Visual Transformer)。我(wo)(wo)们(men)(men)发(fa)现,对于ViT现有(you)的(de)方案(an)比(bi)(bi)如(ru)TensorRT/TVM,使(shi)用8bit不会有(you)效率的(de)提升(sheng)。而(er)我(wo)(wo)们(men)(men)通(tong)过编译优化,在ViT上实现了相(xiang)比(bi)(bi)TVM快4.6倍(bei),相(xiang)比(bi)(bi)TRT快1.5倍(bei)的(de)速度提升(sheng)。关于这一(yi)块(kuai)我(wo)(wo)们(men)(men)做了一(yi)些(xie)社区(qu)贡献(xian),相(xiang)关的(de)提交(jiao)已经被社区(qu)合(he)并。

将量化做(zuo)到(dao)工业化,不光(guang)需要使(shi)速度达(da)到(dao)极致,而(er)且需要有一套生产工具。
因为每天处(chu)理的(de)(de)问题(ti)实在太多了(le),为了(le)满足工(gong)业级(ji)的(de)(de)量(liang)化需求,我们(men)实现(xian)了(le)一套统一的(de)(de)生产工(gong)具,它的(de)(de)输入(ru)是不同(tong)类型(xing)(xing)的(de)(de)模型(xing)(xing),包括学术界(jie)大(da)家(jia)都(dou)知道的(de)(de)网络如ResNet,还有大(da)量(liang)商汤自研的(de)(de)网络结构(gou)。
基于(yu)此,我们有两种(zhong)(zhong)量(liang)(liang)化选择,一(yi)种(zhong)(zhong)是(shi)(shi)(shi)在线量(liang)(liang)化,需要(yao)一(yi)些(xie)训练进行Finetune,这(zhei)(zhei)种(zhong)(zhong)情况要(yao)求接口尽(jin)(jin)可(ke)能(neng)(neng)的(de)简单;第(di)二种(zhong)(zhong)是(shi)(shi)(shi)离线量(liang)(liang)化,不能(neng)(neng)重新训练,但(dan)是(shi)(shi)(shi)可(ke)以基于(yu)已有数据做出调整(zheng)(zheng),针对(dui)这(zhei)(zhei)种(zhong)(zhong)情况需要(yao)低成本,性能(neng)(neng)尽(jin)(jin)可(ke)能(neng)(neng)好。针对(dui)这(zhei)(zhei)两种(zhong)(zhong)选择,我们提供了(le)统一(yi)量(liang)(liang)化的(de)接口,并把它适配到不同(tong)的(de)芯片上(shang),因为不同(tong)芯片的(de)量(liang)(liang)化方案(an)是(shi)(shi)(shi)不一(yi)样(yang)的(de),因此需要(yao)适应各种(zhong)(zhong)后端(duan),这(zhei)(zhei)是(shi)(shi)(shi)量(liang)(liang)化部(bu)分的(de)整(zheng)(zheng)体设计。

除(chu)了(le)系统层面优(you)化(hua)之外,我(wo)们今年在(zai)ICLR上提(ti)出了(le)BRECQ算(suan)(suan)(suan)法(fa)(fa)(fa)(fa),这个(ge)算(suan)(suan)(suan)法(fa)(fa)(fa)(fa)是我(wo)们目前(qian)已知的(de)第一个(ge)能(neng)够(gou)实(shi)现媲(pi)美在(zai)线(xian)量化(hua)精度效果的(de)离线(xian)量化(hua)算(suan)(suan)(suan)法(fa)(fa)(fa)(fa);算(suan)(suan)(suan)法(fa)(fa)(fa)(fa)的(de)原理也比较简单,之前(qian)大家优(you)化(hua)一层,我(wo)们扩展(zhan)到(dao)了(le)一个(ge)块。
通过很(hen)多实(shi)验和理论(lun),我们(men)证(zheng)明了(le)块是一个(ge)更好(hao)的(de)粒度(du)。同时除了(le)确定量化参数,也(ye)可以(yi)对权(quan)重(zhong)进行(xing)微调,因此(ci)通过块的(de)设置(zhi)和更好(hao)的(de)权(quan)重(zhong)调整(zheng),实(shi)现(xian)更优效果。这(zhei)个(ge)算(suan)法(fa)在内部走通之(zhi)后经过了(le)大量验证(zheng),证(zheng)明了(le)离(li)线(xian)量化可以(yi)很(hen)好(hao)的(de)保证(zheng)精度(du)。这(zhei)是我们(men)认为(wei)比较有用的(de)一个(ge)算(suan)法(fa),因此(ci)给大家进行(xing)一个(ge)简单的(de)介绍。

此外,各家厂商的(de)硬件(jian)采用了非常不(bu)同(tong)的(de)量(liang)化(hua)(hua)方案。包(bao)括gpu的(de)、dsp的(de)、arm的(de)以(yi)及一(yi)些国产(chan)化(hua)(hua)芯(xin)片(pian)。这(zhei)对(dui)算(suan)(suan)法(fa)提出了很大挑战,但是通(tong)过我们在(zai)算(suan)(suan)法(fa)上的(de)、系统上的(de)、架(jia)(jia)构设计上的(de)工作,可以(yi)很好(hao)的(de)以(yi)一(yi)套框架(jia)(jia)打通(tong)多种硬件(jian)的(de)量(liang)化(hua)(hua)模型生产(chan)。

三、兼顾结构、推理库和硬件,完善软硬件协同
最后再给大家介绍一下我们过去几(ji)年实(shi)践总结出来的(de)经验:做软硬件(jian)的(de)协同(tong)。
但(dan)是这个软(ruan)硬(ying)(ying)(ying)件(jian)协同不是设计芯片时需要(yao)考(kao)虑算法(fa),我(wo)们(men)(men)认为的(de)(de)软(ruan)硬(ying)(ying)(ying)件(jian)协同主要(yao)从以(yi)下三个方面考(kao)虑:我(wo)们(men)(men)内部支撑各(ge)种(zhong)各(ge)样的(de)(de)芯片,大量(liang)的(de)(de)推理库(ku),还有(you)非常多(duo)网络(luo)结(jie)构。我(wo)们(men)(men)结(jie)合(he)结(jie)构、推理库(ku)还有(you)硬(ying)(ying)(ying)件(jian),这三方面建立(li)一个庞大的(de)(de)数据(ju)库(ku),分析三者(zhe)之(zhi)间的(de)(de)关系。
基于(yu)这(zhei)样的数据库,我(wo)们能够(gou)方便、快速地找到在一(yi)个(ge)特定的硬件(jian)上(shang)最(zui)优的网络结构是(shi)什么(me)样的;或者说在一(yi)个(ge)特定的硬件(jian)上(shang),针(zhen)对一(yi)个(ge)推(tui)理库,最(zui)优的结构应该怎么(me)设计?这(zhei)些都对我(wo)们的实际(ji)模(mo)型生产,带来非常多的帮助。
这(zhei)个事(shi)情具体怎(zen)么来做?
首先对不同的硬件(jian)定(ding)义了三个层(ceng)级:L1、L2、L3。

L1指的(de)是黑盒硬(ying)件(jian),我(wo)们需要网络结构能够来overfit硬(ying)件(jian)特性(xing),针对黑盒硬(ying)件(jian)找到最好(hao)的(de)网络硬(ying)件(jian)。
L2指的是开(kai)放式指令集,芯片(pian)的指令集是开(kai)放的,因此可以用网络结构+软件实(shi)现来overfit具体硬件。
L3指的(de)(de)是整个硬件的(de)(de)架(jia)构(gou)(gou)完全开放,针(zhen)对(dui)这样(yang)一(yi)种(zhong)设置可以做全链路耦合的(de)(de)方式,从结构(gou)(gou)、推理、硬件一(yi)起推动(dong)。商汤作为(wei)一(yi)家算法为(wei)核心的(de)(de)公司,我们同时支持三种(zhong)层级的(de)(de)软硬件协同优化。
经过(guo)商汤历史上训练的(de)超过(guo)20万(wan)个(ge)(ge)模型,累计有(you)10万(wan)个(ge)(ge)不(bu)同(tong)的(de)网(wang)络(luo)结(jie)构,同(tong)时也支持11种不(bu)同(tong)的(de)硬件。我(wo)们基(ji)于这(zhei)些信息建了(le)一(yi)个(ge)(ge)数据库。有(you)了(le)这(zhei)个(ge)(ge)数据库之(zhi)后,针对(dui)一(yi)个(ge)(ge)新(xin)的(de)网(wang)络(luo)结(jie)构可以快(kuai)速地(di)通过(guo)实测查询或者算(suan)法(fa)预(yu)测的(de)方式(shi),得到非常高效的(de)计算(suan)数据库。

基于这样(yang)的(de)数(shu)据(ju)库,我们(men)可以针(zhen)对(dui)已经训练好的(de)模型(xing)帮它做各(ge)种(zhong)诊(zhen)断,使它推导出来的(de)模型(xing)综合(he)考虑到精(jing)度(du)、速度(du)、硬件偏好和(he)选择程度(du)等因素后得到最(zui)优的(de)组(zu)合(he)。这样(yang)一(yi)个组(zu)合(he)在实际生产中,它的(de)精(jing)度(du)将(jiang)会有很(hen)大提升。
比如ModelA和Model Pro,ModelA是靠(kao)研究员(yuan)手工(gong)设(she)(she)计的(de)(de)(de)结构,它(ta)(ta)(ta)的(de)(de)(de)Flops、参(can)数(shu)量(liang)(liang)(liang)、访存(cun)量(liang)(liang)(liang)如图,通过(guo)(guo)软硬件协同的(de)(de)(de)数(shu)据(ju)库优化(hua),可以(yi)推导出(chu)(chu)ModelA Pro,它(ta)(ta)(ta)的(de)(de)(de)Flops、参(can)数(shu)量(liang)(liang)(liang)、访存(cun)量(liang)(liang)(liang)都比ModelA大,但速度比ModelA要小。之前(qian)网络(luo)设(she)(she)计是依(yi)赖(lai)于人的(de)(de)(de)经验,现(xian)在(zai)变(bian)成(cheng)依(yi)赖(lai)于数(shu)据(ju)库和算法,通过(guo)(guo)数(shu)据(ju)库和算法帮助研究员(yuan)设(she)(she)计出(chu)(chu)更(geng)好的(de)(de)(de)网络(luo)结构。当我们(men)训(xun)练出(chu)(chu)的(de)(de)(de)模型(xing)到(dao)了十万量(liang)(liang)(liang)级以(yi)后(hou),它(ta)(ta)(ta)能带来非常好的(de)(de)(de)提升。
公司内部每天(tian)有600多个业务(wu)员(yuan)部署模(mo)型,最开始有些人工靠人力来支持训练部署模(mo)型。
后面由于我们的(de)模(mo)型越(yue)来(lai)越(yue)多(duo),人力支撑不上,最终衍生出一套端(duan)到(dao)(dao)端(duan)的(de)SaaS解决方(fang)案(an)。它的(de)核心是(shi)做端(duan)到(dao)(dao)端(duan)的(de)模(mo)型部(bu)署,把格(ge)式的(de)转换、量(liang)化(hua)以及(ji)网络级的(de)优化(hua)混(hun)到(dao)(dao)一起(qi),实现一次(ci)模(mo)型上传、多(duo)平台(tai)部(bu)署测试、一次(ci)性搞定。
这套(tao)系(xi)统在内部叫Adela系(xi)统,现(xian)在每天支持(chi)(chi)600多名(ming)公司内部用户,支持(chi)(chi)商(shang)汤目前超过90%的(de)内部模型发布。

这套服务架构分成四层(ceng),第一(yi)层(ceng)设备层(ceng),这一(yi)层(ceng)不太可(ke)控,主(zhu)(zhu)要以支(zhi)持外部(bu)任意设备为主(zhu)(zhu)。
第二层引(yin)擎(qing)层,我(wo)们会接入低(di)比特的算子,网络(luo)运行(xing)时,支(zhi)持混合运行(xing),然后会做很多图切分、格式转换、静态调度。
通过引擎层上面(mian)做一(yi)些封装(zhuang),封装(zhuang)成模型编译部署接(jie)(jie)口、测速(su)接(jie)(jie)口,在上面(mian)提供很多(duo)算法:包括(kuo)在线(xian)量化、离线(xian)量化,还包括(kuo)速(su)度的(de)预测、网络结(jie)构的(de)搜(sou)索(suo)、图变换的(de)优(you)化等等。
再(zai)往上到(dao)了服(fu)务层,从原始模(mo)(mo)型文件到(dao)端模(mo)(mo)型到(dao)量化(hua)模(mo)(mo)型再(zai)到(dao)速度和精(jing)度更(geng)优的模(mo)(mo)型,提(ti)供非常统一(yi)(yi)的框架(jia)。提(ti)供统一(yi)(yi)框架(jia)之后,通过一(yi)(yi)个命(ming)令(ling)行或者网页上简(jian)单的交互,就可以实现(xian)全自动的业务模(mo)(mo)型部署。

为了进(jin)一(yi)步促进(jin)学术研究跟工业界(jie)的结合(he),我(wo)们(men)目前(qian)也在(zai)计(ji)划把两个核(he)心的服务对外(wai)开放,一(yi)个是(shi)(shi)模型的自动量化(hua),另一(yi)个是(shi)(shi)模型在(zai)特定硬(ying)件上的优化(hua)建议。
量化上包(bao)含了(le)目前我们(men)认(ren)为(wei)较好的(de)(de)学(xue)术界算法(fa),以(yi)及(ji)自己研发的(de)(de)使工(gong)业界模型(xing)量化更加落地的(de)(de)算法(fa),跟(gen)现在(zai)市(shi)面上主流(liu)推理引(yin)擎(qing)做(zuo)了(le)对接,适(shi)配大部分深度(du)学(xue)习(xi)的(de)(de)硬(ying)(ying)件(jian)(jian)和后端(duan),这样可以(yi)非常方便研究员验(yan)证这个算法(fa)是(shi)不是(shi)真的(de)(de)可以(yi)实际(ji)部署,也方便我们(men)的(de)(de)硬(ying)(ying)件(jian)(jian)厂(chang)商来进(jin)行(xing)最(zui)新算法(fa)的(de)(de)跟(gen)进(jin)工(gong)作。
同时(shi)把计算数据(ju)库GPDB服务的(de)能(neng)力逐步提供出来(lai),不仅方便(bian)研究员验证结(jie)构在实际设备(bei)上(shang)的(de)速度(du),还(hai)方便(bian)硬件厂商来(lai)寻找各种性能(neng)的(de)缺陷和瓶颈。
目前(qian)我(wo)们(men)在准备一(yi)些开源的(de)流程(cheng),希望更多人能(neng)够得到相关技术的(de)收(shou)益。我(wo)们(men)有一(yi)个专门负(fu)责这部分工(gong)作(zuo)的(de)内(nei)部研究团队叫(jiao)工(gong)具链团队,平常也会写一(yi)些专栏,欢迎大家关注。

以上是闫俊杰演讲内容的完整整理。