0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Batch大小不一定是2的n次幂?

电子工程师 来源:量子位 作者:量子位 2022-08-08 16:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Batch大小不一定是2的n次幂?

是否选择2的n次幂在运行速度上竟然也相差无几?

有没有感觉常识被颠覆?

这是威斯康星大学麦迪逊分校助理教授Sebastian Raschka(以下简称R教授)的最新结论。

5bc08726-16c2-11ed-ba43-dac502259ad0.png

神经网络训练中,2的n次幂作为Batch大小已经成为一个标准惯例,即64、128、256、512、1024等。

一直有种说法,是这样有助于提高训练效率。

但R教授做了一番研究之后,发现并非如此。

在介绍他的试验方法之前,首先来回顾一下这个惯例究竟是怎么来的?

2的n次幂从何而来?

一个可能的答案是:因为CPUGPU的内存架构都是由2的n次幂构成的。

或者更准确地说,根据内存对齐规则,cpu在读取内存时是一块一块进行读取的,块的大小可以是2,4,8,16(总之是2的倍数)。

5bdb5d76-16c2-11ed-ba43-dac502259ad0.png

因此,选取2的n次幂作为batch大小,主要是为了将一个或多个批次整齐地安装在一个页面上,以帮助GPU并行处理。

其次,矩阵乘法和GPU计算效率之间也存在一定的联系。

5bf09aa6-16c2-11ed-ba43-dac502259ad0.jpg

假设我们在矩阵之间有以下矩阵乘法A和B:

5c011c32-16c2-11ed-ba43-dac502259ad0.jpg

当A的行数等于B的列数的时候,两个矩阵才能相乘。

其实就是矩阵A的第一行每个元素分别与B的第一列相乘再求和,得到C矩阵的第一个数,然后A矩阵的第一行再与B矩阵的第二列相乘,得到第二个数,然后是A矩阵的第二行与B矩阵的第一列……

5c10effe-16c2-11ed-ba43-dac502259ad0.jpg

因此,如上图所示,我们拥有2×M×N×K个每秒浮点运算次数(FLOPS)。

现在,如果我们使用带有Tensor Cores的GPU,例如V100时,当矩阵尺寸(M,N以及K)与16字节的倍数对齐,在FP16混合精度训练中,8的倍数的运算效率最为理想。

因此,假设在理论上,batch大小为8倍数时,对于具有Tensor Cores和FP16混合精度训练的GPU最有效,那么让我们调查一下这一说法在实践中是否也成立。

不用2的n次幂也不影响速度

为了了解不同的batch数值对训练速度的影响,R教授在CIFAR-10上运行了一个简单的基准测试训练——MobileNetV3(大)——图像的大小为224×224,以便达到适当的GPU利用率。

R教授用16位自动混合精度训练在V100卡上运行训练,该训练能更高效地使用GPU的Tensor Cores。

如果你想自己运行,该代码可在此GitHub存储库中找到(链接附在文末)。

该测试共分为以下三部分:

小批量训练

5c2292c2-16c2-11ed-ba43-dac502259ad0.png

从上图可以看出,以样本数量128为参考点,将样本数量减少1(127)或增加1(129),的确会导致训练速度略慢,但这种差异几乎可以忽略不计。

而将样本数量减少28(100)会导致训练速度明显放缓,这可能是因为模型现在需要处理的批次比以前更多(50,000/100=500与50,000/128= 390)。

同样的原理,当我们将样本数量增加28(156)时,运行速度明显变快了。

最大批量训练

鉴于MobileNetV3架构和输入映像大小,上一轮中样本数量相对较小,因此GPU利用率约为70%。

为了调查GPU满载时的训练速度,本轮把样本数量增加到512,使GPU的计算利用率接近100%。

5c3b8002-16c2-11ed-ba43-dac502259ad0.png

△由于GPU内存限制,无法使用大于515的样本数量

可以看出,跟上一轮结果一样,不管样本数量是否是2的n次幂,训练速度的差异几乎可以忽略不计。

多GPU训练

基于前两轮测试评估的都是单个GPU的训练性能,而如今多个GPU上的深度神经网络训练更常见。为此,这轮进行的是多GPU培训。

5c492c66-16c2-11ed-ba43-dac502259ad0.png

正如我们看到的,2的n次幂(256)的运行速度并不比255差太多。

测试注意事项

在上述3个基准测试中,需要特别声明的是:

所有基准测试的每个设置都只运行过一次,理想情况下当然是重复运行次数越多越好,最好还能生成平均和标准偏差,但这并不会影响到上述结论。

此外,虽然R教授是在同一台机器上运行的所有基准测试,但两次运营之间没有特意相隔很长时间,因此,这可能意味着前后两次运行之间的GPU基本温度可能不同,并可能稍微影响到运算时间。

结论

可以看出,选择2的n次幂或8的倍数作为batch大小在实践中不会产生明显差异。

然而,由于在实际使用中已成为约定俗成,选择2的n次幂作为batch大小,的确可以帮助运算更简单并且易于管理。

此外,如果你有兴趣发表学术研究论文,选择2的n次幂将使你的论文看上去不那么主观。

尽管如此,R教授仍然认为,batch的最佳大小在很大程度上取决于神经网络架构和损失函数。

例如,在最近使用相同ResNet架构的研究项目中,他发现batch的最佳大小可以在16到256之间,具体取决于损失函数。

因此,R教授建议始终把调整batch大小,作为超参数优化的一部分。

但是,如果你由于内存限制而无法使用512作为batch大小,那么则不必降到256,首先考虑500即可。

作者Sebastian Raschka

Sebastian Raschka,是一名机器学习AI 研究员。

他在UW-Madison(威斯康星大学麦迪逊分校)担任统计学助理教授,专注于深度学习和机器学习研究,同时也是Lightning AI的首席 AI 教育家。

另外他还写过一系列用Python和Scikit-learn做机器学习的教材。

5c7af340-16c2-11ed-ba43-dac502259ad0.png

基准测试代码链接:
https://github.com/rasbt/b3-basic-batchsize-benchmark
参考链接:
https://sebastianraschka.com/blog/2022/batch-size-2.html

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 矩阵
    +关注

    关注

    1

    文章

    450

    浏览量

    36247
  • 机器学习
    +关注

    关注

    67

    文章

    8562

    浏览量

    137209

原文标题:Batch大小不一定是2的n次幂!ML资深学者最新结论

文章出处:【微信号:CVer,微信公众号:CVer】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    你的路由器信号变弱可能只是因为SMA接口出现了氧化层

    信号变差不一定是固件或覆盖问题,很可能是被忽视的物理细节——SMA接口氧化。本文由德索连接器(Dosin)技术专家撰写,深入剖析趋肤效应对高频传输的影响,揭示阻抗失配导致信号损耗的底层逻辑。
    的头像 发表于 04-22 14:06 48次阅读
    你的路由器信号变弱可能只是因为SMA接口出现了氧化层

    Onsemi N沟道MOSFET FQU2N100和FQD2N100的特性与应用

    Onsemi N沟道MOSFET FQU2N100和FQD2N100的特性与应用 在电子设计领域,MOSFET(金属 - 氧化物 - 半导体场效应晶体管)作为关键的功率器件,广泛应用于各种电源
    的头像 发表于 03-30 11:20 254次阅读

    面向视觉语言导航的任务驱动式地图学习框架MapDream介绍

    在视觉语言导航(VLN)中,地图长期作为独立模块构建,并通过固定接口交由导航策略使用。无论是BEV网格、拓扑图还是语义记忆模块,这些表示大多脱离策略学习而设计。结果是,机器人即使掌握场景的信息,也仍可能绕行甚至偏离目标,因为地图中编码的,并不一定是决定导航成功的关键信息。
    的头像 发表于 03-02 10:40 597次阅读
    面向视觉语言导航的任务驱动式地图学习框架MapDream介绍

    EPLAN分散式端子的画法和作用

    Eplan的分散式端子是指个端子被画了N,但是还是同个端子;Eplan的机制是个端子画一次
    的头像 发表于 01-21 15:50 970次阅读
    EPLAN分散式端子的画法和作用

    通过2进行除法和取余数快捷方法优化

    如果除法中的除数是2,我们可以更好的优化除法。 编译器使用移位操作来执行除法。因此,我们需要尽可能的设置除数为2
    发表于 12-12 06:02

    不一样的展会,不一样的精彩 2025湾芯展圆满收官

    ”。本届展会人气火爆,展期三天累计接待总量达到11.23万人。参展企业集中发布年度新品数约2500件,新品发布与商业合作收获颇丰。 不一样的全“芯”布局 聚焦核心+特色双轨赛道,产业全链展尽览 2025湾芯展以“芯启未来 智
    的头像 发表于 10-29 16:56 1492次阅读
    <b class='flag-5'>不一</b>样的展会,<b class='flag-5'>不一</b>样的精彩 2025湾芯展圆满收官

    RSA加速实现思路

    N;其中(E , N)组成公钥。 解密过程为:M = CDmodN;其中(D , N)组成私钥。 2 关于加速操作 上述提到N
    发表于 10-28 07:28

    不一样的展会,不一样的精彩:2025湾芯展顺利收官

    内,打造场"不一样的展会",呈现出"不一样的精彩"。本届展会人气火爆,展期三天累计接待总量达到11.23万人。参展企业集中发布年度新品数约2500件,新品发布与商业合作收获颇丰。
    的头像 发表于 10-19 20:27 896次阅读
    <b class='flag-5'>不一</b>样的展会,<b class='flag-5'>不一</b>样的精彩:2025湾芯展顺利收官

    串口DMA接收方式打开,为什么在开启IDLE中断的情况下还需要开启DMA中断呢?

    户接口rx_indicate来读取数据,此时,串口收到的数据并不一定是完整的帧,破坏了使用IDLE中断的意义。所以,为什么要开启DMA中断呢? 此处,可以看到不论是IDLE中断还是DMA传输中断,都会导致用户回调的调用。
    发表于 09-29 08:30

    如何秒级实现接口间“等”补偿:款轻量级仿等数据校正处理辅助工具

    导语 本文分析了在网络超时场景下,RPC服务调用数据致性的问题,对于接口无等、接口等失效情况下,对异常数据快速处理做了分析思考和尝试,开发了款轻量级仿
    的头像 发表于 09-15 16:55 1007次阅读
    如何秒级实现接口间“<b class='flag-5'>幂</b>等”补偿:<b class='flag-5'>一</b>款轻量级仿<b class='flag-5'>幂</b>等数据校正处理辅助工具

    等等党不一定会赢,但小鹏G7一定会!

    行业资讯
    脑极体
    发布于 :2025年07月15日 15:50:41

    可靠性技术系列教材之PCB EMC设计技术

    的通路等差模电流会转换成共模电流。 三、共模电流 大小不一定相等方向相位相同。 设备对外的干扰多以共模为主差模干扰也存在但是共模干扰强度常常比差模强度的大几个数量级。 外来的干扰也多以共模
    发表于 07-01 16:12

    Denebola RDK上配置的帧大小与实际帧大小不一致是怎么回事?

    字节,与预期值不一致。 eCamViewer 上的显示问题: 使用Wireshark检查数据传输,数据包已成功传输到主机。 但是,视频没有在eCamViewer上显示,我怀疑帧和数据包大小差异(在第 1 点和第 2 点中提到)
    发表于 05-19 08:09

    求助,CY3014中CyU3PDmaChannelSetWrapUp函数的使用以及其他问题求解

    我在主任务中的FOR循环中实现了个功能: UART不定时的接收大小不一的数据,然后再通过UART传出。 其中附件是我的代码. 遇到的问题: 刚开始接收与发送是正常的,我发送的数据以及数据大小,再
    发表于 05-15 08:09

    cyusb3014 slave fifo模式In和Out缓存大小不一样时,显示错误怎么解决?

    cyusb3014 slave fifo 模式 In 和 Out 缓存大小设置不一样时(比如:U2P DMA缓存16K,P2U DMA缓存1K),可以测出来实际就是设置值,但在USB
    发表于 05-13 06:55