算子切分

在了解算子切分前,先了解一下卷积的运算过程,作者将算子切分分为了两个维度的切分:OC维度和H维度,没有W维度可能与数据在内存中的存储方式有关。

OC维度切分

卷积就是OC数量个kernel_size×kernel_size×IC大小的卷积核与输入张量卷积计算后的输出叠加,因此从OC维度上切分,将OC×ρ个卷积核放在CPU上,OC×(1-ρ)个卷积核放在GPU上计算是容易理解的。

H维度切分

从H维度上切分,如果H * ρ = kerne_size + stride * n ,那切分与不切分的结果是可以等效的,负责就需要从切分位置进行填充,经过这一操作后,特征图也会增大。

不同维度划分对比

作者以YOLO中的卷积为例,测试了不同大小卷积通过两个维度切分后的加速效果对比,切分比例为0.5。文中给出的解释是:

The reason is that partitioning may reduce processor utilization compared to , depending on the operator shape. To utilize the inter-core and intra-core parallelism of a processor, the tensors of an operator need to be divided into blocks and scheduled to run on different cores. Take the GPU as an example shown in Fig. 11. A block named as a work group is scheduled to run on a GPU core. To efficiently utilize the many ALUs in a core, the basic execution unit named as a warp executes the same instruction for a number of threads (e.g., 64 or 128) simultaneously. Therefore, a work group should provide enough threads to fill up the warps. Or there will be idle ALUs.

作者提出与 OC 相比,H 分区可能会降低处理器利用率,计算任务分配给SM,每一个SM会有32个线程束,每一个线程数有64或者128线程,每一个线程在一个ALU上计算,线程较少,一些ALU会空闲。(这里建议看一下OPenCL后端怎么进行矩阵乘的)

Op_chain

Op

我们已经理解了算子切分,算子切分会带来一些开销,其中包括CPU和GPU的数据转化,数据的映射的开销。如果一个算子进行一次划分,那么数据映射带来的开销势必会非常大,因此将多个算子链接起来形成Op_chain,只在链头和链尾进行数据共享,如下图所示:

H维度的推理时延更快,但是需要进行填充,因此在过程中,chain越长,特征图越大,冗余计算也就越多。

随着链长的增加,由于填充带来的计算开销会覆盖掉链状结构带来的增益,因此链的长度抉择十分重要,在这里作者测试了最大链长度为8。

Op_chain搜索策略

上述算法在不断连接新的算子,直到不再获得收益。ParPlan是模型的算子集合(按照推理顺序排列),ParPlan[i]包括( , , , , , ), , ,其中( , , , , , ) 就是论文中的ophead,分别表示算子链的头,以及头的划分维度和划分比例。

对于每一条链的头,将当前的链收益Tgain和最大收益TmaxGain初始化为0,将划分比例[ρhead-δ, ρhead+δ] 内的大收益记录在TmaxGain 。对每一个划分比例ρ 进行以下操作:

初始化chaincur为头算子,划分维度和划分比例,Tchain初始化为头的预测时间。Tnochain为不添加该算子进入链,当前链与当前算子的时间相加,而Tchain则为将算子入链之后的链推理时长。TgainTchain-Tnochain ,即将算子添加到当前链的收益,收益大于Tmaxgain就更新。

当上述过程结束后,从链尾后的第一个op开始初始化为新的ophead

CoDL架构

CoDL分为两个阶段,离线估计阶段和在线阶段:

离线阶段,CoDL设计了一个轻量级但有效的延迟预测器来指导在线阶段的操作员分区。预测器既可以实现轻量级又有效,因为 1) 它考虑了所有数据共享开销,包括数据转换、映射和同步; 2)它解析地制定了平台特征引起的非线性延迟响应,只需要为每个内核实现学习一个极其轻量级的线性回归模型来学习基本执行单元的延迟。

在线阶段由两个模块组成,即算子分区器和算子协同执行器。算子分区器的作用是为输入 DL 模型找到最佳算子分区计划,它采用混合维度划分和算子链两种技术来完成这一作用。分区器首先找到最佳分区维度(高度或输出通道)和比率(例如 0.1、0.2) ,对于每个算子作为基础计划,通过混合维度分区技术。分区器的最终分区计划是找到的链的集合,每个链运算符和链设置,即分区比率和维度。使用计划,为 GPU 和 CPU 预先安排模型权重,以避免对每个推理调用进行重新转换。

延迟预测器

在前面的介绍已经知道算子切分的开销包括:映射,前同步,推理,后同步,解映射,论文提出,相取消映射和后同步的开销是微不足道的(~ 50s)。因此,运算符协同执行的总预测延迟is如下图,其中,,-分别表示数据转换,映射,预同步和计算的延迟。

图14(a)所示,与数据大小有明显的线性关系,使用以数据大小为特征的线性回归来学习预测器中的延迟。对于预同步开销-,根据我们的测量,没有明显的模式,-主要依赖于厂商的驱动实现。因此,我们在预测器中使用测量的上界(1)作为-

CPU和GPU的时延预测

GEMM(General Matrix Multiplication,通用矩阵乘法)和Winograd算法都是用于加速卷积神经网络(CNN)中卷积操作的计算方法。

GEMM是一种基础线性代数运算,输入数据通常会通过im2col或类似的变换被重新排列成矩阵形式,然后与滤波器权重矩阵相乘,通过使用高度优化的BLAS库(如Intel MKL、cuBLAS等)。

Winograd算法则是一种专门针对小尺寸卷积核设计的快速卷积算法。它减少了标准直接卷积所需的乘法次数,以更多的加法代替部分乘法,从而降低了整体计算复杂度,对于常见的3x3卷积核大小,Winograd可以在某些情况下提供显著的速度提升,该算法特别适合于硬件资源有限的环境,例如移动设备或嵌入式系统,在这些环境中,减少乘法操作可以带来明显的性能改进和功耗降低。

在实践中,一些深度学习库(如cuDNN)可能会根据具体情况选择最合适的算法组合来达到最佳性能。例如,在处理小型卷积核时,可能会优先考虑使用Winograd算法;而对于其他情况,则可能回退到基于GEMM的标准卷积实现。

MobiSys'2022 CoDL论文详解的更多相关文章

  1. Attention is all you need 论文详解(转)

    一.背景 自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基于R ...

  2. R-CNN论文详解(转载)

    这几天在看<Rich feature hierarchies for accurate object detection and semantic segmentation >,觉得作者的 ...

  3. The Google File System——论文详解(转)

    “Google文件存储系统(GFS)是构建在廉价服务器之上的大型分布式系统.它将服务器故障视为正常现象,通过软件方式自动容错,在保证系统可用性和可靠性同时,大大降低系统成本. GFS是Google整个 ...

  4. Faster R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks ...

  5. Fast R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Fast R-CNN &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max ...

  6. R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Rich feature hierarchies for accurate object detection and semantic segmentatio ...

  7. 图像处理论文详解 | Deformable Convolutional Networks | CVPR | 2017

    文章转自同一作者的微信公众号:[机器学习炼丹术] 论文名称:"Deformable Convolutional Networks" 论文链接:https://arxiv.org/a ...

  8. 《The Tail At Scale》论文详解

    简介 用户体验与软件的流畅程度是呈正相关的,所以对于软件服务提供方来说,保持服务耗时在用户能接受的范围内就是一件必要的事情.但是在大型分布式系统上保持一个稳定的耗时又是一个很大的挑战,这篇文章解析的是 ...

  9. 轻量化卷积神经网络MobileNet论文详解(V1&V2)

    本文是 Google 团队在 MobileNet 基础上提出的 MobileNetV2,其同样是一个轻量化卷积神经网络.目标主要是在提升现有算法的精度的同时也提升速度,以便加速深度网络在移动端的应用.

  10. 第三十一节,目标检测算法之 Faster R-CNN算法详解

    Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...

随机推荐

  1. 【SpringCloud】zuul路由网关

    zuul路由网关 概述描述 路由基本配置 路由访问映射规则 查看路由信息 过滤器 太老旧了,就不做了解了

  2. 【Java】Java实现简单异或加密

    Java实现简单异或加密 零.需求 在做一个简单的Web项目,需要把账号密码以Cookie的形式存储到浏览器中记住,不能直接明文,故需要一种简单的加密方式,想到了异或加密. 壹.实现 /** * 异或 ...

  3. leetcode每日一题:对角线上不同值的数量差

    题目 2711. 对角线上不同值的数量差 给你一个下标从 0 开始.大小为 m x n 的二维矩阵 grid ,请你求解大小同样为 m x n 的答案矩阵 answer . 矩阵 answer 中每个 ...

  4. Linux基本开发环境配置git,c++,nodejs,nginx

    Linux基本开发环境配置 前一篇文章配置了基本的SSH,本文来讲讲关于基本的开发环境的配置,包括git,c,c++,nodejs,nginx. 安装git和配置无密码登录github yum ins ...

  5. 【开源推荐】AI Interviewer:基于Spring-Alibaba-AI的智能面试官系统(附GitHub实战教程)

    项目背景 作为开发者,你是否经历过: 技术面试时因紧张发挥失常? 刷了1000+LeetCode却不会表达解题思路? 花费上千元购买模拟面试服务? 今天推荐的AI Interviewer开源项目,正是 ...

  6. nginx中的路径匹配规则详解(location规则)

    Nginx的路径匹配规则 Nginx的匹配规则用location指令来实现,Nginx 的location指令用于匹配请求的 URI(请求路径),并根据匹配结果执行特定的处理指令.location是实 ...

  7. SVN统计时间段内代码修改行数

    1.本地安装svn客户端(方法自行百度) 注:安装时记得勾选命令行工具 若原安装未勾选,可再次启动安装文件: 选中Next即可: 环境变量记得配置svn路径(bin)(方法自行百度) cmd运行命令 ...

  8. 一天 Star 破万的开源项目「GitHub 热点速览」

    虽然现在市面上的 AI 编程助手已经"琳琅满目",但顶流就是顶流!OpenAI 新开源的轻量级编程助手 Codex,发布不到 24 小时 Star 数就轻松破万!姗姗来迟的 Ope ...

  9. 9.9K star!大模型原生即时通信机器人平台,这个开源项目让AI对话更智能!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "高稳定.支持插件.多模态 - 大模型原生即时通信机器人平台" 项目亮点 ...

  10. 鸿蒙原生开源库 ViewPool 在 OpenHarmony 社区正式上线

    近日,由伙伴参与共建的鸿蒙原生开源库"ViewPool"在OpenHarmony社区正式上线.这个开发库是基于OpenHarmony技术孵化的成果,充分发挥了平台的技术特性,同时融 ...