深度学习计算框架综述(一)行业内计算框架总览

我们先来看一下行业内主流的深度学习计算框架,有超过十余个,大致可以分为三类:

1. 深度学习计算框架先驱(Tensorflow、Caffe等):最早的开源深度学习框架,为整个AI产业赋能,大大推动了整个行业的发展,优点是同时支持训练和推理、跨平台、开源社区力量强大、框架迭代开发快等,能够满足大部分企业的需求,但是在端侧部署存在以下问题,对移动端处理器(CPU、GPU、DSP)的优化有限,限制了一些算力要求较高的AI算法在端侧的应用

2. 硬件厂商出品的计算框架:一些硬件厂商,如高通、联发科、三星、英伟达等,为了发挥、展示自家芯片的AI能力,都会推出计算框架,如SNPE、NeuroPilot、Eden、TensorRT,这些框架的特点是,只做推理,支持Tensorlfow、Caffe等模型的转换,对于自家的GPU、DSP、NPU都做了深度的优化,但对CPU几乎不优化(其实也可以理解,优化CPU等于在帮ARM、Intel干活了),还有两个问题:作为一个应用开发者,其实更希望一套代码能够兼容多个硬件平台,SNPE只能用在高通平台上,NeuroPilot只能在联发科平台运行...为了让应用兼容多个硬件平台,就需要集成好几个计算框架,维护起来极其Egg Pain;作为一个框架开发人员,因为这些硬件厂商的框架不开源,无法扩展其功能,如果算法中有些op转换不成功,就要给硬件厂商提case,基本要等很久才能支持(这里就不吐槽了)

3. 计算框架的后起之秀:首先必须要感谢一下NCNN及其作者nihui对于开源社区的贡献(ncnn的qq交流群每天都很欢乐),NCNN作为国内第一个跨平台、高性能的开源计算框架,在一定程度上可以说推动了这个领域的发展,对移动端CPU做了极致的优化(虽然后来被MACE、MNN超越了),后来又支持了Vulkan的优化,后续很多开源框架都多少借鉴了NCNN的设计思想。除了NCNN,还有MACE、MNN、QNNPack、TFLite、PPL等,这些框架开始加入对CPU int8、GPU、DSP的深度优化

我在上述的分析中,谈及的都是计算框架的现状,所有的框架都在不断的地优化、改进,我们可以保持对他们的关注,把握未来的趋势。

对于未来计算框架的趋势,笔者有一些观点在这里和大家分享一下:出于对隐私的保护,将来的端侧计算框架不会局限于做推理加速,也会支持端侧训练,目前MNN已经开始支持端侧训练了,我们的框架也已经支持了端侧训练并推动了一些算法的落地,例如,智能通知,算法完全在端侧训练;出于对系统安全的考虑,Google开始要求手机厂商从Android 10开始,把指纹识别、人脸解锁等涉及用户隐私的模块放在TEE中运行,TEE对于C/C++标准库支持并不好,所以计算框架开发者也需要开始考虑支持TEE了;此外,随着这个领域的不断发展,当所有的Operator都支持了,硬件基本定型了(不再出现XPU),最终端侧深度学习计算框架会走向统一,而最有可能统一的就是Google了,有生态,有技术实力,以及对下游厂商的把控能力,看好TFLite,虽然目前看来还没有统一的趋势。

在笔者看来,要开发一个满足所有人需求的计算框架是不太现实的,首先,深度学习的算子应该已经超过了200,而且数量还在不断增长,其次,要支持所有的CPU(ARM、Intel)、GPU(Adreno、Mali、Imagination、Nvidia、AMD)、DSP(Qualcomm Hexagon、MTK、Samsung)、NPU(Qualcomm、MTK、Samsung、Apple),对这些处理器做深度优化,其中CPU、DSP还需要汇编级优化,另外,还要支持Int8、Uint8、Int16、Uint16、FP16、FP32的计算,假如平均每个OP需要写100行代码(根据我们的经验,平均每个算子的代码肯定要超过100行),按200个算子,10个处理器,平均每个算子支持两种数据类型来计算,代码量就是100 * 200 * 10 * 2 = 40w,如果要支持训练,代码量又会猛增,这只是粗略的估计,还不包括其他模块的代码,工作量可想而知。

如果大家想自研计算框架,可以从以下几方面来考虑:

1. 我对它的定位是什么?加速推理,还是既支持推理也支持训练?既支持推理又支持训练,在架构设计的时候就需要考虑更多问题,例如模型格式的定义、模型转换器、模型解析器、内存复用等模块都需要支持训练,同时每个Operator都要实现backward接口

2. 需不需要支持所有的处理器?如果你的回答是需要,那你需要马上招人....这个开发量是非常巨大的,如果还要支持不同数据类型的加速计算,比如INT8、UINT8、INT16、UINT16、FP16、FP32,想想都头疼,根据笔者的经验,如果大家所在的公司有很多AI算法落地的需求,CPU、GPU、DSP、NPU都会用到的,不同的业务对性能、功耗、内存、精度的要求是不一样的,靠一个处理器往往无法满足所有的业务需求,可以说,计算框架开发任重道远

3. 需不需要支持TEE?支持TEE,意味着你的框架要尽可能少地依赖三方库,甚至C/C++标准库;此外,不同厂商的TEE OS有不同的限制,在高通的TEE环境中,不支持GPU,只支持CPU、DSP单线程执行,而trustonic(MTK、Samsung)的 TEE则支持多线程

 

下一章,我会介绍计算框架的组成与设计要点

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值