嵌入式AI简报 (2020-06-03)

关注模型压缩、低比特量化、移动端推理加速优化、部署

导读:本次16条。【业界新闻】TensorFlow Lite亮相TF DevSummit性能方面支持OpenCL且CPU基于ruy性能也有提升,微控制器方面持续发力等等;ARM Cortex-A78和旗舰X1的新架构发布,树莓派4发布;【论文】谷歌提出数据回波榨干训练时的GPU资源、CVPR2020不引入约束的剪枝方法,以及BERT压缩方面的DynaBERT。【开源】本月可能会有2家推理框架开源。华为Mindspore发布新版本支持二阶优化,训练速度快到爆炸、端上手写体训练项目MNIST-CoreML-Training;【博文】Tengine支持armv8.2的cpu fp16特性加速推理,且支持加载NCNN模型;一篇对TFLite的Delegate的科普;Face++在端侧框架cpu方面所做的工作总结;TVM在Web上对WebAssembly和WebGPU的尝试;探秘嵌入式系统内存管理机制。

首先是端侧芯片方面的新闻,开胃:

注:个别链接打不开,请点击文末阅读原文跳转

业界新闻

  • TensorFlow Lite 新功能亮相 TF DevSummit‘20 | TensorFlow
    摘要:摘一下半年内的特性要点:新模型支持MobileBERT 和 ALBERT-Lite(支持多种 NLP 任务的轻量级版本 BERT)、EfficientNet-Lite的支持;新的 TensorFlow Lite 转换器支持如DeepSpeech V2,Mask R-CNN,MobileBERT,MobileNetSSD 等;控制流方面的op支持,也支持 Keras 模型的训练时量化。
    性能方面。新的arm cpu矩阵乘法库 ruy(https://github.com/google/ruy ),以及xnnpack、Hexagon DSP、CoreML、OpenCL(安卓)等Delegate的推理支持。支持对内部事件(如算子调用)的日志记录,可结合Android的System Tracing追踪性能瓶颈。详见:https://developer.android.com/topic/performance/tracing
    微控制器方面。Arduino官方提供了支持,如5 分钟内将语音检测部署到 Arduino Nano、Cadence 宣布旗下的 Tensilica HiFi DSP 系列支持 TF Micro等。
    另外,长期计划图见:https://tensorflow.google.cn/lite/guide/roadmap
  • ARM的新架构Cortex-A78和Cortex-X1,Mali-G78和G68 | 三易生活
    摘要:今年的Cortex-A78架构上,ARM故技重施, 再次使用不对等制程和频率条件,得出一个“性能大幅提升”的结论。
    具体来说,ARM使用5nm制程、主频高达3GHz的Cortex-A78核心,与使用7nm制程、主频仅有2.6GHz的Cortex-A77核心进行性能对比,然后得出一个“在功耗均为1W每核心(请注意这是一个很高的功耗)的前提下,A78比A77性能高20%”的结论。同时又将5nm制程、主频低到2.1GHz的A78核心,与7nm制程、主频反而更高一点到2.3GHz的A77架构对比,然后说性能相同的情况下,新设计的功耗少了一半。
    为什么要这样做呢?因为发布A78架构的同时,还推出定位更高的“超大核设计”——Cortex-X1。与Cortex-A78相比,Cortex-X1是前者的“解除封印”版,没有为了缩减成本,在设计上缩水,此外,作为ARM首次针对移动计算推出的全新旗舰核心设计,Cortex-X1还很明显从苹果的A系列和三星的“猫鼬”大核心当中吸取经验。例如它可以配置到最高8MB的三级缓存,具备4条128bit的NEON多媒体指令单元(但受限于指令集兼容性,无法实现合并为256bit或512bit的模式),具备超大的224条乱序执行窗口,更大缓存提取带宽,更多操作缓存、更强调度能力等。
    ARM还发布了全新的旗舰GPU架构Mali-G78以及定位次旗舰的Mali-G68。Mali-G78可以看作是Mali-G77的续作,依然基于全新的Valhall图形架构,最高可配置24颗核心(G77仅为16核心)。
    Mali-G78架构调整,原本G77只有一个全局时钟域,而G78则改为两级结构,实现了异步时钟域,也就是上层共享GPU模块与实际着色器核心频率的分离。好处就是GPU核心频率可以和GPU其它部分的频率不同,实现动态调整,从而降低功耗、提高能效。Mali-G78重构了FMA引擎,包括新的乘法架构、新的加法架构、FP32/FP16浮点,执行效率更高,号称可以节省30%的功耗。
    Mali-G68的架构实际上和Mali-G78是一样的,但最多只能配置6个核心。简单来说,配置1-6个核心就叫Mali-G68,配置7-24个核心就叫你Mali-G78,和Mali-G57/G77类似。
  • 树莓派4首发8GB版本,售价75刀,还可尝鲜64位操作系统 | 机器之心
    摘要:树莓派 4 使用四核 64 位的 ARM Cortex-A72 处理器,具有千兆以太网,双频 802.11ac 无线网,蓝牙 5.0,两个 USB 3.0 和两个 USB 2.0,支持连接两台 4K 显示器,GPU 支持 OpenGL ES 3.x,4K 60fps HEVC 视频硬件解码等。
    基于TensorFlow Lite在同样的数据集上,树莓派4代的推理性能可达到普通TensorFlow的3~4倍,且4代推理速度超过树莓派3B+ 4 倍以上,性能直逼 Jetson Nano。配合使用 Coral USB 加速棒,速度甚至比 MBP 还快。Jetson Nano Developer Kit 官方标价 99 美元。
  • 深扒英伟达安培新架构,五大技术新招刀刀见血 | 芯东西
    摘要:基于83页的《NVIDIA A100 Tensor Core GPU Architecture》白皮书及采访信息,本文将会提炼安培GPU架构在计算和内存层次结构的关键创新与改进,深度解析这一全新架构怎样实现NVIDIA迄今为止最大的性能飞跃。其中特向包括不限于:
    1. 安培架构:全球最大7nm芯片,拥有542亿个晶体管,采用40GB三星HBM2,内存带宽可达到1.6 Tbps。高带宽的HBM2内存和更大、更快的缓存为增加的CUDA Core和Tensor Core提供数据;
    2. 第三代Tensor Core:处理速度更快、更灵活,TF32精度可将AI性能提升20倍;
    3. 结构化稀疏:进一步将AI推理性能提升2倍;
    4. 多实例GPU:每个GPU可分成7个并发实例,优化GPU利用率;
    5. 第三代NVLink和NVSwitch:高效可扩展,带宽较上一代提升2倍有余。

论文

  • 为了不让GPU等CPU,谷歌提出“数据回波”榨干GPU空闲时间,训练速度提升3倍多 | 量子位
    链接:https://arxiv.org/abs/1907.05550
    博客:https://ai.googleblog.com/2020/05/speeding-up-neural-network-training.html
    摘要:训练时GPU或者是更快的AI加速器实际上在等上游如图像预处理等的计算,且由于上游和加速器的下游的串行流水排布,导致AI加速器的使用率并非100%。本文作者提出,加速器空置50%情况下,预处理batch的第一个优化步骤之后,可重复利用该batch再进行一次训练。如果重复数据与新数据一样有用,既降低磁盘IO,训练效率也提高一倍。
    将数据复制到训练管道中某个位置的随机缓冲区中,无论哪个阶段产生瓶颈,都可将缓存数据插入任意位置。数据回波在样本级别对数据Shuffle,而batch回波则对重复批次的序列做Shuffle。另外还可以在数据扩充之前插入缓冲区,以使重复数据的每个副本略有不同,因此不是简单机械重复,而是更接近一个新样本。
    随着如TPU等AI专用加速器的性能提升,即也表示和通用处理器的差距会越来越大,Google期望数据回波和类似策略将成为神经网络培训工具包中越来越重要的一部分。
  • [CVPR2020] 纪荣嵘教授团队提出基于高秩特征图的滤波器剪枝方法:不引入约束,浮点运算和参数量显著减少 | 机器之心
    链接:https://arxiv.org/abs/2002.10179
    项目:https://github.com/lmbxmu/HRank
    摘要:HRank 的灵感来自于这样一个发现:无论 CNN 接收的图像批数是多少,由单个滤波器生成的多个特征图的平均秩总是相同的。在 HRank 的基础上,研究者还提出了一种针对低秩特征图所对应滤波器进行剪枝的算法。剪枝的原理是低秩特征图包含的信息较少,因此剪枝后的结果可以很容易地再现。
    算法流程:首先,计算某个特征图的秩的平均,对这些秩进行降序排列;然后,确定某一卷积层的待保留滤波器数量和待修剪滤波器数量,其实也就是确定卷积层对应的压缩率;最后,根据计算得到的秩,从所有滤波器中筛选出秩较高的那些,从而建立剪枝后的模型。
    实验基于 CIFAR-10 和 ImageNet 两个数据集,使用 VGGNet、GoogLeNet、ResNet 和 DenseNet 作为 Baseline 模型,测试本文方法对于各种结构的适用性,实验结果优秀。
  • DynaBERT:动态一次获得多个尺寸的小模型 | 夕小瑶的卖萌屋
    链接:https://www.researchgate.net/publication/340523407_DynaBERT_Dynamic_BERT_with_Adaptive_Width_and_Depth
    摘要:本文对于BERT的压缩流程是这样的:训练时,对宽度和深度进行裁剪,训练不同的子网络;推理时,根据速度需要直接裁剪,用裁剪后的子网络进行预测。整体的训练分为两个阶段,先进行宽度自适应训练,再进行宽度+深度自适应训练。
    本篇论文的创新点主要在于Adaptive width的训练方式,考虑到后续的裁剪,作者对head和neuron进行了排序,并利用蒸馏让子网络学习大网络的知识。

开源项目

注:每条内容前缀为github地址的仓库拥有者和仓库名,补全地址后为github.com/<repo_owner>/<repo_name>

博文

  • Tengine armv8.2 with ncnn serializer | 知乎
    摘要:本文将会为大家评估armv8.2的FP16的FMLA指令和Int8的SDOT指令的计算能力,并结合Tengine开源版本,采用Hybrid-FP16策略,让计算核心模块(im2col+sgemm)采用FP16的前提下,使用 Tengine 来跑 NCNN 模型,解锁更强性能。
  • TensorFlow Lite的 GPU 委托代理(Delegate)是什么 | NeuralTalk
    摘要:目前TFLite的 Delegate支持了 OPENCL 、Hexagon DSP、XNNPACK等。本文从TensorFlow Lite的文档出发并结合作者思考,为大家尽可能通俗地讲解什么是TensorFlow Lite 的 Delegate 。
  • 旷视 MegEngine 推理性能极致优化之综述篇 | 旷视研究院
    摘要:MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案,实现当前业界最快运行速度。
    本文从推理侧的数据排布(Inference Layout)讲起,接着介绍MegEngine的Im2col+MatMul、Winograd、Fast-Run工程优化实践。经典的轻量卷积神经网络实验表明,经过MegEngine加速,ResNet18和ResNet50最高加速比可达2x以上,ShuffleNet V2和MobileNet V2执行效率也得到显著提升,实现了业界当前最佳推理性能。
  • 面向下一代Web的深度学习编译:WebAssembly和WebGPU的TVM初探 | 知乎
    摘要:目前有很多框架如tf.js, onnx.js在支持浏览器部署,但往往浏览器端无法充分利用GPU资源。即使WebGL可通过图形渲染的方式去访问GPU,但依然无法引入shared memory、generic storage buffer的概念去优化程序(虽然OpenGL新版本部分解决,但目前WebGL依然是基于旧的OpenGL标准)。
    最近Web端两个重要的新元素 – WebAssembly 和 WebGPU 给了解决浏览器端机器学习一个新的希望。WebGPU是下一代互联网的图形学接口,目前已经进入了实现阶段,主要浏览器的nightly版本已经加入了WebGPU的支持。从API上,WebGPU支持了compute shader,使得更加极致优化浏览器端的算子成为可能。
    为了探索这个可能性,TVM社区最近加入了WebAssembly和WebGPU后端的支持。通过已有的架构生成嵌入WebGPU compute shader的wasm模块。在Chrome预览版本上的测试结果展示了很大的潜力 – tvm生成的WebGPU模块在MacOS上可以获得和直接本地运行native metal几乎一样的效率。
  • 深入理解C11/C++11内存模型 | Linux阅码场
    摘要:现代计算机体系结构上,CPU执行指令的速度远远大于CPU访问内存的速度,于是引入Cache机制来加速内存访问速度。除了Cache以外,分支预测和指令预取也在很大程度上提升了CPU的执行速度。随着SMP的出现,多线程编程模型被广泛应用,在多线程模型下对共享变量的访问变成了一个复杂的问题。于是我们有必要了解一下内存模型,这是多处理器架构下并发编程里必须掌握的一个基础概念。
  • 解读嵌入式操作系统的内存 | strongerHuang
    摘要:linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。

往期回顾

2 0 2 0
2020-06-03 2020-05-15 2020-04-26
2020-04-04 2020-03-19 2020-03-02 2020-02-16
2020-01-27 2020-01-06 2019-12-17 2019-12-02
2 0 1 9
2019-11-30 2019-11-18 2019-10-31 2019-10-17
2019-10-03 2019-09-16 2019-08-30 2019-08-15
2019-07-30 2019-07-15 2019-06-29 2019-06-17
2019-05-30 2019-05-15 2019-04-27 2019-04-13
2019-03-31

注:个别链接打不开,请点击文末阅读原文跳转

wechat_qrcode

往期回顾:见公众号主菜单【历史消息】


知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 通用许可协议进行许可。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

2020-06-17@Bi-weekly 上一篇
2020-05-15@Bi-weekly 下一篇