chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有關(guān)batch size的設(shè)置范圍

OpenCV學(xué)堂 ? 來源:機器之心 ? 作者:機器之心 ? 2022-07-12 10:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有關(guān) batch size 的設(shè)置范圍,其實不必那么拘謹。

我們知道,batch size 決定了深度學(xué)習(xí)訓(xùn)練過程中,完成每個 epoch 所需的時間和每次迭代(iteration)之間梯度的平滑程度。batch size 越大,訓(xùn)練速度則越快,內(nèi)存占用更大,但收斂變慢。

又有一些理論說,GPU 對 2 的冪次的 batch 可以發(fā)揮更好性能,因此設(shè)置成 16、32、64、128 … 時,往往要比設(shè)置為其他倍數(shù)時表現(xiàn)更優(yōu)。

后者是否是一種玄學(xué)?似乎很少有人驗證過。最近,威斯康星大學(xué)麥迪遜分校助理教授,著名機器學(xué)習(xí)博主 Sebastian Raschka 對此進行了一番認真的討論。

Sebastian Raschka

關(guān)于神經(jīng)網(wǎng)絡(luò)訓(xùn)練,我認為我們都犯了這樣的錯誤:我們選擇批量大小為 2 的冪,即 64、128、256、512、1024 等等。(這里,batch size 是指當我們通過基于隨機梯度下降的優(yōu)化算法訓(xùn)練具有反向傳播的神經(jīng)網(wǎng)絡(luò)時,每個 minibatch 中的訓(xùn)練示例數(shù)。)

據(jù)稱,我們這樣做是出于習(xí)慣,因為這是一個標準慣例。這是因為我們曾經(jīng)被告知,將批量大小選擇為 2 的冪有助于從計算角度提高訓(xùn)練效率。

這有一些有效的理論依據(jù),但它在實踐中是如何實現(xiàn)的呢?在過去的幾天里,我們對此進行了一些討論,在這里我想寫下一些要點,以便將來參考。我希望你也會發(fā)現(xiàn)這很有幫助!

理論背景

在看實際基準測試結(jié)果之前,讓我們簡要回顧一下將批大小選擇為 2 的冪的主要思想。以下兩個小節(jié)將簡要強調(diào)兩個主要論點:內(nèi)存對齊和浮點效率。

內(nèi)存對齊

選擇批大小為 2 的冪的主要論據(jù)之一是 CPU 和 GPU 內(nèi)存架構(gòu)是以 2 的冪進行組織的?;蛘吒鼫蚀_地說,存在內(nèi)存頁的概念,它本質(zhì)上是一個連續(xù)的內(nèi)存塊。如果你使用的是 macOS 或 Linux,就可以通過在終端中執(zhí)行 getconf PAGESIZE 來檢查頁面大小,它應(yīng)該會返回一個 2 的冪的數(shù)字。

0aded8f6-0125-11ed-ba43-dac502259ad0.png

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

矩陣乘法和 Tensor Core

再詳細一點,英偉達有一個矩陣乘法背景用戶指南,解釋了矩陣尺寸和圖形處理單元 GPU 計算效率之間的關(guān)系。因此,本文建議不要將矩陣維度選擇為 2 的冪,而是將矩陣維度選擇為 8 的倍數(shù),以便在具有 Tensor Core 的 GPU 上進行混合精度訓(xùn)練。不過,當然這兩者之間存在重疊:

0aed43d2-0125-11ed-ba43-dac502259ad0.png

為什么會是 8 的倍數(shù)?這與矩陣乘法有關(guān)。假設(shè)我們在矩陣 A 和 B 之間有以下矩陣乘法:

0afbc4e8-0125-11ed-ba43-dac502259ad0.png

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

0b0dd5e8-0125-11ed-ba43-dac502259ad0.png

每個點積由一個「加」和一個「乘」操作組成,我們有 M×N 個這樣的點積。因此,共有 2×M×N×K 次浮點運算(FLOPS)。不過需要知道的是:現(xiàn)在矩陣在 GPU 上的乘法并不完全如此,GPU 上的矩陣乘法涉及平鋪。

如果我們使用帶有 Tensor Cores 的 GPU,例如英偉達 V100,當矩陣維度 (M、N 和 K)與 16 字節(jié)的倍數(shù)對齊(根據(jù) Nvidia 的本指南)后,在 FP16 混合精度訓(xùn)練的情況下,8 的倍數(shù)對于效率來說是最佳的。

通常,維度 K 和 N 由神經(jīng)網(wǎng)絡(luò)架構(gòu)決定(盡管如果我們自己設(shè)計還會有一些回旋余地),但批大?。ù颂帪?M)通常是我們可以完全控制的。

因此,假設(shè)批大小為 8 的倍數(shù)在理論上對于具有 Tensor Core 和 FP16 混合精度訓(xùn)練的 GPU 來說是最有效的,讓我們研究一下在實踐中可見的差異有多大。

簡單的 Benchmark

為了解不同的批大小如何影響實踐中的訓(xùn)練,我運行了一個簡單的基準測試,在 CIFAR-10 上訓(xùn)練 MobileNetV3 模型 10 個 epoch—— 圖像大小調(diào)整為 224×224 以達到適當?shù)?GPU 利用率。在這里,我使用 16 位原生自動混合精度訓(xùn)練在英偉達 V100 卡上運行訓(xùn)練,它更有效地使用了 GPU 的張量核心。

如果想自己運行它,代碼可在此 GitHub 存儲庫中找到:https://github.com/rasbt/b3-basic-batchsize-benchmark

小 Batch Size 基準

我們從批大小為 128 的小基準開始?!赣?xùn)練時間」對應(yīng)于在 CIFAR-10 上訓(xùn)練 MobileNetV3 的 10 個 epoch。推理時間意味著在測試集中的 10k 圖像上評估模型。

0b20d9ae-0125-11ed-ba43-dac502259ad0.jpg

查看上表,讓我們將批大小 128 作為參考點。似乎將批量大小減少一 (127) 或?qū)⑴看笮≡黾右?(129) 確實會導(dǎo)致訓(xùn)練性能減慢。但這里的差異看來很小,我認為可以忽略不計。

將批大小減少 28 (100) 會導(dǎo)致性能明顯下降。這可能是因為模型現(xiàn)在需要處理比以前更多的批次(50,000 / 100 = 500 對比 50,000 / 100 = 390)。可能出于類似的原因,當我們將批大小增加 28 (156) 時就可以觀察到更快的訓(xùn)練時間。

最大 Batch Size 基準

鑒于 MobileNetV3 架構(gòu)和輸入圖像大小,上一節(jié)中的批尺寸相對較小,因此 GPU 利用率約為 70%。為了研究 GPU 滿負荷時的訓(xùn)練時間差異,我將批量大小增加到 512,以使 GPU 顯示出接近 100% 的計算利用率:

0b2b2d14-0125-11ed-ba43-dac502259ad0.jpg

由于 GPU 內(nèi)存限制,批大小不可能超過 515。

同樣,正如我們之前看到的,作為 2 的冪(或 8 的倍數(shù))的批大小確實會產(chǎn)生很小但幾乎不明顯的差異。

多 GPU 訓(xùn)練

之前的基準測試評估了單塊 GPU 上的訓(xùn)練性能。不過如今在多 GPU 上訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)更為常見。所以讓我們看看下面的多 GPU 訓(xùn)練的數(shù)字比較:

0b39c0cc-0125-11ed-ba43-dac502259ad0.jpg

請注意,推理速度被省略了,因為在實踐中我們通常仍會使用單個 GPU 進行推理。此外,由于 GPU 的內(nèi)存限制,我無法運行批處理大小為 512 的基準測試,因此在這里降低到 256。

正如我們所看到的,這一次 2 的冪和 8 的倍數(shù)批量大小 (256) 并不比 257 快。在這里,我使用 DistributedDataParallel (DDP) 作為默認的多 GPU 訓(xùn)練策略。你也可以使用不同的多 GPU 訓(xùn)練策略重復(fù)實驗。GitHub 上的代碼支持 —strategy ddp_sharded (fairscale)、ddp_spawn、deepspeed 等。

基準測試注意事項

這里需要強調(diào)的是上述所有基準測試都有注意事項。例如我只運行每個配置一次。理想情況下,我們希望多次重復(fù)這些運行并報告平均值和標準偏差。(但這可能不會影響我們的結(jié)論,即性能沒有實質(zhì)性差異)

此外,雖然我在同一臺機器上運行了所有基準測試,但我以連續(xù)的順序運行它們,運行之間沒有很長的等待時間。因此這可能意味著基本 GPU 溫度在運行之間可能有所不同,并且可能會對計時產(chǎn)生輕微影響。

我運行基準測試來模仿真實世界的用例,即在 PyTorch 中訓(xùn)練具有相對常見設(shè)置的現(xiàn)成架構(gòu)。然而,正如 Piotr Bialecki 正確指出的那樣,通過設(shè)置 torch.backends.cudnn.benchmark = True 可以稍微提高訓(xùn)練速度。

其他資源和討論

正如 Ross Wightman 所提到的,他也不認為選擇批量大小作為 2 的冪會產(chǎn)生明顯的差異。但選擇 8 的倍數(shù)對于某些矩陣維度可能很重要。此外 Wightman 指出,在使用 TPU 時批量大小至關(guān)重要。(不幸的是,我無法輕松訪問 TPU,也沒有任何基準比較)

如果你對其他 GPU 基準測試感興趣,請在此處查看 Thomas Bierhance 的優(yōu)秀文章:https://wandb.ai/datenzauberai/Batch-Size-Testing/reports/Do-Batch-Sizes-Actually-Need-to-be-Powers-of-2---VmlldzoyMDkwNDQx

特別是你想要比較:

顯卡是否有 Tensor Core;

顯卡是否支持混合精度訓(xùn)練;

在像 DeiT 這樣的無卷積視覺轉(zhuǎn)換器。

Rémi Coulom-Kayufu 的一個有趣的實驗表明,2 次方的批大小實際上很糟糕。看來對于卷積神經(jīng)網(wǎng)絡(luò),可以通過以下方式計算出較好的批大小:

Batch Size=int ((n×(1《《14)×SM)/(H×W×C))。

其中,n 是整數(shù),SM 是 GPU 內(nèi)核的數(shù)量(例如,V100 為 80,RTX 2080 Ti 為 68)。

結(jié)論

根據(jù)本文中共享的基準測試結(jié)果,我不認為選擇批大小作為 2 的冪或 8 的倍數(shù)在實踐中會產(chǎn)生明顯的差異。

然而,在任何給定的項目中,無論是研究基準還是機器學(xué)習(xí)的實際應(yīng)用上,都已經(jīng)有很多旋鈕需要調(diào)整。因此,將批大小選擇為 2 的冪(即 64、128、256、512、1024 等)有助于使事情變得更加簡單和易于管理。此外,如果你對發(fā)表學(xué)術(shù)研究論文感興趣,將批大小選擇為 2 的冪將使結(jié)果看起來不像是刻意挑選好結(jié)果。

雖然堅持批大小為 2 的冪有助于限制超參數(shù)搜索空間,但重要的是要強調(diào)批大小仍然是一個超參數(shù)。一些人認為較小的批尺寸有助于泛化性能,而另一些人則建議盡可能增加批大小。

個人而言,我發(fā)現(xiàn)最佳批大小在很大程度上取決于神經(jīng)網(wǎng)絡(luò)架構(gòu)和損失函數(shù)。例如,在最近一個使用相同 ResNet 架構(gòu)的研究項目中,我發(fā)現(xiàn)最佳批大小可以在 16 到 256 之間,具體取決于損失函數(shù)。

因此,我建議始終考慮調(diào)整批大小作為超參數(shù)優(yōu)化搜索的一部分。但是,如果因為內(nèi)存限制而不能使用 512 的批大小,則不必降到 256。有限考慮 500 的批大小是完全可行的。

原文標題:一番實驗后,有關(guān)Batch Size的玄學(xué)被打破了

文章出處:【微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4831

    瀏覽量

    107278
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4749

    瀏覽量

    89809
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5152

    瀏覽量

    134757

原文標題:一番實驗后,有關(guān)Batch Size的玄學(xué)被打破了

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    變頻器起動過程曲線參數(shù)怎么設(shè)置

    (Acceleration Time) ● 定義:電機從靜止加速至額定轉(zhuǎn)速所需時間。 ● 典型設(shè)置范圍:5-60秒(根據(jù)負載慣量調(diào)整)。 ● 重載應(yīng)用建議:延長至標準值的1.5-2倍。 ● 過短會導(dǎo)致:電流沖擊(可達額定電流5-7倍)。 ● 驗證方法:監(jiān)測啟動電流不超過變
    的頭像 發(fā)表于 01-23 12:03 ?36次閱讀
    變頻器起動過程曲線參數(shù)怎么<b class='flag-5'>設(shè)置</b>

    U盤插上后串口打印CBW size error怎么解決?

    request size 18, transfer size 0 CBW size error rt_udisk_run =-8 之前調(diào)好的U_HOST的驅(qū)動,插入u盤后正可以正常掛載與讀寫,今天插了另一個U盤后出現(xiàn)如上打
    發(fā)表于 10-13 06:53

    激光錫焊的核心溫控測溫范圍

    激光錫焊的溫控與測溫范圍是保障焊接質(zhì)量的核心參數(shù),其設(shè)置需精準匹配焊料特性、工件材質(zhì)及工藝需求。合理的溫度區(qū)間控制既能確保焊錫充分熔化浸潤,又能避免基材過熱損傷,是精密電子制造中不可或缺的工藝指標。
    的頭像 發(fā)表于 09-09 15:32 ?1534次閱讀
    激光錫焊的核心溫控測溫<b class='flag-5'>范圍</b>

    【嘉楠堪智K230開發(fā)板試用體驗】基于 K230 的 參照HHB的 demo 實現(xiàn)基于 c 語言的自定義模型公交

    create_data_loaders(data_dir, batch_size=32, input_size=224): train_transforms, val_transforms = get_data_transforms
    發(fā)表于 09-07 00:45

    【「DeepSeek 核心技術(shù)揭秘」閱讀體驗】基于MOE混合專家模型的學(xué)習(xí)和思考-2

    , num_experts) def forward(self, x): # 1. 門控網(wǎng)絡(luò)計算權(quán)重 [batch_size, num_experts] gating_weights
    發(fā)表于 08-23 17:00

    泰克示波器MDO32電流探頭怎么設(shè)置

    示波器電流探頭的設(shè)置流程。 1.依據(jù)測量需求挑選適配探頭:首先要明確待測電流信號的參數(shù)范圍,這是選擇合適電流探頭的基礎(chǔ)。對于幅值,需預(yù)估被測電流的最大值。例如,若要測量一般小型電子設(shè)備的工作電流,其電流通常在數(shù)安培以內(nèi),可
    的頭像 發(fā)表于 07-16 14:34 ?658次閱讀
    泰克示波器MDO32電流探頭怎么<b class='flag-5'>設(shè)置</b>的

    泰克示波器電流探頭設(shè)置指南

    ,并針對常見問題提供解決方案,幫助工程師高效完成電流信號的精確測量。 ? 一、電流探頭選型與基礎(chǔ)連接 1.1 確定測量需求 在設(shè)置電流探頭前,需明確待測信號的參數(shù)范圍: 電流幅值:根據(jù)被測設(shè)備的工作電流選擇探頭量程。例
    的頭像 發(fā)表于 05-06 16:15 ?1107次閱讀
    泰克示波器電流探頭<b class='flag-5'>設(shè)置</b>指南

    變頻器控制電機需要設(shè)置哪些參數(shù)

    變頻器控制電機時需要設(shè)置的參數(shù)主要包括以下幾類: 一、基本運行參數(shù) 1. 頻率范圍:根據(jù)電機的額定頻率和工作要求,設(shè)置變頻器的頻率范圍。這決定了電機的轉(zhuǎn)速
    的頭像 發(fā)表于 04-21 07:41 ?2010次閱讀

    Linux網(wǎng)絡(luò)設(shè)置與基礎(chǔ)服務(wù)

    Linux網(wǎng)絡(luò)設(shè)置與基礎(chǔ)服務(wù)
    的頭像 發(fā)表于 04-09 11:51 ?3260次閱讀
    Linux網(wǎng)絡(luò)<b class='flag-5'>設(shè)置</b>與基礎(chǔ)服務(wù)

    CM32M433R-START只用到PMP的話應(yīng)該如何設(shè)置?

    CM32M4xxR_StdPeriph_Examples * @{ */#define MACHINE_MODE_STACK_SIZE0x400static uint8_t sMachineModeStack
    發(fā)表于 03-07 13:08

    dlp2010更新flash時,如圖Batch File 和Pattern File這兩個文件不知道輸入什么,在哪里找到?

    dlp2010更新flash時,目的是想更新開機圖片,在設(shè)置時遇到問題,如圖Batch File 和Pattern File這兩個文件不知道輸入什么,在哪里找到
    發(fā)表于 02-25 06:48

    DLP4710的曝光時間設(shè)置范圍是多大呢?八位灰度調(diào)制方式是什么呢?

    請問,DLP4710的曝光時間設(shè)置范圍是多大呢?八位灰度調(diào)制方式是什么呢? 如下圖所示,燒寫6張豎條紋8位灰度圖,曝光時間設(shè)置為33000us,前后黑暗時間按照提示設(shè)為接近最小值。 給出觸發(fā)
    發(fā)表于 02-20 07:05

    DLPC3439 0X54設(shè)置RGB各通道電流的范圍是多少,91-1024?

    如圖,0X54設(shè)置RGB各通道電流的范圍是多少,91-1024?文檔中無相關(guān)說明。
    發(fā)表于 02-19 07:19

    使用DLPC3478+DLPA3005做了一款板子,修改了batch file關(guān)燈但是無效,怎么回事?

    我們現(xiàn)在使用DLPC3478+DLPA3005做了一款板子,使用TI官網(wǎng)的9.0.1的red_only固件可以驅(qū)動光機,但是光機開機會投splash,我修改了batch file關(guān)燈但是無效
    發(fā)表于 02-17 06:05

    ADS1282的數(shù)據(jù)采樣率跟那些量有關(guān)

    哪位能告訴我ADS1282的數(shù)據(jù)采樣率跟那些量有關(guān)嗎?怎么設(shè)置?是不是跟CLK、SCLK有關(guān)?
    發(fā)表于 02-08 08:50