百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

揭示GPU上的批处理策略

ztj100 2025-04-24 10:43 40 浏览 0 评论


本文深入探讨了批处理在现代GPU上的工作原理,以及它是如何影响深度学习模型的推理速度,基于此,作者为模型优化提供了实用指导。通过优化批处理策略,研究人员和工程师可以更有效地利用计算资源,提高模型的推理效率。

(本文作者为机器学习研究员Finbarr Timbers,他曾是DeepMind的工程师。本文由OneFlow编译发布,转载请联系授权。原文:
https://www.artfintel.com/p/how-does-batching-work-on-modern)


作者 | FINBARR TIMBERS

OneFlow编译

翻译|杨婷


对于任何现代深度学习系统而言,执行批处理是最重要的一项优化。批处理是指,在推理过程中不是发送单个输入,而是发送一个大小为N的输入批次。通常情况下,根据批次大小N的具体值,这项优化可以视为“免费”,因为整个批次的处理时间与处理单个示例的时间几乎相同。为何会这样?按理来讲,批处理不应该免费,毕竟要多做N倍的工作。


对于简单的神经网络模型来说,这并不是免费的,批处理计算确实需要N倍的计算资源来运行。如但果在CPU上运行这种批处理,你会发现这一点确实存在(在Colab上ResNet50的平均推理时间)。

然而,当你在现代GPU上运行相同的示例时,情况就有所不同了。以下是我们观察到的现象(T4):

将批量大小从1增加到2、再增加到3都不需要额外的时间,之后才会线性增加。


为什么会这样呢?这是由于并发性。现代GPU可以并发地运行这些操作。(实际上,在每个线程的基础上,GPU的速度比CPU慢)。


在计算模型推理时,我们通常会将模型视为单个块(block),但实际上模型由许多矩阵组成。当我们运行推理时,每个矩阵都被加载到内存中。具体来说,每个矩阵的块被加载到设备内存中,即共享内存单元(在A100上只有192KB)。然后,该块用于计算批次中每个元素的结果。需要注意的是,这与GPU RAM(即HBM)不同,A100具有40GB或80GB的HBM,但只有192KB的设备内存。因为我们不断地在设备内存中搬运数据,所以这在执行数学运算时会导致一个内存带宽瓶颈。我们可以通过计算模型大小/内存带宽比来近似传输权重所需的时间,并通过模型FLOPS/GPU FLOPS来近似计算所需的时间。


使用多层感知器(MLP)时,FLOPS(每秒浮点运算次数)约为参数数量的两倍乘以批次中元素的数量(对于批次大小为b和一个m x n矩阵,FLOPS为2 * m * n * b,https://www.stat.cmu.edu/~ryantibs/convexopt-F18/scribes/Lecture_19.pdf)。因此,当

时,传输时间等于计算时间。


注意,我们可以在这里消除参数的数量:

然后,以批次大小为单位重新组织:

当批大小小于FLOPS与内存带宽之比时,我们会受到内存带宽的限制。当批大小大于该比值时,我们会受到FLOPS的限制。需要注意的是,这种分析是针对MLP而不是卷积网络(例如ResNet50)。对于卷积网络来说,情况会变得更加复杂。


在T4 GPU(
https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/tesla-t4/t4-tensor-core-datasheet-951643.pdf
)上,我们有65 TFLOPS的fp32性能和300 GB/s的内存带宽,因此魔数比(magic ratio )应该是216。当运行一个MLP(深度:8,宽度:1024)时,我们大致看到了预期结果:

虽然结果里有些噪声,但基本符合我们的预期:推理时间在批大小约为128左右开始显著增加(批次大小每次翻一倍,可以看到批次分别为128、256和512)。如果改变MLP层的宽度,我们会发现这个现象在各种架构中都成立。以下是一个对数-对数图,以便将所有数据都纳入其中。

这真的很酷!可以看到,各种不同架构都存在临界阈值。此外,同样有趣的是,较小的网络在整个批大小范围(从1到512)中几乎没有看到任何扩展,花费的时间大致保持不变。我认为,其原因在于:GPU在执行数学计算方面非常快速,但其他方面(例如CPU等)相对较慢。而对于开始阶段的噪声,我还不能给出一个很好的解释,只能简单地将其归因为“计算开销”。


对于很多机器学习工程师而言,他们实际上并没有在机器学习上花太多时间,而是在解决计算开销问题,这些计算开销通常出现在非机器学习代码中。在强化学习研究中,特别是对于研究持续学习问题的研究人员来说,当存在一个单一智能体连续进行大量的动作时,通常不值得使用GPU进行实验,除非满足以下条件之一:1)有非常大的神经网;2)对堆栈的其他方面进行了广泛优化(如果你想让一位资深的DeepMind工程师感到不安,可以问他们关于内置计算图环境的事情——我们曾在TensorFlow计算图内实现强化学习环境)。


那么CNN网络呢?


在卷积网络中,权重等于滤波器数量乘以滤波器大小。对于torch.nn.Conv2d,这相当于kernel_size^2 * out_channels。因此,如果我们有一个(224,224)的图像,步长为1,卷积核大小为3,那么我们会将同一个滤波器应用于图像224次。这意味着,基本上对于卷积层来说,批处理带来的优势要少得多,因为我们多次重复使用相同的权重。对于池化层(pooling layer),计算量基本上是与像素数量成正比,正如你所期望的那样。


那么Transformer呢?


Transformers模型本质上就是多层感知器(MLPs),因此我们可以将它们视为同类。它们具有自注意力机制,但是通过使用键值(KV)缓存(将计算的数据保存在内存中),自注意力所需的时间可以很少。我之前也多次写过有关这方面的内容。


对于混合专家(Mixture of Experts)模型也是如此。在许多Transformer的实现中,键值(KV)缓存位于注意力类的内部(MaxText是一个很好的例子)。由于MoE模型与普通解码器的唯一区别在于一些前馈层被替换为MoE层,因此KV缓存的表现是相同的,推理过程也将如此,但有一个小差异。


MoE层中的门控机制会将批次分配给不同的专家。因此,如果门控机制不能均匀地将批次分配到各个专家中,这可能会导致出现问题。不同的路由机制可以避免这个问题(例如,expert’s choice),但在自回归解码器中,你基本上只能使用token’s choice,这可能会导致门控机制有一些倾向。强制门控机制均匀分配词元是一个活跃的研究领域,并且是训练过程中优化的一个重要目标。


【语言大模型推理最高加速11倍】SiliconLLM是由硅基流动开发的高效、易用、可扩展的LLM推理加速引擎,旨在为用户提供开箱即用的推理加速能力,显著降低大模型部署成本,加速生成式AI产品落地。(技术合作、交流请添加微信:SiliconFlow01)


SiliconLLM的吞吐最高提升近4倍,时延最高降低近4


数据中心+PCIe:SiliconLLM的吞吐最高提升近5倍;消费卡场景:SiliconLLM的吞吐最高提升近3


System Prompt场景:SiliconLLM的吞吐最高提升11倍;MoE模型:推理 SiliconLLM的吞吐最高提升近10

相关推荐

30天学会Python编程:16. Python常用标准库使用教程

16.1collections模块16.1.1高级数据结构16.1.2示例...

强烈推荐!Python 这个宝藏库 re 正则匹配

Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。...

Python爬虫中正则表达式的用法,只讲如何应用,不讲原理

Python爬虫:正则的用法(非原理)。大家好,这节课给大家讲正则的实际用法,不讲原理,通俗易懂的讲如何用正则抓取内容。·导入re库,这里是需要从html这段字符串中提取出中间的那几个文字。实例一个对...

Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)

实现功能:Python数据分析实战-利用正则表达式提取文本中的URL网址和邮箱...

python爬虫教程之爬取当当网 Top 500 本五星好评书籍

我们使用requests和re来写一个爬虫作为一个爱看书的你(说的跟真的似的)怎么能发现好书呢?所以我们爬取当当网的前500本好五星评书籍怎么样?ok接下来就是学习python的正确姿...

深入理解re模块:Python中的正则表达式神器解析

在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...

如何使用正则表达式和 Python 匹配不以模式开头的字符串

需要在Python中使用正则表达式来匹配不以给定模式开头的字符串吗?如果是这样,你可以使用下面的语法来查找所有的字符串,除了那些不以https开始的字符串。r"^(?!https).*&...

先Mark后用!8分钟读懂 Python 性能优化

从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...

Python“三步”即可爬取,毋庸置疑

声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块importreimportrequests#第二步获取你想爬取的网页地址,发送请求,获取网页内...

简单学Python——re库(正则表达式)2(split、findall、和sub)

1、split():分割字符串,返回列表语法:re.split('分隔符','目标字符串')例如:importrere.split(',','...

Lavazza拉瓦萨再度牵手上海大师赛

阅读此文前,麻烦您点击一下“关注”,方便您进行讨论和分享。Lavazza拉瓦萨再度牵手上海大师赛标题:2024上海大师赛:网球与咖啡的浪漫邂逅在2024年的上海劳力士大师赛上,拉瓦萨咖啡再次成为官...

ArkUI-X构建Android平台AAR及使用

本教程主要讲述如何利用ArkUI-XSDK完成AndroidAAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括:1.跨平台Library工程开发介绍...

Deepseek写歌详细教程(怎样用deepseek写歌功能)

以下为结合DeepSeek及相关工具实现AI写歌的详细教程,涵盖作词、作曲、演唱全流程:一、核心流程三步法1.AI生成歌词-打开DeepSeek(网页/APP/API),使用结构化提示词生成歌词:...

“AI说唱解说影视”走红,“零基础入行”靠谱吗?本报记者实测

“手里翻找冻鱼,精心的布局;老漠却不言语,脸上带笑意……”《狂飙》剧情被写成歌词,再配上“科目三”背景音乐的演唱,这段1分钟30秒的视频受到了无数网友的点赞。最近一段时间随着AI技术的发展,说唱解说影...

AI音乐制作神器揭秘!3款工具让你秒变高手

在音乐创作的领域里,每个人都有一颗想要成为大师的心。但是面对复杂的乐理知识和繁复的制作过程,许多人的热情被一点点消磨。...

取消回复欢迎 发表评论: