自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深度學習的Batchsize必須是2的n次方嗎?

發(fā)布于 2024-12-19 12:08
瀏覽
0收藏

大家或多或少都已經(jīng)默認了,batchsize一般都是2,8,36,64,128...因為基本上所有論文都是這么設置默認超參數(shù),大家久而久之就習慣了,至少這樣設置總不會錯吧。

其實我也有這么一個迷思,如果不設置為2的n次方會怎么樣?效果變差?效率變低?還是...

基本理論

一般而言,選擇batchsize為2的冪背后的主要思想來自于:內(nèi)存對齊和浮點效率。

內(nèi)存對齊

將batchsize選擇為2的冪的主要論點之一是CPU和GPU內(nèi)存架構是以2的冪組織的。有一個內(nèi)存頁的概念,它本質上是一個連續(xù)的內(nèi)存塊。如果使用的是macOS或Linux,可以通過在終端中執(zhí)行getconf PAGESIZE來檢查頁面大小,這應該返回一個2的冪。

深度學習的Batchsize必須是2的n次方嗎?-AI.x社區(qū)

這個想法是將一個或多個批次整齊地放在一個頁面上,幫助GPU中的并行處理?;蛘邠Q句話說,選擇批量大小為2,以獲得更好的內(nèi)存對齊。這與在視頻游戲開發(fā)和圖形設計中使用OpenGL和DirectX時選擇2的冪次紋理類似(并且可能受到啟發(fā))。

浮點效率

Nvidia有一個矩陣乘法背景指南,解釋了矩陣維數(shù)和圖形處理單元(GPU)計算效率之間的關系。建議將矩陣維數(shù)選擇為8的倍數(shù),在有Tensor Core的GPU上進行混合精度訓練更有效率。

將兩個矩陣A和B相乘的一種方式是通過計算矩陣A的行向量與矩陣B的列向量之間的點積。如下所示,這些是k元素向量對的點積:

深度學習的Batchsize必須是2的n次方嗎?-AI.x社區(qū)

每個點積由一個“加”和一個“乘”操作組成,我們有 M×N 個這樣的點積。因此,總的來說,我們有 2×M×N×K 浮點運算(FLOPS)。如果這時候使用GPU例如V100,當矩陣維度( MM , NN 和 KK )對齊為16字節(jié)的倍數(shù)時,計算效率會更好(根據(jù)Nvidia的指南)。具體來說,在FP16混合精度訓練的情況下,8的倍數(shù)是效率的最佳選擇。

實驗驗證

以下驗證都是基于在CIFAR-10上訓練MobileNetV3模型測試。

小Batchsize驗證

看起來,將批量大小減少1(127)或將批量大小增加1(129)確實會導致訓練性能稍慢。這里的差異幾乎不明顯,可以忽略不計。

深度學習的Batchsize必須是2的n次方嗎?-AI.x社區(qū)

大Batchsize驗證

批量大小為2的冪(或8的倍數(shù))確實會產(chǎn)生很小但幾乎不明顯的差異。

深度學習的Batchsize必須是2的n次方嗎?-AI.x社區(qū)

多GPU下Batchsize驗證

這一次,2的冪和8的倍數(shù)的批量大小(256)沒有快于257,所以其實實際上稍微改變Batchsize,在現(xiàn)實中影響并沒有那么明顯。

深度學習的Batchsize必須是2的n次方嗎?-AI.x社區(qū)

結論

如果按實踐指南來說,建議還是以2的n次方來設置batchsize比較穩(wěn)妥,一個是有理論基礎,另外一個是誰也不想因為Batchsize的個性化導致漫長的訓練過程變得更漫長。但從實際簡單的測試來看,好像影響又不是很明顯,但總體來說,Batchsize一般設置在16-256之間,是比較有效且穩(wěn)妥的做法,可供參考。

https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#gpu-imple

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

本文轉載自 ??沐白AI筆記??,作者: 楊沐白

收藏
回復
舉報
回復
相關推薦