当前位置: 首页 > news >正文

网站建设新闻如何更新国内公关公司排名

网站建设新闻如何更新,国内公关公司排名,做网站一台电脑可以吗,响应式设计 手机网站编者按#xff1a;近年来#xff0c;深度学习应用日益广泛#xff0c;其需求也在快速增长。那么#xff0c;我们该如何选择合适的 GPU 来获得最优的训练和推理性能呢#xff1f; 今天#xff0c;我们为大家带来的这篇文章#xff0c;作者的核心观点是#xff1a;Tensor… 编者按近年来深度学习应用日益广泛其需求也在快速增长。那么我们该如何选择合适的 GPU 来获得最优的训练和推理性能呢 今天我们为大家带来的这篇文章作者的核心观点是Tensor Core、内存带宽和内存层次结构是影响 GPU 深度学习性能的几个最关键因素。 作者详细解析了矩阵乘法运算在深度学习中的重要性以及 Tensor Core 如何通过特有的矩阵乘法计算单元极大地提升计算性能。同时作者还分析了内存带宽对性能的制约作用比较了不同 GPU 架构在内存层次结构方面的差异。 通过这篇文章我们可以清晰地了解 GPU 中与深度学习性能密切相关的硬件指标这有助于我们在选择和使用 GPU 时做出更明智的决策。最后期待 GPU 在这些关键性能指标的进一步优化和突破。 作者 |Tim Dettmers 编译 | 岳扬 本文经原作者授权由Baihai IDP编译。如需转载译文请联系获取授权。 原文链接 https://timdettmers.com/2023/01/30/which-gpu-for-deep-learning/ 欢迎小伙伴们加入AI技术软件及技术交流群追踪前沿热点共探技术难题~ 这篇文章可以帮助我们了解 GPU 对深度学习性能的多个影响因素从而帮助我们评估、选用 GPU。本文将按照 GPU 各组件的重要程度顺序来进行介绍。Tensor Core张量计算核心是最重要的因素其次是 GPU 的内存带宽和缓存层次结构最后是 GPU 的 FLOPS。 目录 01 Tensor Core张量计算核心 1.1 在没有张量计算核心的情况下进行矩阵乘法运算 1.2 使用张量计算核心进行矩阵乘法运算 1.3 使用张量计算核心和异步拷贝RTX 30/RTX 40以及TMAH100进行矩阵乘法运算 02 内存带宽 03 二级缓存/共享内存/一级缓存/寄存器 01 Tensor Core张量计算核心 Tensor Core张量计算核心是一种能执行高效矩阵乘法运算的微小核心。由于矩阵乘法是任何深度神经网络中最耗费计算资源的部分因此Tensor Core张量计算核心非常有用。它的功能非常强大强大到我不推荐使用任何没有Tensor Core张量计算核心的 GPU。 了解它们的工作原理有助于理解这些特有的矩阵乘法计算单元computational units的重要性。下面以一个简单的 A*BC 矩阵乘法为例其中所有矩阵的大小都是 32×32展示了有张量计算核心和没有张量计算核心的计算模式。这只是一个简化后的例子并不是高性能矩阵乘法核心的精确编写方式但它包含了所有基本要素。CUDA 程序员会将此作为第一份 “草稿”然后利用双缓冲double buffering、寄存器优化register optimization、占用优化occupancy optimization、指令级并行instruction-level parallelism等概念逐步优化在此就不展开讨论了。 要完全理解这个例子你必须理解周期cycles的概念。如果处理器的运行频率为 1GHz那么它每秒可以执行 10^9 个周期。 每个周期都代表一次计算机会。然而大多数情况下运算时间都超过一个周期。因此实际上有一个队列下一个操作需要等待上一个操作完成。这也被称为运算的延迟the latency of the operation。 以下是一些重要的运算延迟周期时间latency cycle timings。数值会随着 GPU 代次的不同而变化。 下面这些数值来自 Ampere 架构的 GPU[1]其缓存速度相对较慢。 访问全局内存高达80GB约380个周期二级缓存L2 cache约200个周期一级缓存或访问共享内存每个流式多处理器最多128KB约34个周期乘法和加法在指令集层面的结合fused multiplication and additionFFMA4个周期Tensor Core张量计算核心矩阵乘法运算1个周期 每次进行运算总是由一组线程32个执行这组线程被称为线程束warp。线程束通常以同步模式c pattern运行线程束内的线程必须等待彼此。GPU上的所有内存操作都针对线程束进行了优化。例如从全局内存中加载的粒度是32*4字节恰好是32个浮点数每个线程束中的每个线程恰好一个浮点数。在一个流式多处理器SM中可以有最多32个线程束即1024个线程这相当于CPU核心的GPU等效部分。流式多处理器SM的资源被分配给所有活跃的线程束。这意味着有时我们希望运行较少的线程束以便每个线程束拥有更多的寄存器/共享内存/张量计算核心资源。 在下面的两个示例中我们假设拥有相同的计算资源。在这个 32×32 矩阵乘法的小例子中我们使用了8个流式多处理器SM大约是RTX 3090的10%和每个SM中的8个线程束。 为了理解周期延迟cycle latencies如何与每个SM的线程和共享内存等资源相互作用现在来看一些矩阵乘法的示例。虽然下面这些示例大致遵循了有和没有张量计算核心的矩阵乘法的计算步骤顺序但请注意这些都是非常简化的示例。实际的矩阵乘法运算涉及更大的共享内存块计算模式也略有不同。 1.1 在没有张量计算核心的情况下进行矩阵乘法运算 以一个简单的 A*BC 矩阵乘法为例其中每个矩阵的大小都是 32×32我们会将反复访问的数据加载到共享内存shared memory中这样做的主要原因是共享内存的延迟约为全局内存的六分之一200 个周期 vs 34 个周期。译者注为了加快访问速度我们可以将这些经常访问的数据加载到共享内存中。共享内存是位于GPU的每个SM流式多处理器上的一块较小的高速缓存其延迟较低。共享内存中的内存块通常被直接称为 memory tile 或简称为 tile。通过使用2个线程束每个线程束有32个线程可以并行地将两个32×32的浮点数加载到共享内存 tile 中。如果有8个 SM每个 SM 有8个线程束通过并行化parallelization技术我们只需要从全局内存一次顺序加载到共享内存中整个过程只需200个周期。 为了进行矩阵乘法运算我们现在需要从共享内存A和共享内存B中加载两个包含 32 个数字的向量并执行乘法和加法在指令集层面的结合fused multiplication and additionFFMA然后将输出存储在寄存器C中。我们将这项工作分割成多部分使每个 SM 进行8次点积运算32×32来计算出 C 的8个输出。为什么是恰好8次而不是旧算法的4次这是一个非常专业的问题。建议阅读Scott Gray关于矩阵乘法运算[2]的博文来了解更多细节。这意味着要访问 8 次共享内存每次访问的需要 34 个周期以及 8 次FFMA操作并行进行32次每次操作需要 4 个周期。因此总共需要 200个周期访问全局内存 834个周期访问共享内存 84个周期FFMA操作 504个周期 现在让我们看一下使用张量计算核心进行该矩阵乘法运算需要多少个周期。 1.2 使用张量计算核心进行矩阵乘法运算 通过使用张量计算核心我们可以在一个周期内执行 4×4 的矩阵乘法。为了实现这一目标我们首先需要将内存数据传输到张量计算核心中。与前文类似我们需要从全局内存中读取数据需要200个周期然后存储到共享内存中。对于 32×32 的矩阵乘法运算我们需要进行 64 次张量计算核心运算即8×864次。每个 SM 具有 8 个张量计算核心如果有 8 个 SM就有 64 个张量计算核心这正好符合我们的需求我们可以通过一次内存传输需要34个周期将数据从共享内存传输到张量计算核心然后进行64次并行的张量计算核心操作仅需1个周期。因此在这种情况下使用张量计算核心进行矩阵乘法运算总共需要 200个周期访问全局内存 34个周期访问共享内存 1个周期使用张量计算核心 235个周期。 因此通过使用张量计算核心我们将矩阵乘法运算的时间成本从 504 个周期大大降低到了 235 个周期。在这个简化的案例中使用张量计算核心的方法减少了共享内存的访问和FFMA操作的时间成本。 这个例子是简化后的通常情况下当将数据从全局内存传输到共享内存时每个线程需要计算要读取和写入的内存位置。 有了新的HooperH100架构Tensor Memory AcceleratorTMA可以在硬件中计算这些索引从而帮助每个线程专注于更多的运算而不是索引计算。 1.3 使用张量计算核心和异步拷贝RTX 30/RTX 40以及TMAH100进行矩阵乘法运算 RTX 30 Ampere和RTX 40 Ada系列的 GPU 还支持在全局内存和共享内存之间进行异步传输。H100 Hopper GPU通过引入 Tensor Memory AcceleratorTMA单元进一步扩展了这一功能。TMA 单元同时结合了异步拷贝和索引计算因此每个线程无需再计算下一个要读取的元素而是可以专注于进行更多的矩阵乘法运算。 具体如下所示。 TMA 单元从全局内存中获取数据并传输到共享内存该过程需要耗费200个周期。数据到达后TMA单元从全局内存异步获取下一个数据块。在此过程中线程从共享内存中加载数据并通过张量计算核心执行矩阵乘法运算。线程完成后等待 TMA 单元完成下一次数据传输然后再次进行这个过程。 因此由于异步的特性当线程处理当前共享内存 tile 时TMA 单元已经开始进行第二次全局内存读取。这意味着第二次读取只需要200 - 34 - 1 165个周期。 由于我们进行了多次读取因此只有第一次内存访问的速度会比较慢其他内存访问都会与TMA单元部分重叠。因此平均减少了 35 个周期的时间。 165个周期等待异步拷贝完成 34个周期访问共享内存 1个周期使用张量计算核心 200个周期。 这又将矩阵乘法运算的速度提高了 15% 左右。 从这些例子中可以清楚地看出为什么下一个将要介绍的属性——内存带宽Memory Bandwidth对于配备有张量计算核心的GPU非常重要。由于访问全局内存global memory是目前使用张量计算核心进行矩阵乘法运算消耗时间成本最大的一种方法。如果能减少全局内存的延迟开发者甚至可以拥有更快的GPU。可以通过增加内存的时钟频率每秒更多周期但也会产生更多的热量和拥有更高的能耗增加同一时间可传输的元素数量总线宽度来实现这一目标。 02 内存带宽 从前文我们可以看出张量计算核心的运算速度非常快。它们太快了以至于大部分时间都处于空闲状态因为需要等待从全局内存中传输来的数据。例如在训练规模为GPT-3级别的大型神经网络时使用了大矩阵由于矩阵越大对张量计算核心进行运算越有利即便是这种情况下张量计算核心的利用率约为45-65这说明即使是训练大型神经网络张量计算核心也有约 50% 的时间处于闲置状态。 这一点说明在比较两个都配备有张量计算核心的GPU时需要关注的一个重要性能指标就是它们的内存带宽。 例如A100 GPU的内存带宽为1555 GB/s而V100为900 GB/s。因此A100 相对于 V100 的速度提升估计是1555/900 1.73倍。 03 二级缓存/共享内存/一级缓存/寄存器 由于将数据传输到张量计算核心的速度不高是GPU性能的重要限制因素因此需要寻找一种能够通过其他 GPU 属性解决该限制的方法以加快向张量计算核心传输数据的速度。二级缓存、共享内存、一级缓存和使用的寄存器数量都是与此相关的 GPU 属性。通过了解GPU上矩阵乘法运算的执行过程我们可以更好地理解当前内存层次结构memory hierarchy如何提高内存传输速度。译者注内存层次结构memory hierarchy是指计算机系统中不同级别的存储器组件按照速度和容量进行层次化排列的结构。该架构划分为多个层次从较大但较慢的存储器如主存到较小但更快的存储器如高速缓存以及寄存器。这种设计旨在通过将最常用的数据存储在更快的存储器级别中从而提高数据访问速度和系统性能。微观GPU内存层次结构示例如下图所示 图片由译者附。GeForce GTX780 (Kepler)内存层次结构。Mei, X., Chu, X. (2015). Dissecting GPU Memory Hierarchy Through Microbenchmarking. IEEE Transactions on Parallel and Distributed Systems, 28, 72-86. 要执行矩阵乘法运算我们需要合理利用 GPU 的内存层次结构从速度较慢的全局内存到较快的二级缓存再到快速的本地共享内存最后到速度快如闪电的寄存器。然而内存越快其内存大小就越小。 虽然从逻辑上讲二级缓存和一级缓存是相似的但二级缓存更大因此检索缓存行所需的平均物理距离也更长。我们可以将一级缓存和二级缓存比喻为仓库我们从中检索所需的物品。即使我们知道物品在哪里对于较大的仓库平均而言到达目标位置需要更长的时间。这是一级缓存和二级缓存之间的基本区别。Large slow, small fast. 对于矩阵乘法运算我们可以利用这种内存分层的方法将其分解为越来越小、速度更快的内存块使其能够执行非常快速的矩阵乘法运算。 为此我们需要将大的矩阵乘法运算划分为较小的子矩阵乘法运算。这些内存块被称为memory tiles通常简称为 tiles。 我们在本地共享内存中用这些较小的 tiles 执行矩阵乘法本地共享内存速度快且位于流式多处理器SM附近——类似于 CPU 核心。使用张量计算核心我们可以更进一步将每个 tiles 的一部分加载到由寄存器直接寻址的张量计算核心中。二级缓存中的矩阵内存 tiles 比 GPU 全局内存GPU RAM快 3 到 5 倍共享内存比 GPU 全局内存快约 7 到 10 倍而张量计算核心的寄存器比 GPU 全局内存快约 200 倍。 较大的 tiles 意味着我们可以重复使用更多的内存空间在我撰写的关于 TPU vs GPU的博客文章[3]中详细介绍了这一点。实际上你可以看到 TPU 的每个张量计算核心都有非常非常大的 tiles 。因此TPU 每次从全局内存传输数据时可以重复使用更多的内存这使得它们在矩阵乘法运算方面比 GPU 更加高效 。 每个 tiles 的大小由每个流式多处理器SM的内存和所有 SM 上的二级缓存大小决定。以下是不同架构 GPU 上的共享内存大小 VoltaTitan V128KB 共享内存/6MB 二级缓存TuringRTX 20系列96KB 共享内存/5.5MB 二级缓存AmpereRTX 30系列128KB 共享内存/6MB 二级缓存AdaRTX 40系列128KB 共享内存/72MB 二级缓存 我们可以看到Ada 架构的 GPU 具有更大的二级缓存可以容纳更大的 tiles 尺寸从而减少了对全局内存的访问 。 例如在 BERT large 的训练过程中任何矩阵乘法运算的输入和权重矩阵都可以完全适应 Ada 架构的二级缓存但其他架构不行。因此数据只需要从全局内存中加载一次然后就可以通过二级缓存获取数据这使得对于 Ada 架构矩阵乘法运算速度提高了约 1.5 到 2.0 倍。对于较大的模型在训练过程中速度的提升可能较低但存在某些 sweetspots 译者注意味着存在某些特定的模型大小、batch size或其他参数设置使得在该点或区域上的模型训练速度更快或性能更好可能使某些模型训练速度更快。对于 batch size 大于 8 的大模型推理任务具有更大的二级缓存能够提高推理效率。
http://www.pierceye.com/news/54406/

相关文章:

  • 皖icp阜阳网站建设设置网站关键词
  • 潜江公司做网站网站建设需要多少钱
  • 云南省文山州网站建设网站怎么更改后台登陆密码
  • 网站建设流程策划方案北京朝阳区属于几环
  • php网站开发都需要什么软件快递网站推广怎么做
  • 建设网站的 域名申请的分析平面设计必备软件
  • 成品网站怎么新建网页深圳网站建设托管
  • 商务网站建设理论依据wordpress seo联接插件
  • 平台类网站费用北京展览馆网站建设
  • 网站建设swot分析浦东手机网站建设
  • 嘉兴高端建站公司dede网站模板安装
  • 2018做技术分享网站有前景吗设计风格网站
  • 成都 广告公司网站建设深圳做互联网教网站公司
  • 济宁建设局网站招聘会现在建网站软件
  • 环保类网站模板如何做pdf电子书下载网站
  • 网站建站常见问题视频素材模板免费下载网
  • 网站建设规划表做网站要钱的吗
  • ai网站推荐中信建设证券有限责任公司
  • 公司做seo网站重庆seo排名外包
  • 二手网站建设情况传媒公司运营是干嘛的
  • 营销网站做的好的公司网址打不开无法显示网页怎么办
  • 网站推广网络营销方案wordpress打开3秒
  • 化妆品网站静态模板建筑模板的规格
  • 外贸网站推广计划书南宁建设厅官方网站
  • 酒店网站建设研究网站建设推广找stso88效果好
  • 长沙网站开发哪家好wordpress收费主题激活
  • 问答类网站怎么做啊模仿网站建设
  • 如何拉下对手网站嵌入式软件开发待遇
  • 可以完成交易的网站 做网站备案 现场提交
  • 有哪些摄影网站棋牌网站搭建平台