自 v1.0 以來已經(jīng)過去了五個月,所以是時候進(jìn)行新一輪 MLPerf 培訓(xùn)基準(zhǔn)了。在這個 v1.1 版本中,整個硬件和軟件堆棧的優(yōu)化看到了基于 NVIDIA 平臺提交的基準(zhǔn)測試套件的持續(xù)改進(jìn)。這種改進(jìn)在所有不同的尺度上都是一致的,從單個機(jī)器到工業(yè)超級計(jì)算機(jī),例如由 560 個 NVIDIA DGX A100 系統(tǒng)組成的英偉達(dá) SeleN 和由 768 個節(jié)點(diǎn) A100 系統(tǒng)組成的微軟 Azure NDM A100 V4 集群。
越來越多的組織使用MLPerf基準(zhǔn)來指導(dǎo)其AI基礎(chǔ)設(shè)施戰(zhàn)略。MLPerf(VZX19的一部分)是由學(xué)術(shù)界、研究實(shí)驗(yàn)室和工業(yè)界的人工智能領(lǐng)導(dǎo)者組成的全球聯(lián)盟,其使命是建立公平和有用的基準(zhǔn),為在規(guī)定條件下進(jìn)行的硬件、軟件和服務(wù)的培訓(xùn)和推理性能提供公正的評估。為了保持行業(yè)趨勢的領(lǐng)先地位,MLPerf不斷發(fā)展,定期舉行新的測試,并添加代表AI最先進(jìn)水平的新工作負(fù)載。
與前幾輪的 MLPerf 基準(zhǔn)測試一樣,本文從技術(shù)上深入探討了 NVIDIA 行業(yè)領(lǐng)先性能的優(yōu)化工作。
為 MLPerf v0.7 培訓(xùn)優(yōu)化 NVIDIA AI 性能
MLPerf v1.0 培訓(xùn)基準(zhǔn):了解創(chuàng)紀(jì)錄的 NVIDIA 績效
NVIDIA 繼續(xù)披露并詳細(xì)闡述這些技術(shù)細(xì)節(jié),表明了其對公開和公平的社區(qū)驅(qū)動基準(zhǔn)標(biāo)準(zhǔn)和實(shí)踐這一重要問題的堅(jiān)定承諾,以促進(jìn)人工智能的公益性發(fā)展。
整個堆棧的優(yōu)化
由于構(gòu)建模塊仍以目前成熟的NVIDIA A100GPU 、英偉達(dá) DGX A100平臺和NVIDIA SuperPod參考體系結(jié)構(gòu)為中心,整個堆棧的優(yōu)化,特別是在系統(tǒng)軟件、庫和算法方面的優(yōu)化,導(dǎo)致 MLPerf v1.1 中基于 NVIDIA 的平臺的性能不斷提高。
與 1 年前我們自己提交的 MLPerf v0.7 相比,我們觀察到芯片對芯片的改進(jìn)高達(dá) 2.1 倍,最大規(guī)模培訓(xùn)的改進(jìn)高達(dá) 5.3 倍,如表 1 所示。
表 1 。 NVIDIA MLPerf AI 逐年改善
NVIDIA MLPERF v1.0 submission details :
根據(jù)加速器記錄: BERT : 1.0-1033 | DLRM:1.0-1037 | Mask R-CNN:1.0-1057 | Resnet50 v1.5:1.0-1038 | SSD:1.0-1038 | RNN-T:1.0-1060 | 3D Unet:1.0-1053 | MiniGo:1.0-1061
最大刻度記錄: BERT : 1.0-1077 | DLRM:1.0-1067 | Mask R-CNN:1.0-1070 | Resnet50 v1.5:1.0-1076 | SSD:1.0-1072 | RNN-T:1.0-1074 | 3D Unet:1.0-1071 | MiniGo:1.0-1075
NVIDIA MLPERF v1.1 submission details :
根據(jù)加速器記錄: BERT : 1.1-2066 | DLRM:1.1-2064 | Mask R-CNN:1.1-2066 | Resnet50 v1.5:1.1-2065 | SSD:1.1-2065 | RNN-T:1.1-2066 | 3D Unet:1.1-2065 | MiniGo:1.1-2067
最大刻度記錄: BERT : 1.1-2083 | DLRM:1.1-2073 | Mask R-CNN:1.1-2076 | Resnet50 v1.5:1.1-2082 | SSD:1.1-2070 | RNN-T:1.1-2080 | 3D Unet:1.1-2077 | MiniGo:1.1-2081 (*)
使用 NVIDIA 8xA100 服務(wù)器訓(xùn)練時間并乘以 8 (**)計(jì)算 A100 的每加速器性能。 U-Net 和 RNN-T 不是 MLPerf v0.7 的一部分。 MLPerf 名稱和徽標(biāo)是商標(biāo)。有關(guān)更多信息,請?jiān)L問 www.mlperf.org 。
下一節(jié)將介紹一些亮點(diǎn)。
CUDA 圖
在 MLPerf v1.0 中,我們對大多數(shù)基準(zhǔn)廣泛使用 CUDA 圖。 CUDA 圖將多個內(nèi)核作為單個可執(zhí)行單元啟動,通過最小化與 CPU 的通信來加快吞吐量。但每個圖的范圍只是一個完整迭代的一部分,該迭代處理單個小批量。因此,每次迭代分解為多個 CUDA 圖時,只捕獲了迭代的一部分。
在 MLPerf v1.1 中,我們使用 CUDA 圖將整個迭代捕獲到多個基準(zhǔn)的單個圖中,從而進(jìn)一步減少培訓(xùn)期間與 CPU 的通信,并在規(guī)模上提高性能。這在 PyTorch 和 MXNet 基準(zhǔn)測試中都得到了實(shí)現(xiàn),從而使 ResNet-50 和 BERT 工作負(fù)載的性能提高了 6% 。
NCCL
NCCL 是NVIDIA Magnum IO 技術(shù)公司的一部分,它是優(yōu)化服務(wù)器拓?fù)浣Y(jié)構(gòu)的 GPU 間通信的庫。 NCCL 今年早些時候增加的一個關(guān)鍵特性是對 CUDA 圖形的支持. 這使我們能夠?qū)⒄麄€迭代捕獲為一個圖,如前一節(jié)所述。
之前, NCCL 復(fù)制了圖中的所有權(quán)重,并執(zhí)行了一個 all REDUCT 函數(shù),該函數(shù)將所有權(quán)重相加。然后將更新后的權(quán)重寫回圖形。這需要數(shù)據(jù)的多個副本。
我們現(xiàn)在引入了用戶緩沖區(qū)注冊, NCCL 集體使用指針,以避免在與可伸縮分層聚合和縮減協(xié)議(SHARP)一起使用時來回復(fù)制數(shù)據(jù),該協(xié)議也是NVIDIA Magnum IO的一部分。在存在 CUDA 圖和 SHARP 的情況下,我們觀察到約 2% 的端到端額外加速。
NCCL 還實(shí)現(xiàn)了將縮放操作(乘以標(biāo)量)融合到通信內(nèi)核中以減少數(shù)據(jù)拷貝,從而在通信密集型網(wǎng)絡(luò)(如 BERT )中額外節(jié)省約 3% 的端到端成本。
細(xì)粒重疊
在這一輪中,我們充分利用了 GPU 硬件的功能,使獨(dú)立計(jì)算塊能夠在多個核之間進(jìn)行細(xì)粒度的重疊,并增加了通信和計(jì)算的重疊。這提高了性能,尤其是最大規(guī)模的訓(xùn)練,在 Mask R-CNN 上提高了 10% ,在 DLRM 上提高了 27% 。
特別是對于 recommender systems benchmark ( DLRM ),我們利用軟件和硬件的功能,通過重疊多個操作高效地使用 GPU 資源:
重疊嵌入索引計(jì)算和所有減少集體的前一次迭代
重疊數(shù)據(jù)梯度和權(quán)重梯度計(jì)算
增加了數(shù)學(xué)和其他多 GPU 集體的重疊,如全對全
對于 3D UNet ,空間并行性能通過更有效地調(diào)度數(shù)學(xué)和通信內(nèi)核來提高,以增加兩者的重疊。
對于掩模 R-CNN ,我們實(shí)現(xiàn)了掩模頭、邊界盒頭和 RPN 頭的損耗計(jì)算重疊,以提高 GPU 在規(guī)模上的利用率。
通過更高效的內(nèi)存拷貝(矢量化)和內(nèi)核中更好的通信和數(shù)學(xué)重疊,我們顯著提高了多 GPU 組批處理規(guī)范( GBN )性能。這可以將工作負(fù)載擴(kuò)展到 GPU 以上,從而為某些計(jì)算機(jī)視覺基準(zhǔn)測試(如 ResNet50 和 SSD )節(jié)省 10% 以上的最大規(guī)模培訓(xùn),為 3D UNet 節(jié)省 5% 以上的培訓(xùn)。
核融合與優(yōu)化
最后,在這一輪 MLPerf 中,我們首次將偏差梯度縮減融合到矩陣乘法核中(兩個操作的融合)。這將導(dǎo)致高達(dá) 3% 的性能改進(jìn)。
模型優(yōu)化細(xì)節(jié)
在本節(jié)中,我們將深入討論每個工作負(fù)載上的優(yōu)化工作。
BERT
在后向傳遞中將偏置梯度減少融合到矩陣乘法中
cuBLAS庫最近引入了一種新的融合類型:在同一內(nèi)核中融合偏置梯度計(jì)算和權(quán)重梯度計(jì)算。
在這一輪中,我們使用 cuBLAS 功能在向后傳球中融合這兩個操作。我們還在正向傳遞中融合了偏置加法和矩陣乘法。圖 1 顯示了向前傳球和向后傳球的融合操作。
圖 1 。在前向傳遞(左)和后向傳遞(右)中將其他操作與矩陣乘法融合
改進(jìn)的融合多頭注意
在上一輪中,我們實(shí)現(xiàn)了多頭注意模塊的融合。此模塊跨num_sequences和num_heads變量使用并行性。這意味著在 GPU 上的不同流式多處理器( SMs )上同時調(diào)度的num_sequences*num_heads線程塊總數(shù)。num_heads在 MLPerf BERT 模型中為 16 ,并且當(dāng)num_sequences小于 6 時,沒有足夠的線程塊填充 GPU ,從而限制了并行性。
在這一輪中,我們通過在注意力計(jì)算所需的批量矩陣乘法的序列維度上引入slicing來改進(jìn)這些內(nèi)核,這有助于按比例提高并行性。這種優(yōu)化使最大規(guī)模的訓(xùn)練場景的端到端加速約 8% ,其中每芯片批量較小。
使用 CUDA 圖捕獲完整迭代圖
正如前面關(guān)于communications library圖的部分所提到的,在這一輪中,我們將 BERT 的完整迭代捕獲到單個 CUDA 圖中。這是因?yàn)?CUDA NCCL 中支持 CUDA 圖形,以及PyTorch 框架. 由于 CPU 延遲和抖動在規(guī)模上有所減少,因此端到端節(jié)省了約 3% 。除此之外,在使用 CUDA 圖時,我們還利用了 NCCL 用戶緩沖區(qū)預(yù)注冊功能,從而使端到端性能提高了約 2% 。
將模型參數(shù)緩沖區(qū)設(shè)置為指向連續(xù)平面緩沖區(qū)
BERT 使用分布式優(yōu)化器加快優(yōu)化步驟。為了獲得最佳的全聚集性能,分布式優(yōu)化器中用于權(quán)重參數(shù)的中間緩沖區(qū)都應(yīng)該是單個連續(xù)平面緩沖區(qū)的一部分。通過這種方式,我們可以更好地使用 GPU 互連,而不是在小的獨(dú)立張量上運(yùn)行多個 all gather 函數(shù),方法是為一條大消息運(yùn)行 all gather 。
另一方面,默認(rèn)情況下, PyTorch 為前向傳遞期間使用的每個模型參數(shù)張量分配單獨(dú)的緩沖區(qū)。這需要一個額外的“取消平臺”步驟,如圖 2 所示,在迭代結(jié)束和下一個迭代開始之間。
在這一輪 MLPerf 中,我們使用了一個單獨(dú)的連續(xù)緩沖區(qū),其中每個參數(shù)張量作為一個大緩沖區(qū)的一部分彼此相鄰放置。這樣就不需要額外的取消緩沖步驟,如圖 2 所示。這種優(yōu)化可在最大規(guī)模配置下為 BERT 節(jié)省約 4% 的端到端性能,其中優(yōu)化器和參數(shù)拷貝的成本最為顯著。
Figure 2.在優(yōu)化前后迭代的幾個不同步驟之間,參數(shù)張量是如何在內(nèi)存中表示的。
DLRM
HugeCTR是 NVIDIAMerlin的一部分,是一個推薦系統(tǒng)專用培訓(xùn)框架,它繼續(xù)支持 NVIDIA DLRM 提交。
混合嵌入索引預(yù)計(jì)算
在上一輪 MLPerf 中,我們實(shí)現(xiàn)了hybrid embedding,以減少 GPU 之間的通信。
盡管 HugeCTR 中實(shí)現(xiàn)的混合嵌入顯著減少了通信量,但它需要計(jì)算索引以確定在何處讀取和分發(fā)存儲在每個 GPU 上的嵌入向量。索引計(jì)算僅依賴于輸入數(shù)據(jù),這些數(shù)據(jù)在前面的幾次迭代中被預(yù)取到 GPU 上。因此,在 Hugetr 中,索引預(yù)計(jì)算被用作優(yōu)化,以隱藏在上一次迭代的通信內(nèi)核下計(jì)算索引的成本。
與訓(xùn)練迭代中的索引預(yù)計(jì)算相同,用于評估的混合嵌入索引可以在第一次執(zhí)行評估時計(jì)算和緩存。它們可以在剩余的評估中重復(fù)使用,這完全消除了為后續(xù)評估計(jì)算指數(shù)的成本。
通信和計(jì)算之間的更好重疊
在 DLRM 中,為了促進(jìn)模型并行訓(xùn)練,在前進(jìn)和后退階段分別需要兩個全對全集體。此外,在模型的數(shù)據(jù)并行部分的培訓(xùn)結(jié)束時,還有一個 all REDUCT 集合。如何將計(jì)算與這些通信集體重疊是實(shí)現(xiàn) GPU 的高利用率和高訓(xùn)練吞吐量的關(guān)鍵。為了實(shí)現(xiàn)更好的重疊,進(jìn)行了一些優(yōu)化。圖 3 顯示了一次培訓(xùn)迭代的簡化時間表。
在前向傳播階段,執(zhí)行底部 MLP ,同時將所有內(nèi)核轉(zhuǎn)發(fā)到所有內(nèi)核,等待數(shù)據(jù)到達(dá)。在反向傳播階段, all REDUCT 和 all to all 重疊以提高網(wǎng)絡(luò)的利用率。索引預(yù)計(jì)算還計(jì)劃與這兩個通信集體重疊,以使用 GPU 上的空閑資源,最大限度地提高訓(xùn)練吞吐量。
圖 3 。訓(xùn)練迭代的簡化時間軸視圖,說明計(jì)算和通信操作的細(xì)粒度重疊。
異步權(quán)重梯度計(jì)算
MLP 的數(shù)據(jù)梯度計(jì)算和權(quán)重梯度計(jì)算是共享相同輸入的兩個獨(dú)立計(jì)算分支。與數(shù)據(jù)梯度不同,在梯度全部減小之前,不需要權(quán)重梯度。由于 GPU 在調(diào)度內(nèi)核方面的靈活性,這兩個計(jì)算在 HUGETR 中并行執(zhí)行,最大限度地提高了 GPU 的利用率。
更好的融合
內(nèi)核融合是一種有效的方法,可以減少對內(nèi)存的訪問,提高 GPU 利用率。以前, DLRM 中利用了許多融合模式來實(shí)現(xiàn)更好的性能。例如,數(shù)據(jù)梯度計(jì)算、 ReLU 反向操作和偏置梯度計(jì)算可以通過 cuBLAS 在 HugeCTR 中融合在一起。這樣的跨層融合模式使得最后一次偏置梯度計(jì)算未被使用。
在這一輪中,利用 cuBLAS 中支持的 GEMM 和偏置梯度融合,將偏置梯度計(jì)算融合到 MLP 最后一層的權(quán)重梯度計(jì)算中。
另一個融合示例是權(quán)重轉(zhuǎn)換融合。為了支持混合精度訓(xùn)練,訓(xùn)練期間必須將 FP32 主砝碼轉(zhuǎn)換為 FP16 砝碼。作為優(yōu)化,該精密鑄造與 Hugetr 中的 SGD optimizer 融合。每當(dāng)更新 FP32 主權(quán)重時,它都會將更新權(quán)重的 FP16 版本寫入內(nèi)存,從而無需單獨(dú)的內(nèi)核進(jìn)行轉(zhuǎn)換。
面具 R-CNN
在這一輪中,為所有卷積層切換到 NHWC 布局,使用專用評估節(jié)點(diǎn),并改進(jìn)損耗計(jì)算重疊,為掩碼 R-CNN 工作負(fù)載提供了最大的改進(jìn)。
對所有卷積層使用 NHWC 布局
ResNet-50 主干網(wǎng)已經(jīng)使用 NHWC 布局很長一段時間了,但該型號的其余部分直到現(xiàn)在都使用 NCHW 。
這一輪我們能夠?qū)?FPN 模塊(緊跟在 ResNet-50 主干之后)切換到 NHWC 。在 NHWC 中運(yùn)行 FPN 意味著我們可以轉(zhuǎn)置輸出而不是輸入,這更有效,因?yàn)檩斎氡容敵龃蟮枚?。這一變化將最大規(guī)模配置的性能提高了 4-5% 。
使用專用節(jié)點(diǎn)專門評估多節(jié)點(diǎn)場景
雖然評估與培訓(xùn)重疊,但 Mask R-CNN 評估是一個資源密集型過程。當(dāng)評估同時進(jìn)行時,培訓(xùn)績效不可避免地會受到輕微影響。對于最大規(guī)模配置,評估所需時間幾乎與培訓(xùn)所需時間相同。在后臺持續(xù)運(yùn)行評估顯著影響培訓(xùn)績效。
克服此問題的一種方法是使用一組單獨(dú)的節(jié)點(diǎn)進(jìn)行評估,即一組節(jié)點(diǎn)進(jìn)行培訓(xùn),一組較小的節(jié)點(diǎn)進(jìn)行評估。對最大規(guī)模配置實(shí)施此更改將端到端性能提高了 12% 。
使用多線程 COCO 評估
COCO 求值函數(shù)消耗了大部分求值時間,并分別在邊界框和分割掩碼結(jié)果上運(yùn)行。幾輪之前,我們通過在多個進(jìn)程中運(yùn)行這兩個評估調(diào)用來重疊這兩個評估調(diào)用。
這一輪,我們?yōu)?COCO 評估循環(huán)啟用了 openmp 多線程處理。這是 COVIAPI 軟件英偉達(dá)版中的一個可選特性。通過提供指定所需線程數(shù)的可選參數(shù),可以并行化求值循環(huán)。此優(yōu)化將評估速度提高了約 10% ,但僅顯示最后一次評估,因此對端到端時間的影響要小得多,約為 0.5% 。
小批量運(yùn)行占用率四倍的兩階段 top-K 計(jì)算
我們在 Mask R-CNN 打了幾個 top-K 電話,由于占用率低,需要很長時間。 top-K 內(nèi)核啟動的協(xié)作線程陣列或 CTA (線程塊)的數(shù)量與每 GPU 批大小成比例。最大規(guī)模配置使用的每 – GPU 批大小為 1 ,這導(dǎo)致僅啟動五個 CTA 。每個 CTA 分配一個 SMs ,而 A100 有 100 多個 SMs ,這表明 GPU 的利用率較低。
為了緩解這種情況,我們實(shí)施了兩階段方法:
在第一階段,我們將輸入分成四個相等的部分,然后通過一個調(diào)用對每個部分執(zhí)行 top-K 。
在第二階段,我們將四個臨時結(jié)果連接起來,并取其中的 top-K 。
這將產(chǎn)生與以前相同的結(jié)果,但運(yùn)行速度快 3 倍以上,因?yàn)槲覀儸F(xiàn)在在第一階段推出了 20 個 CTA ,而不是 5 個。進(jìn)一步劃分輸入會使第一階段更快,但也會使第二階段更慢。
將輸入分成八種方式,而不是四種方式,這意味著在第一階段將啟動 40 個 CTA ,而不是 20 個。第一階段只需一半的時間就可以完成,但不幸的是,第二階段的速度太慢了,采用四向分割的方式,整體性能會更好。對最大規(guī)模配置實(shí)施四向拆分可使性能提升 3-4% 。
遮罩頭部、邊界盒頭部和 RPN 頭部的重疊損失計(jì)算
Mask R-CNN 推出的大多數(shù) GPU 內(nèi)核在批量較小時占用率較低。緩解這種情況的一種方法是盡可能多地重疊執(zhí)行內(nèi)核,以利用 GPU 資源,否則這些資源就會閑置。
一些損失計(jì)算可以同時進(jìn)行。對于遮罩水頭損失、邊界框損失和 RPN 水頭損失,這是正確的,因此我們將這三個損失計(jì)算分別放在不同的 CUDA 流上,以便它們可以同時執(zhí)行。這將最大規(guī)模配置的性能提高了約 5% 。
三維 UNet
矢量化連接和拆分操作
3D UNet 使用連接操作連接解碼器和編碼器激活。這將導(dǎo)致在向前和向后傳遞中為激活張量生成設(shè)備到設(shè)備的副本。我們通過使用矢量化加載和存儲優(yōu)化了這些拷貝,執(zhí)行了 4 倍寬的讀/寫操作。這使 concat 和 split 操作符的速度提高了 2.4 倍以上,在單節(jié)點(diǎn)配置下,端到端的加速比為 4.7% ,在最大規(guī)模配置下,端到端的加速比為 1.3% 。
高效空間并行卷積
在 MLPerf v1.0 中,我們引入了空間并行卷積,在這里我們將輸入激活拆分為多個 GPU (準(zhǔn)確地說是 8 )。空間并行卷積的實(shí)現(xiàn)使我們能夠?qū)灲粨Q隱藏在卷積后面的卷積后面。
在 MLPerf v1.1 中,我們優(yōu)化了通信和卷積操作的調(diào)度,以便在啟動的通信和卷積內(nèi)核之間獲得更好的重疊。雖然這確保了光暈交換不會暴露,但也有助于顯著降低抖動。此優(yōu)化調(diào)度將最大規(guī)模配置的分?jǐn)?shù)提高了 25% 以上。
圖 4 ??臻g并行卷積:完全隱藏在卷積后面的光暈轉(zhuǎn)移
空間并行損耗計(jì)算
3D Unet 使用骰子損失和 Softmax 交叉熵?fù)p失作為其損失函數(shù)。骰子損失定義為以下公式:
在此公式中,Pi和Gi分別表示預(yù)測和地面真實(shí)的對應(yīng)像素值對。
在最大比例配置中,由于單個 GPU 僅作用于圖像的一個切片,因此每個 GPU 僅包含Pi和Gi的一個切片。為了優(yōu)化損耗計(jì)算,我們獨(dú)立計(jì)算了每個 GPU 中的部分項(xiàng),并通過 NVLink 在組中的所有 GPU 之間交換部分項(xiàng)。然后將這些部分項(xiàng)組合起來,形成骰子損失結(jié)果。這將損失計(jì)算速度提高了 4 倍以上,最大規(guī)模分?jǐn)?shù)提高了 7% 。
更好的配置
我們將全局批處理大小增加為數(shù)據(jù)集大小的一個因素。 DALI 數(shù)據(jù)加載器庫使我們能夠使用同一個碎片為不同的時代進(jìn)行訓(xùn)練。這使我們能夠顯著減少在 GPU 中緩存數(shù)據(jù)集所需的時間。
由于每個 GPU 加載的圖像要少得多,因此 DALI 中的邊界框緩存升溫速度也要快得多。此優(yōu)化顯著縮短了啟動時間,并使 MLPerf v1.0 的加速比提高了 20% 。
數(shù)據(jù)并行異步計(jì)算
隨著培訓(xùn)速度的加快,隱藏在培訓(xùn)背后的規(guī)模評估變得具有挑戰(zhàn)性。在 MLPerf v1.1 中,單個圖像上的推斷在 GPU 上分片,以改進(jìn)評估比例。然后收集所有推斷結(jié)果,形成最終輸出。這使得整個評估階段可以隱藏在培訓(xùn)迭代之后。
更快的組實(shí)例規(guī)范
多 GPU InstanceRM 內(nèi)核通過并行化多通道塊的 GPU 間通信和通過矢量化內(nèi)存讀寫來減少內(nèi)核的 DRAM 時間而得到了顯著改進(jìn)。這使得最大規(guī)模配置的吞吐量提高了 5% 以上。
ResNet-50
端到端 CUDA 圖
對于 ResNet-50 ,當(dāng)基準(zhǔn)擴(kuò)展到> 256 個節(jié)點(diǎn)時,每 GPU 批大小減小到一個非常小的值,其中迭代時間僅為~ 8-10ms 。在這些非常小的迭代時間內(nèi),確保 GPU 執(zhí)行中沒有因 CPU 上運(yùn)行的依賴項(xiàng)而產(chǎn)生的間隙是至關(guān)重要的。
對于 MLPerfV1.1 ,我們通過使用端到端技術(shù)減少了規(guī)模上的抖動CUDA 圖為了捕獲整個前向過程中的迭代,后向過程、優(yōu)化器和 Horovord / NCCL 梯度都減少為單個圖形。 CUDA 圖的使用在最大規(guī)模的培訓(xùn)中提供了 6% 的性能優(yōu)勢。
GBN
隨著 ResNet50 規(guī)模的增加和本地批量的減少,為了實(shí)現(xiàn)盡可能快的收斂,我們使用 GBN 技術(shù)。對于每個 BatchNorm 層,在 GPU 組中,均數(shù)和方差均減少。
對于 MLPerf v1.1 ,通過并行化多個通道塊的 GPU 間通信,并通過矢量化內(nèi)存讀寫來減少內(nèi)核的 DRAM 時間,單個 DGX 節(jié)點(diǎn)內(nèi)的 GBN 性能得到了顯著改善。這在規(guī)模上提供了 10% 的性能優(yōu)勢。
固態(tài)硬盤
打開 – GPU 圖像緩存
圖像網(wǎng)絡(luò)大量使用圖像裁剪和調(diào)整大小來捕獲表示數(shù)據(jù)集更豐富統(tǒng)計(jì)信息的特征,并提高模型的泛化能力。
在以前的MLPRF回合中,SSD使用英偉達(dá)數(shù)據(jù)加載庫 (DALI) 圖像解碼特征來解碼JPG圖像的裁剪區(qū)域。此功能可避免在解碼整個圖像時浪費(fèi)時間,尤其是在裁剪較小的情況下。
但是,這意味著該裁剪圖像只使用一次,因?yàn)樵搱D像未緩存在內(nèi)存中。原始圖像的未來使用可能會有不同的裁剪區(qū)域,這意味著每次使用原始圖像時都會對其進(jìn)行解碼。這種行為會導(dǎo)致 GPU 之間的抖動,因?yàn)榻獯a成本隨裁剪所需區(qū)域的大小變化很大。這在擴(kuò)展場景中尤其明顯。
在這一輪中,我們利用了每個 NVIDIA A100 80-GB GPU 可用的 80-GB 內(nèi)存容量,使用另一個 DALI 功能對整個圖像進(jìn)行解碼并將其緩存在內(nèi)存中。這使得將來可以使用相同的圖像來避免解碼成本,而是直接從內(nèi)存中拾取裁剪區(qū)域。這樣做比每次解碼裁剪區(qū)域更便宜,并且運(yùn)行時間和設(shè)備到設(shè)備的執(zhí)行時間差異要小得多。
總體而言,該優(yōu)化使單節(jié)點(diǎn)配置的端到端性能提高了 2% ,有效規(guī)模配置提高了約 5% ,規(guī)模介于單節(jié)點(diǎn)和最大規(guī)模之間。
用于 SSD 的 GBN ,
SSD 還利用了在 ResNet-50 中實(shí)現(xiàn)的 GBN 改進(jìn),在我們的最大規(guī)模配置中提供了約 4% 的 E2E 改進(jìn)。
RNN-T
更優(yōu)化的頂點(diǎn)傳感器
apex中的傳感器模塊已進(jìn)一步優(yōu)化,以提高訓(xùn)練吞吐量。傳感器接頭和傳感器損耗模塊分別增加了兩個優(yōu)化。
傳感器接頭、 ReLU 和 dropout 是 RNN-T 中三個連續(xù)的內(nèi)存綁定操作。作為優(yōu)化, ReLU 和 dropout 已與 apex 中apex.contrib.transducer.TransducerJoint模塊中的傳感器接頭融合,有效地減少了到內(nèi)存的跳閘。
傳感器損耗的反向傳播是一種內(nèi)存密集型操作。 apex 中的apex.contrib.transducer.TransducerLoss中添加了一項(xiàng)優(yōu)化,對反向操作中的加載和存儲進(jìn)行矢量化,從而提高了內(nèi)核的內(nèi)存帶寬利用率。
GPU 上的更多數(shù)據(jù)預(yù)處理
當(dāng) GPU 忙于向前和向后傳遞時,在 CPU 上預(yù)處理下一批數(shù)據(jù)可能會隱藏?cái)?shù)據(jù)預(yù)處理時間。這是理想的。但是,當(dāng)數(shù)據(jù)預(yù)處理是計(jì)算密集型的時, CPU 上的預(yù)處理時間可能會暴露出來。
DALI 可以利用 GPU 的大規(guī)模并行處理特性,通過計(jì)算 GPU 上的部分預(yù)處理來幫助卸載 CPU 。在本文中,靜默修剪操作被移動到 GPU ,從而提高了訓(xùn)練吞吐量。
結(jié)論
基于成熟且經(jīng)驗(yàn)證的 NVIDIA A100 GPU 和 NVIDIA DGX A100 平臺,在這一輪 MLPerf v1.1 培訓(xùn)基準(zhǔn)中,跨堆棧優(yōu)化繼續(xù)為基于 NVIDIA 平臺的提交提供全面的性能改進(jìn)。
值得重申的是,英偉達(dá)平臺是唯一的解決方案,提交所有工作負(fù)載在 MLPRF 基準(zhǔn)套件,展示了業(yè)界領(lǐng)先的性能和通用性。
所有用于 NVIDIA 提交的軟件都可以從 MLPerf 存儲庫中獲得,以使您能夠重現(xiàn)我們的基準(zhǔn)測試結(jié)果。我們不斷地將這些尖端的 MLPerf 改進(jìn)添加到NGC上提供的深度學(xué)習(xí)框架容器中,這是我們針對 GPU 優(yōu)化應(yīng)用程序的軟件中心。
關(guān)于作者
Vinh Nguyen 是一位深度學(xué)習(xí)的工程師和數(shù)據(jù)科學(xué)家,發(fā)表了 50 多篇科學(xué)文章,引文超過 2500 篇。在 NVIDIA ,他的工作涉及廣泛的深度學(xué)習(xí)和人工智能應(yīng)用,包括語音、語言和視覺處理以及推薦系統(tǒng)。
Sukru Burc Eryilmaz 是 NVIDIA 計(jì)算機(jī)體系結(jié)構(gòu)的高級架構(gòu)師,他致力于在單節(jié)點(diǎn)和超級計(jì)算機(jī)規(guī)模上改進(jìn)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的端到端性能。他從斯坦福大學(xué)獲得博士學(xué)位,并從比爾肯特大學(xué)獲得學(xué)士學(xué)位。
Karthik Mandakolathur 是 NVIDIA Magnum IO 的產(chǎn)品經(jīng)理,專注于加速分布式 AI 、數(shù)據(jù)分析和 HPC 應(yīng)用。憑借 20 多年的行業(yè)經(jīng)驗(yàn), Karthik 曾在 Broadcom 和 Cisco 擔(dān)任高級工程和產(chǎn)品職務(wù)。他在沃頓商學(xué)院獲得工商管理碩士學(xué)位,在斯坦福大學(xué)獲得工商管理碩士學(xué)位,在印度理工學(xué)院獲得工商管理學(xué)士學(xué)位。他在高性能交換架構(gòu)領(lǐng)域擁有多項(xiàng)美國專利。
About Shar Narasimhan
Shar Narasimhan 是 AI 的高級產(chǎn)品營銷經(jīng)理,專門從事 NVIDIA 的 Tesla 數(shù)據(jù)中心團(tuán)隊(duì)的深度學(xué)習(xí)培訓(xùn)和 OEM 業(yè)務(wù)。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4855瀏覽量
102711 -
gpu
+關(guān)注
關(guān)注
28文章
4673瀏覽量
128592 -
MLPerf
+關(guān)注
關(guān)注
0文章
35瀏覽量
625
發(fā)布評論請先 登錄
相關(guān)推薦
評論