作者: 王乐园 王贻达 AWS AI
本文谈的是在移动端加速卷积神经网络。虽然AWS是个云服务公司,我们同样重视edge上的计算。现代终端设备一般都跟云端服务器相连,但只要可能,我们都希望计算可以在本地终端解决,这样做的好处是多方面的:既可以减小网络带宽的压力,又可以避免网络传输产生的时延,还可以让用户的数据更安全。现代终端设备一般用一个片上系统 (SoC)做计算,上面部署了通用的CPU和集成显卡。对于日益增多的卷积神经网络推理计算来说,在移动端的CPU(多数ARM,少数x86)上虽然优化实现相对简单(参见我们对CPU的优化),但此处它并非最佳选择,因为:1)移动端CPU算力一般弱于集成显卡(相差在2-6倍之间);2)更重要的是,已经有很多程序运行在CPU上,如果将模型推理也放在上面会导致CPU耗能过大或者CPU节流,造成耗电过快同时性能不稳定。所以在移动端进行模型计算,集成显卡是更好的选择。
说起来很有道理,但用起来就不一样了。实际中我们发现移动设备上的集成显卡利用率很低,大家并不怎么用它来跑卷积神经网络推理。原因其实很简单:难用。在AWS,我们面对很多移动端机器,里面用到集成显卡多数来自Intel, ARM和Nvidia,编程模型一般是OpenCL和CUDA。虽然对于某些特定模型和算子,硬件厂商提供了高性能库(Intel的OpenVINO, ARM的ACL, Nvidia的CuDNN),但它们覆盖度有限,用起来不灵活,造成即使对单一硬件做多模型的优化,工程代价也很大,遑论我们面对的硬件类种类繁多。总之,要用传统方法在集成显卡上实现一个通用高效的模型推理并不容易。
好在现在我们有了深度学习编译器。Apache TVM从一开始的设计目标就是做好模型和硬件的中间件,把不同模型编译到不同硬件上执行,中间尽量统一管理,这跟我们对集成显卡的需求是完全一致的。于是,我们的解法是扩展Apache TVM对集成显卡的支持,用同一套IR来统一描述神经网络并根据硬件类型lower到不同的硬件平台上去。这样我们可以尽量复用优化,并且利用TVM已有的优化方案(比如此文提到的算子优化、图优化和协同优化)来实现在集成显卡上的高效模型推理。最后,我们还在TVM上对几个在集成显卡上经常被用到的计算机视觉特定算子进行了精调。我们在三款主流厂商的集成显卡上进行了验证,包括AWS DeepLens (Intel Graphics), Acer aiSage/Rockchip RK-3399 (ARM Mali)和Nvidia Jetson Nano (Nvidia GPU with Maxell architecture)。 这个项目的结果发表在了并行计算会议ICPP 2019:A Unified Optimization Approach for CNN Model Inference on Integrated GPUs。相关代码都已经merge到Apache TVM里了。时至今日这个项目也还没有做完,我们依然在根据实际需要不断扩展对不同模型和硬件的支持。
具体地说,为了让TVM高效快速支持集成显卡上卷机神经网络的推断计算,我们在TVM已有框架下加入了下图彩色部分所示的部分,包括IR,对算子和计算图的优化,以及对CUDA/OpenCL后端的优化。
以下是我们在不同移动端显卡上优化后的性能和原厂提供软件的比较(latency, 数字越低越好)。从图中看出我们的性能在大部分模型上比原厂快,而且模型覆盖率更高,比如在我们做实验的时候Intel OpenVINO还不支持在DeepLens上跑目标检测网络。
下图是我们使用算子搜索和计算图搜索前后的性能变化(speedup, 数字越高越好),具体优化算法概念上跟我们在CPU上的优化是一样的,不过算子搜索模板因为硬件架构的不同而有所改变。
另外,我们也在TVM中加入了对视觉模型某些操作算子的一些细致优化。其中包括对视觉模型中常见NMS算子,扫描算子的优化。NMS中包含一个GPU上经典的优化问题:排序。排序和扫描在英伟达显卡上都已经有对应的优化,但是在英特尔集成显卡上并没有相应实现。我们用TVM IR实现了GPU经典优化,下方左图是我们对GPU排序的优化,右图是对扫描的优化。和普通的排序不同,NMS中的排序是区块排序,意思是数据分散在不同区块中,排序仅发生在每个区块中,不同区块间数据顺序无需改变。因为GPU有高速并行处理大数据的能力,不适合小区块的处理,我们将不同区块放在同一个数组里,并且记录下每个区块开始的位置。我们将这个大数组均分成n块(具体数量根据GPU硬件资源决定)。图中假设我们GPU有5个并行线程,我们将数据均分为5块。每个线程单独排序每块数据,跨越区块边界的不去排序。在每块数据排序结束后再进行合并操作,用的也是GPU经典的线程合作式合并方法。详细方法介绍请参考上方链接的论文。我们发现用TVM IR实现和用OpenCL/CUDA实现不仅无需在不同后端采用不同语言,代码数也有显著减少。
下图是计算机视觉模型在优化相应算子前后的性能比较(speedup, 数字越高越好)。
虽然我们做了一系列针对集成显卡可编程性和性能的优化,还是要承认集成显卡的可编程性和灵活度比CPU要差,比如排序这种算法,在CPU上可以快速实现,但是在集成显卡上实现一个相对性能较优的方法要更大的工程量。如果用户提出一个新模型,而我们没有足够时间来实现一个集成显卡上面的优化方案,这时我们提供了一个替代方法,把新模型中暂不支持的运算放回到CPU上执行。这样可以保证任意模型我们都可以快速用我们的系统实现。实际操作中,对于一些计算量较小但控制逻辑复杂的视觉算子,在CPU上实现简单得多,而且在CPU上和集成显卡上性能差别并不是很大。例如,把SSD模型的NMS算子退回到CPU上执行与全模型在集成显卡上执行比较,在AWS Deeplens上用退回方法速度仅下降0.5%。退回的实现方法逻辑上很简单,利用了两次遍历图的逻辑。第一次遍历将需要在GPU/CPU上跑的算子进行分别标记,第二次遍历将插入数据拷贝算子。具体的退回实现方法请参看上面我们提到的论文。
图神经网络(Graph Neural Networks,GNN)是一类专门处理图结构数据的深度学习模型。与传统的深度学习模型不同,GNN能够直接处理节点和边之间的关系,捕捉图的结构信息。其核心思想是通过消息传递机制,使节点能够聚合其邻居节点的信息,从而更新自身的表示。GNN的基本原理:节点表示更新: 每个节点通过聚合其邻居节点的特征来更新自身的表示。这种聚合通常是加权求和,权重可以是固定的,也可以
图神经网络(Graph Neural Networks, GNNs)是一种专门用于处理图结构数据的深度学习模型。GNNs 通过学习节点的表示,能够捕捉图中的复杂依赖关系,因此在处理社交网络分析、推荐系统、知识图谱等多种应用中表现出色。下面是一个简单的图神经网络实现,我们将使用 Python 和 PyTorch 库。在这个例子中,我们将构建一个基本的图卷积网络(Graph Convolutiona
基于MATLAB2019a。---和同学一起完成老师给的作业。在MATLAB中这两种框架的神经网络是已经经过训练的网络,官方的数据是使用了百万张训练了大约100多个类别的物品,也就是大概可以识别一千多种物品。在深度学习中训练神经网络是一个对硬件要求极高的项目,内部涉及大量的矩阵运算,用CPU训练绝对是一件令人头秃的工作,推荐使用GPU训练(虽然我是没那个条件。。。)。一开始是使用的AlexNet后
在深度学习任务中,虽然可以通过堆叠参数、设计更复杂的结构来提高模型的表征能力,但这也会导致模型的计算量增加,训练时间延长。所以,模型的预测有多好并不是唯一的考虑因素,训练时间长会导致成本的上升。一、影响网络训练速度的因素1.使用的处理器(GPU和CPU)CPU(中央处理器)是一台计算机的运算核心和控制核心。CPU、内部存储器和输入/输出设备是电子计算机三大核心部件。其功能主要是解释计算机指令以及处
学习神经网络(深度学习)电脑的配置要求个人电脑配置与使用感受(电脑小白)我目前所使用的电脑的配置是 (1)CPU:i5-9300H (2)显卡(GPU):GTX1650-4G(4G表示显存) (3)内存:8G (4)硬盘:1T固态硬盘 (5)屏幕:15.6英寸75色域 现在用tensorflow-gpu版跑VGG16神经网络时:CPU还行,37%左右;显存直接到了85%左右;GPU更是干到了93%
2018最新深度学习与神经网络的计算特点与硬件配置分析(一)深度学习训练平台现状与理想的计算架构分析 深度神经网络(DNN)计算数据模型繁多,结构复杂,主流模型含几十个隐含层,
TCL电视神经网络处理器是什么?npu。1、tcl电视专攻NPU(神经网络处理器)的海思Hi3516DV300芯片是神经网络处理器。2、神经网络处理器,也就是通常说的AI处理器。它可以是手机更聪明,可以学习用户的用机习惯,在拍摄照片的时候,可以根据被拍摄物体匹配最适合的相机参数。求电脑处理器排行榜天梯,有哪些比较推荐?AI爱发猫。电脑处理器排行榜前五名分别是Intel酷睿i5-9400F、Inte
深度学习训练与神经网络计算架构配置分析目录 1 深度学习训练平台与理想计算
找资料的时候感觉现在写30XX系显卡深度学习环境配置的文章还不太完善,所以记录了自己的采坑经历。Why?下面这张图非常直观,TITAN性能比2080ti强,3080的CUDA核心数差不多是TITAN的两倍,内存少一些。目前3080显卡7000出头可以拿下,性价比非常不错。1 准备工作上半年配了台支持4GPU的机器,原计划下半年训练任务上来以后再加卡。但是30XX显卡出来以后,2个3080理论上和4
一、运行环境1.1 显卡硬件准备我们需要建立一个合适的运行环境,这个折腾了我很久。首先我们的电脑得有一张Nvidia的显卡,我用的是RTX 2070,有8GB的显存,这个可以通过nvidia-smi在cmd窗口中看到相关的信息。1.2 cuda和cudnn的安装然后,我们需要安装CUDA和CUDNN,注意根据最新的驱动版本,我安装的是V11.1cuda是,具体的安装教程可以参考B站视频【CUDA安
前不久,拿到一个类似Intel NCS神经网络计算棒的玩意儿——“若派Ropal”神经网络计算棒(见下图),听名字的话可能大部分人会比较陌生,但是若看其官方列出的性能指标足以吓你一大跳,比起Intel NCS,“若派Ropal”计算棒的性能要高出不少,可以直接正面PK Intel Movidius系列产品在边缘计算领域的地位,当然,这还不算什么,若是告诉你“若派Ropal”计算棒的AI芯片方案出自
机器学习简介(1)——神经网络前言一、神经网络1.神经网络(Neural Network)1.1 什么是神经网络?1.2 神经网络是如何被训练的?1.3 如何学习的?1.4 如何训练,对信息的加工?2.卷积神经网络CNN(Convolution Neural Network)2.1 什么是卷积神经网络?2.2 图片如何卷积?2.3 池化?2.4 流行的CNN结构2.5 CNN的应用3.循环神经网
搭建卷积神经网络模型1.3.1 边界填充1.3.2 单步卷积1.3.3 卷积1.4 池化层1.5 反向传播2.1.0 TensorFlow模型不需要创建placeholders2.1.1 初始化参数2.1.2 前向传播2.1.3 计算成本2.1.4 构建模型预测函数model测试epoch=150,learning_rate=0.009,mini_batch_size=64epoch=1000,
前言 神经网络的理论知识上一篇博文已经介绍。本文主要是通过编程实现神经网络模型,并对给定样本集进行分类。我们知道神经网络分为输入层、隐层和输出层。各层在通过前向传播计算激活值和反向传播计算偏导数的时候,只要分清楚该层的输入、输出即能正确编程实现。 本文的C++代码主要来自于万能的网络,感谢众大神的开
密码校验 方案二 password: [{ required: true, validator: validatePassword, trigger: 'blur' }], export function validatePassword(rule, value, callback) { let s ...
在接下来四五篇笔记中,将介绍 model 查询方法的各个细节,为我们的查询操作提供各种便利。本篇笔记将介绍惰性查找、filter、exclude、annotate等方法,目录如下:惰性查找filterexcludeannotatealiasorder_by1、惰性查找前面我们在介绍 Django 增删改查的时候,提到过他的惰性查找的规则。也就是说普通的 filter 语句执行时,系统并不会去查询数
基于SpringBoot3+Vue3前后端分离的电子相册管理系统,本人原创开发。主要功能:基于SpringBoot3+Vue3前后端分离的电子相册管理系统,系统包含管理员、用户角色,功能如下: 管理员:用户管理;相册管理;照片管理;留言管理;公告信息;个人信息;密码修改; 用户:相册管理;照片管理;留言管理;公告查看;个人信息修改;密码修改。 系统界面美观大方,使用了SpringBoot3、Myb
掌握Kotlin核心演进路径,助力开发者高效转型。回顾从Java到Kotlin的20年变迁,解析协程、空安全等关键特性在实际项目中的应用优势,分享老程序员在kotlin程序员节的深度反思与经验总结,值得收藏。
ORA-22905:无法从非嵌套表项访问行 说明,该错误可能产生于在使用table()函数的时候,传递的参数不是schema级别的table类型,而是直接在PL/SQL块中定义的table类型。ORA-00932:数据类型不一致:应为UDT,但却获得NUMBER &nb