首页 >>  正文

2的16次幂

来源:baiyundou.net   日期:2024-09-25

羿阁 编译整理

量子位 | 公众号 QbitAI

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

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

有没有感觉常识被颠覆?

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

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

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

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

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

2的n次幂从何而来?

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

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

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

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

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

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

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

因此,如上图所示,我们拥有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存储库中找到(链接附在文末)

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

小批量训练

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

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

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

最大批量训练

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

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

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

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

多GPU训练

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

正如我们看到的,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做机器学习的教材。

基准测试代码链接:

https://github.com/rasbt/b3-basic-batchsize-benchmark

参考链接:

https://sebastianraschka.com/blog/2022/batch-size-2.html

— 完 —

量子位 QbitAI · 头条号签约

","force_purephv":"0","gnid":"9ee4e6342f133605d","img_data":[{"flag":2,"img":[{"desc":"","height":"526","title":"","url":"https://p0.ssl.img.360kuai.com/t01362a887136daea90.jpg","width":"1080"},{"desc":"","height":"539","title":"","url":"https://p0.ssl.img.360kuai.com/t014389b2000b3fb28b.jpg","width":"1080"},{"desc":"","height":"515","title":"","url":"https://p0.ssl.img.360kuai.com/t018d8e0928ccbca494.jpg","width":"760"},{"desc":"","height":"411","title":"","url":"https://p0.ssl.img.360kuai.com/t01ea739abbcab8cae6.jpg","width":"1080"},{"desc":"","height":"418","title":"","url":"https://p0.ssl.img.360kuai.com/t01db57ce81ef0763cf.jpg","width":"1080"},{"desc":"","height":"485","title":"","url":"https://p0.ssl.img.360kuai.com/t011738bf012ab5b613.jpg","width":"1080"},{"desc":"","height":"321","title":"","url":"https://p0.ssl.img.360kuai.com/t011431cf68266321ca.jpg","width":"1080"},{"desc":"","height":"358","title":"","url":"https://p0.ssl.img.360kuai.com/t01645e8ff7ef423ece.jpg","width":"984"},{"desc":"","height":"678","title":"","url":"https://p0.ssl.img.360kuai.com/t018e9644d536f2ef7d.jpg","width":"1026"},{"desc":"","height":"1272","title":"","url":"https://p0.ssl.img.360kuai.com/t01cf6d467d295f21bb.jpg","width":"1024"}]}],"original":0,"pat":"zzc,art_src_3,fts0,sts0,op50_st","powerby":"hbase","pub_time":1659244920000,"pure":"","rawurl":"http://zm.news.so.com/d38189a92bfea151bbe0c6aaa9867ab8","redirect":0,"rptid":"e9965e2dec62365e","s":"t","src":"量子位","tag":[{"clk":"kfun_1:机器学习","k":"机器学习","u":""},{"clk":"kfun_1:gpu","k":"gpu","u":""}],"title":"Batch大小不一定是2的n次幂!ML资深学者最新结论

郝供胞3814比较2的16次方与3的12次方大小 -
裴残亭13662658441 ______[答案] 2的16次方等于4的8次方等于16的四次方等于256的平方等于65536 3的12次方等于9的6次方等于81的3次方 等于531441, 大小很明显了

郝供胞38142的15次方是多少? -
裴残亭13662658441 ______[答案] 这得从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767 最小为1111111111111111=-2的15次方减1=-32767 此时0有两种表示方法,即正0和负0:0000000000000000=1000000000000000=...

郝供胞3814那请问:假设地址线有16位,主存容量有2的16次方即是多少K,是如何换算的? -
裴残亭13662658441 ______[答案] 1K是2的10次方 2的16次方除以2的10次方等于2的6次方 也就是64K

郝供胞38142的16次方减1可以被1到10之间的哪两个数整除
裴残亭13662658441 ______ 2∧16-1=(2∧8-1)(2∧8+1)=(2∧4-1)(2∧4+1)(2∧8+1)=(2∧2-1)(2∧2+1)(2∧4+1)(2∧8+1)=3*5(2∧4+1)(2∧8+1)所以2∧16-1能被3和5整除

郝供胞38145乘2的14次幂减去6乘2的12次幂加上4分之1乘以2的15次幂减去2的16次幂. -
裴残亭13662658441 ______[答案] =2的12次方(5乘2平方-6+1/4乘2的3次方-2的4次方) =2的12次方(20-6+2-16) =的12次方乘以0 =0 嘻嘻,还可以吧

郝供胞3814若2乘以4的n次方乘以8的n次方=2的16次方,求n的值 -
裴残亭13662658441 ______[答案] 2*4^n*8^n =2^2^2n*2^3n =2^(5n+1) =2^16 5n+1=16 n=3

郝供胞3814.(2+1)(2²+1)(2的4次幂+1)(2的8次幂+1)(2的16次幂+1)+1的末尾数字. -
裴残亭13662658441 ______ (2+1)(2²+1)(2的4次幂+1)(2的8次幂+1)(2的16次幂+1)+1=(2-1)(2+1)(2²+1)(2的4次幂+1)(2的8次幂+1)(2的16次幂+1)+1=(2²-1)(2²+1)(2的4次幂+1)(2的8次幂+1)(2的16次幂+1)+1=(2的4次幂-1)(2的4次幂+1)(2的8次幂+1)(2的16次幂+1)+1=(2的8次幂-1)(2的8次幂+1)(2的16次幂+1)+1=(2的16次幂-1)(2的16次幂+1)+1=2的32次幂-1+1=2的32次幂2的2次幂 末尾是42的4次幂 末尾是4*4=62的8次幂 末尾是6*6=62的16次幂 末尾是6*6=62的32次幂 末尾是6*6=6

郝供胞38142的64次幂 - 1等于多少? -
裴残亭13662658441 ______[答案] 2的64等于4的32次幂,等于8的16次幂,等于16的4次幂,等于256的2次幂,等于65536 所以,2的64次幂-1等于65535

郝供胞38142的十四次幂乘2分之1的十六次幂等于多少了(要步骤) -
裴残亭13662658441 ______[答案] 2^14 * (1/2)^16 = 2^14 * 2^(-16) = 2^(14-16) = 2^(-2) = 1/4

郝供胞38148的667次幂等于什么,最后结果的个位数是几?已知2的1次幂=2,2的2次幂=4,2的3次幂=8,2的4次幂=16,2的5次幂=32,...观察上面n个算式的末位数字的规... -
裴残亭13662658441 ______[答案] 8的1次是8 2次是x4 3次xx2 4次是xx6 5次是xxx8 所以规律是8 4 2 6 ;8 4 2 6; 8 4 2 6 667是2

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024