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

审核编辑 :李倩

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

    关注

    0

    文章

    423

    浏览量

    34507
  • 机器学习
    +关注

    关注

    66

    文章

    8386

    浏览量

    132479

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

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

收藏 人收藏

    评论

    相关推荐

    TLV320AIC3104在没有输入声音的时候,采集出来的信号底噪大小不一样,差异比较大是为什么?

    我们使用aic3104碰到以下问题,在没有输入声音的时候,采集出来的信号底噪大小不一样,差异比较大。 客户那边的测试情况是这样。
    发表于 10-10 06:18

    两种形式电路咪头拾音的信号大小不一样,为什么?

    如上图所示,两种形式电路,用示波器测试,相同条件下测得咪头的信号大小不一样,请问是为什么呢?下面那种情况咪头信号大。
    发表于 09-20 08:23

    请问下LM3433中Vadj是不是一定是需要大于0.3V?

    请问下LM3433中Vadj是不是一定是需要大于0.3V,如果Vadj的电压小于0.3V,比如Vadj=0.25V,那么Vsense是等于0.3/16.667还是0.25/16.667?谢谢!
    发表于 09-04 06:16

    3pinM8插座成型不良的原因

    德索工程师说道原材料的质量是影响3pinM8插座成型质量的重要因素之。首先,原材料的颗粒大小不一致、颗粒含有杂质、颗粒颜色不一致等问题,都可能导致成型品的尺寸精度、表面质量和强度不符合要求。例如,颗粒
    的头像 发表于 06-12 14:32 220次阅读
    3pinM8插座成型不良的原因

    大模型体机是在“卖盒子”吗?

    大模型不一定要捆绑硬件来凸显价值,但一定要结合硬件来充分释放价值
    的头像 发表于 05-15 09:55 1818次阅读
    大模型<b class='flag-5'>一</b>体机是在“卖盒子”吗?

    深度论证-高速走线控制100欧姆阻抗一定是最好的选择吗?

    分走线如果没有明确协议规定,那就按100欧姆来控制。很多工程师其实都不一定很清楚的知道内在的理论和原因,但是也会潜意识的控制100欧姆,可见100欧姆差分线这个观念是多么的深入人心! 但是,深入人心
    发表于 05-13 17:12

    stm8s207s8t6c这个型号有没有can接口?

    ,原来看的stm8s207s8t6c与stm8s208s8t6c区别是eeprom的大小不一样,现在eeprom大小一样,但是can不一样了?
    发表于 05-07 07:08

    锂电池和电芯有什么区别,为什么他们的大小不一

    锂电池和电芯在日常语境中经常被互换使用,但从技术角度来看,它们指代的是电池技术中的不同概念和组件。
    的头像 发表于 04-25 17:20 2556次阅读

    鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比(2)

    创建Worker的线程称为宿主线程(不一定是主线程,工作线程也支持创建Worker子线程),Worker自身的线程称为Worker子线程(或Actor线程、工作线程)。每个Worker子线程与宿主线程拥有独立的实例,包含基础设施、对象、代码段等。
    的头像 发表于 03-27 15:44 519次阅读
    鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比(<b class='flag-5'>2</b>)

    求助,给到USB OTG FS内核的时钟为什么一定是要48M呢?

    给到USB OTG FS内核的时钟为什么一定是要48M呢?
    发表于 03-22 11:26

    交换芯片缓冲区大小是什么

    交换芯片缓冲区大小不一定是固定的。缓冲区的设计和实现会根据芯片的具体型号、规格以及应用场景的不同而有所差异。些交换芯片可能具有固定大小的缓冲区,以满足特定的性能需求或成本限制。然而
    的头像 发表于 03-18 14:42 579次阅读

    电场强度相等的地方,电势梯度一定相等吗

    电场强度和电势梯度是电场性质的两个不同方面。虽然它们在某些情况下是相关的,但并不一定完全相等。 首先,我们来了解下电场强度和电势梯度的基本概念。 电场强度(E)是个矢量量,定义为单位正电荷所受
    的头像 发表于 02-26 16:07 2438次阅读

    负电荷的电场线一定是直线吗

    负电荷的电场线不一定是直线。在些特殊情况下,负电荷的电场线可能会呈现出曲线或弯曲的形态。为了详细解释这点,我将在以下几个方面进行论述。 电荷和电场 本部分将介绍电荷和电场的基本概念,以帮助读者
    的头像 发表于 02-26 15:18 761次阅读

    PCB设计EMC原则归纳

    差模电流:大小相等,方向(相位)相反。由于走线的分布电容、电感、信号走线阻抗不连续,以及信号回流路径流过了意料之外的通路等,差模电流会转换成共模电流共模电流:大小不一定相等,方向(相位)相同。
    发表于 01-05 15:27 354次阅读

    电机输出能量怎么计算?

    电机空载,当电机达到个转速n不一定是额定转速,电机输出能量怎么计算??
    发表于 12-12 06:07