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

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

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

MLPerf v1.0培訓(xùn)基準(zhǔn)反映最先進(jìn)的人工智能應(yīng)用

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:NVIDIA ? 2022-04-02 11:30 ? 次閱讀

MLPerf 是一個(gè)全行業(yè)人工智能聯(lián)盟,其任務(wù)是開(kāi)發(fā)一套性能基準(zhǔn),涵蓋廣泛使用的一系列主要人工智能工作負(fù)載。最新的 mlperfv1 。 0 培訓(xùn)包括視覺(jué)、語(yǔ)言和推薦系統(tǒng),以及強(qiáng)化學(xué)習(xí)任務(wù)。它不斷發(fā)展,以反映最先進(jìn)的人工智能應(yīng)用。

NVIDIA 按照我們的傳統(tǒng),提交了所有八個(gè)基準(zhǔn)的 MLPerf v1 。 0 培訓(xùn)結(jié)果。事實(shí)上,建立在 NVIDIA 人工智能平臺(tái)上的系統(tǒng)是唯一可以進(jìn)行全面提交的商用系統(tǒng)。

與之前提交的 MLPerf v0 。 7 相比,我們?cè)?a href="http://wenjunhu.com/v/tag/137/" target="_blank">芯片到芯片的基礎(chǔ)上提高了 2 。 1 倍,在規(guī)模上提高了 3 。 5 倍。我們創(chuàng)造了 16 項(xiàng)業(yè)績(jī)記錄,其中 8 項(xiàng)是基于每個(gè)芯片的, 8 項(xiàng)是針對(duì)商用解決方案類(lèi)別的大規(guī)模培訓(xùn)。

pYYBAGJHw-iAbVZkAABU2nm-QJI086.png

表 1 。 NVIDIA MLPERF AI 記錄。

(*)

(*)使用 NVIDIA 8xA100 服務(wù)器訓(xùn)練時(shí)間計(jì)算 A100 的每個(gè)加速器性能,并將其乘以 8 |每個(gè)芯片的性能比較,通過(guò)比較最接近的類(lèi)似規(guī)模下的性能得出其他性能。

根據(jù)加速器記錄: BERT : 1 。 0-1033 | 數(shù)據(jù)鏈路管理: 1 。 0-1037 | 面罩 R-CNN : 1 。 0-1057 | ResNet50 v1 。 5 : 1 。 0-1038 | 固態(tài)硬盤(pán): 1 。 0-1038 | RNN-T : 1 。 0-1060 | 3D U 網(wǎng): 1 。 0-1053 | 迷你們: 1 。 0-1061

最大刻度記錄: BERT : 1 。 0-1077 | 數(shù)據(jù)鏈路管理: 1 。 0-1067 | 面罩 R-CNN : 1 。 0-1070 | ResNet50 v1 。 5 : 1 。 0-1076 | 固態(tài)硬盤(pán): 1 。 0-1072 | RNN-T : 1 。 0-1074 | 3D U 網(wǎng): 1 。 0-1071 | 迷你們: 1 。 0-1075

MLPerf 名稱(chēng)和徽標(biāo)是商標(biāo)。有關(guān)詳細(xì)信息,請(qǐng)參閱 www.mlperf.org 。

這是以 NVIDIA A100 GPU s 為特色的第二輪 MLPerf 訓(xùn)練。我們對(duì)相同硬件的持續(xù)改進(jìn)是 NVIDIA 平臺(tái)實(shí)力和持續(xù)軟件改進(jìn)承諾的生動(dòng)證明。與前幾輪 MLPerf 一樣, NVIDIA 工程師開(kāi)發(fā)了一系列創(chuàng)新,以實(shí)現(xiàn)這些新的性能水平:

在所有基準(zhǔn)上擴(kuò)展 CUDA 圖形 。傳統(tǒng)上,神經(jīng)網(wǎng)絡(luò)是從 CPU 以單個(gè)內(nèi)核的形式啟動(dòng),在 GPU 上執(zhí)行。在 MLPerf v1 。 0 中,我們?cè)?GPU 上啟動(dòng)了整個(gè)內(nèi)核序列,將與 CPU 的通信最小化。

使用 SHARP 將節(jié)點(diǎn)之間的有效互連帶寬增加一倍。夏普將集合操作從 CPU 和 GPU 卸載到網(wǎng)絡(luò),并消除了在端點(diǎn)之間多次發(fā)送數(shù)據(jù)的需要。

CUDA 圖形和銳利的增強(qiáng)使我們能夠?qū)⑽覀兊囊?guī)模增加到 4096 GPU 的創(chuàng)紀(jì)錄數(shù)字,用于解決單個(gè)人工智能網(wǎng)絡(luò)。

空間并行性使我們能夠在 8 個(gè) GPU 上分割單個(gè)圖像,用于像 3D U-Net 這樣的大規(guī)模圖像分割網(wǎng)絡(luò),并使用更多的 GPU 來(lái)獲得更高的吞吐量。

在硬件改進(jìn)中, NVIDIA A100 GPU 上的新 HBM2e GPU 內(nèi)存將內(nèi)存帶寬提高了近 30% ,達(dá)到 2 TBps 。

這篇文章提供了許多用于提供出色規(guī)模和性能的優(yōu)化的見(jiàn)解。其中許多改進(jìn)在 NGC 上可用,它是 NVIDIA GPU 優(yōu)化軟件的中心。您可以在實(shí)際應(yīng)用程序中認(rèn)識(shí)到這些優(yōu)化的好處,而不只是在一旁觀察更好的基準(zhǔn)測(cè)試分?jǐn)?shù)。

大規(guī)模訓(xùn)練

大規(guī)模培訓(xùn)需要對(duì)系統(tǒng)硬件和軟件進(jìn)行精確調(diào)整,以協(xié)同工作,并支持大規(guī)模出現(xiàn)的獨(dú)特性能要求。 NVIDIA 在這兩個(gè)方面都取得了重大進(jìn)展,現(xiàn)在可以用于生產(chǎn)。

在系統(tǒng)方面,我們大規(guī)模培訓(xùn)的關(guān)鍵組成部分是 NVIDIA DGX SuperPOD 。 DGX SuperPOD 是 HPC 和 AI 數(shù)據(jù)中心多年專(zhuān)業(yè)經(jīng)驗(yàn)的結(jié)晶。它基于 NVIDIA DGX A100 ,具有最新的 NVIDIA A100 張量核心 GPU 、第三代 NVIDIA NVLink 、 NVSwitch 和 NVIDIA ConnectX-6 VPI 200 Gbps HDR InfiniBand 。這些結(jié)合起來(lái),使賽琳娜成為 超級(jí)計(jì)算機(jī) 500 強(qiáng)排行榜 中排名前五的超級(jí)計(jì)算機(jī),其組件如下:

4480 NVIDIA A100 張量核 GPU s

560 NVIDIA DGX A100 系統(tǒng)

850 Mellanox 200G HDR InfiniBand 交換機(jī)

在軟件方面, NGC 容器版本 v 。 21 。 05 增強(qiáng)并支持多種功能:

分布式優(yōu)化器支持增強(qiáng)。

使用 Mellanox HDR Infiniband 和 NCCL 2 。 9 。 9 提高了通信效率。

增加了銳利的支撐。 SHARP 改進(jìn)了 MPI 和機(jī)器學(xué)習(xí)集體操作的性能。向 NCCL 添加了 SHARP 支持,以將所有 reduce 集體操作卸載到網(wǎng)絡(luò)結(jié)構(gòu)中,從而減少節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量。

工作量

在本節(jié)中,我們將深入研究針對(duì)選定的單個(gè) MLPerf 工作負(fù)載的優(yōu)化。

建議( DLRM )

推薦可以說(shuō)是當(dāng)今數(shù)據(jù)中心中最普遍的人工智能工作負(fù)載。 NVIDIA MLPerf DLRM 提交基于 HugeCTR ,一個(gè) GPU 加速推薦框架,它是 NVIDIA Merlin 開(kāi)放測(cè)試版框架的一部分。 HugeCTR v3 。 1 測(cè)試版增加了以下優(yōu)化:

混合嵌入

優(yōu)化集體

優(yōu)化的數(shù)據(jù)讀取器

帶嵌入的重疊 MLP

全迭代 CUDA 圖

混合嵌入

將 DLRM 擴(kuò)展到多個(gè)節(jié)點(diǎn)的主要挑戰(zhàn)之一是 NVLink 和 Infiniband 之間的 per- GPU all-to-all 帶寬相差約 10 倍。這使得節(jié)點(diǎn)間的嵌入交換成為訓(xùn)練過(guò)程中的一個(gè)重要瓶頸。

為了解決這個(gè)問(wèn)題, HugeCTR 實(shí)現(xiàn)了混合嵌入,這是一種新的嵌入設(shè)計(jì),在進(jìn)行前向傳遞的嵌入權(quán)值交換之前,對(duì)一批類(lèi)別進(jìn)行重復(fù)數(shù)據(jù)消除。在后向通道中進(jìn)行梯度交換之前,還可以局部減小梯度。

為實(shí)現(xiàn)高效的重復(fù)數(shù)據(jù)消除,混合嵌入根據(jù)類(lèi)別的統(tǒng)計(jì)訪問(wèn)頻率將類(lèi)別映射為頻繁和不頻繁的嵌入。頻繁嵌入是以數(shù)據(jù)并行的方式實(shí)現(xiàn)的,它在一個(gè)批處理中帶走了大部分復(fù)制的類(lèi)別,減少了嵌入交換的流量。不頻繁嵌入遵循分布式模型并行嵌入范式。這使 DLRM 能夠以前所未有的效率擴(kuò)展到多個(gè)節(jié)點(diǎn)。

pYYBAGJHw3SAEXxKAAC6KdcwBkU385.png

圖 1 ?;旌锨度?HugeCTR

優(yōu)化集體

所有到所有和所有減少集體延遲在擴(kuò)展效率方面起著重要作用。小消息大小的多節(jié)點(diǎn)全對(duì)全吞吐量受到 Infiniband 消息速率的限制。為了緩解這種情況, HugeCTR 使用分層的 all-To-all 實(shí)現(xiàn)了融合的 NVLink 聚合,以嵌入 exchange 。

poYBAGJHw3SAPytjAAEfp7KjWTk344.png

圖 2 。 ZBK8 中的集體優(yōu)化

您可以從所有節(jié)點(diǎn)到所有節(jié)點(diǎn)進(jìn)行優(yōu)化,并進(jìn)一步減少延遲:

直接使用本機(jī) IB verbs API 和 SHARP 來(lái)減少庫(kù)開(kāi)銷(xiāo)。

圖形可捕獲, GPU – 啟動(dòng)通信以減少啟動(dòng)開(kāi)銷(xiāo)。

用單側(cè)躍遷協(xié)議代替雙側(cè)會(huì)合協(xié)議來(lái)減少網(wǎng)絡(luò)跳數(shù)。

使用持久通信緩沖區(qū)消除冗余的消息緩沖區(qū)副本。

直接在 GPU 內(nèi)存上使用 NIC 原子,而不是通過(guò) CPU 間接定向,減少了 NIC- GPU 同步延遲。

與環(huán)網(wǎng)相比,還使用單次減少算法優(yōu)化了節(jié)點(diǎn)內(nèi)的所有減少。

頻繁嵌入 all-reduce 和 MLP-all-reduce 融合到一個(gè) all-reduce 操作中,以節(jié)省暴露的 all-reduce 延遲。

優(yōu)化的數(shù)據(jù)讀取器

輸入管道在培訓(xùn)績(jī)效中起著重要的作用。為了達(dá)到峰值 I / O 吞吐量, HugeCTR 使用 Linux 異步 I / O 庫(kù)( AIO )實(shí)現(xiàn)了一個(gè)完全異步的數(shù)據(jù)讀取器。由于混合嵌入要求整個(gè)批處理出現(xiàn)在所有 GPU 上,因此每個(gè) GPU 的直接主機(jī)到設(shè)備( H2D )將使 PCIe 成為瓶頸。因此,使用分層方法將數(shù)據(jù)復(fù)制到 GPU 上,首先通過(guò) PCIe 執(zhí)行 H2D ,然后通過(guò) NVLink 進(jìn)行廣播。

pYYBAGJHw3aAPtdRAAFLTuu8z4I500.png

圖 3 。 HugeCTR 多線程數(shù)據(jù)讀取器

此外,來(lái)自數(shù)據(jù)讀取器的 H2D 通信可能會(huì)干擾節(jié)點(diǎn)間的 all-to-all 并減少通過(guò) PCIe 的通信量。因此, HugeCTR 實(shí)現(xiàn)了智能數(shù)據(jù)讀取器調(diào)度以避免這種干擾。

帶嵌入的重疊 MLP

由于底層 MLP 與嵌入沒(méi)有數(shù)據(jù)依賴(lài)關(guān)系,因此底層 MLP 的幾個(gè)組件可以與嵌入重疊,以有效地利用 GPU 資源。

底部 MLP 正向與嵌入正向過(guò)程重疊

頻繁嵌入局部權(quán)值更新與所有約簡(jiǎn)重疊

MLP 重量更新與節(jié)間全對(duì)全重疊

cuBLAS Lt GEMM 融合

HugeCTR 實(shí)現(xiàn)了一個(gè)融合的、完全連接的層,該層利用了 cublasLt GEMM 融合:

用于 MLP-fprop 的 GEMM + Relu +偏置融合

GEMM + dRelu + dBias 融合治療 MLP-bprop

poYBAGJHw3eAH9ArAALsdO46Ij4642.png

圖 4 。使用 cuBLAS Lt GEMM 熔合的 HugeCTR 中的熔合 FC 層

全迭代 CUDA 圖

為了減少啟動(dòng)延遲并防止內(nèi)核啟動(dòng)、數(shù)據(jù)讀取器和通信流量之間的 PCIe 干擾,所有 DLRM 計(jì)算和通信內(nèi)核都設(shè)計(jì)為流可捕獲。整個(gè)訓(xùn)練迭代被捕獲到一個(gè) CUDA 圖中。

通過(guò)前面的優(yōu)化,我們擴(kuò)展到多個(gè)節(jié)點(diǎn),并在不到一分鐘的時(shí)間內(nèi)在 14 個(gè) DGX-A100 節(jié)點(diǎn)上完成了 DLRM 訓(xùn)練任務(wù)。與之前提交的 v0 。 7 相比,這是 3 。 3 倍的加速。

NLP ( BERT )

BERT 可以說(shuō)是當(dāng)今 NLP 領(lǐng)域最重要的工作負(fù)載之一。在 MLPerf v1 。 0 版本中,我們通過(guò)以下優(yōu)化改進(jìn)了 v0 。 7 版本:

融合多頭注意

分布式羔羊

無(wú)同步訓(xùn)練

CUDA graphs in PyTorch

一炮皆減銳利

融合多頭注意

多頭注意塊中激活張量的大小隨序列長(zhǎng)度的平方而增大。這會(huì)導(dǎo)致內(nèi)存占用增加,以及由于伴隨的內(nèi)存訪問(wèn)操作而導(dǎo)致運(yùn)行時(shí)間延長(zhǎng)。我們將 softmax 、掩蔽和退出操作融合到一個(gè)內(nèi)核中,包括前向傳遞和后向傳遞。通過(guò)這樣做,我們避免了對(duì)多頭注意塊中的大激活張量進(jìn)行多次內(nèi)存訪問(wèn)操作,從而顯著提高了性能。

有關(guān)詳細(xì)信息,請(qǐng)參閱 NVIDIA Apex 庫(kù)中的 SelfMultiheadAttn 。

分布式 LAMB

在這一輪 MLPerf 中,我們實(shí)現(xiàn)了分布式 LAMB 。在分布式 LAMB 中,梯度首先在每個(gè) DGX-A100 節(jié)點(diǎn)內(nèi)的八個(gè) GPU 上分裂。接下來(lái)是八個(gè)獨(dú)立組中的節(jié)點(diǎn)之間的 all reduce 。在這個(gè)操作之后,每個(gè) GPU 都有 8 個(gè)塊中的一個(gè),這些塊構(gòu)成了全約化梯度張量, LAMB 優(yōu)化器在 1 / 8 上運(yùn)行th全梯度張量。

必要時(shí),通過(guò)計(jì)算局部范數(shù)并執(zhí)行 all-reduce 操作來(lái)計(jì)算梯度范數(shù)。在優(yōu)化器之后,在每個(gè)節(jié)點(diǎn)上執(zhí)行一個(gè) intranode all gather 操作,這樣每個(gè) GPU 都有完整的更新參數(shù)張量。繼續(xù)執(zhí)行下一次迭代的前向傳遞。

分布式 LAMB 極大地提高了單節(jié)點(diǎn)和多節(jié)點(diǎn)配置的性能。有關(guān)更多信息,請(qǐng)參閱 Apex 庫(kù)中的 DistributedFusedLAMB 。

無(wú)同步訓(xùn)練

在某些情況下, GPU 的執(zhí)行取決于在 CPU 上存儲(chǔ)或計(jì)算的某個(gè)值。一個(gè)例子是當(dāng)一個(gè)特定的張量有一個(gè)不同的大小,這取決于每次迭代的計(jì)算。因?yàn)閺埩看笮⌒畔⒈4嬖?CPU 上, GPU 和 CPU 之間必須有一個(gè)同步,才能傳遞張量大小信息以進(jìn)行適當(dāng)?shù)木彌_區(qū)分配。

我們的解決方案是使用具有固定大小的張量,但使用單獨(dú)的布爾掩碼指示哪些元素是有效的。這種方法不需要 CPU – GPU 同步,因?yàn)閺埩看笮∈且阎?。?dāng)后續(xù)計(jì)算必須知道張量的實(shí)際大小時(shí),對(duì)于平均運(yùn)算,布爾掩碼的元素可以在 GPU 上求和。

盡管這種方法導(dǎo)致對(duì) GPU 內(nèi)存的訪問(wèn)稍微多一些,但它比在關(guān)鍵路徑中進(jìn)行 CPU 同步要快得多。這種優(yōu)化為小的本地批處理大小帶來(lái)了顯著的性能提升,對(duì)于我們的 max-scale 配置就是這樣。這是因?yàn)?CPU 同步無(wú)法跟上小批量的快速 GPU 執(zhí)行。

poYBAGJHw3iAKLsfAABmYoZYdn4142.png

圖 5 。無(wú)同步訓(xùn)練消除了 CPU 同步

CPU – GPU 同步的另一個(gè)來(lái)源是保存在 CPU 上的數(shù)據(jù),例如學(xué)習(xí)率或其他可能的優(yōu)化器狀態(tài)。我們將所有優(yōu)化器狀態(tài)保留在 GPU 上,以便分布式 LAMB 實(shí)現(xiàn)無(wú)同步執(zhí)行。

通過(guò)這些優(yōu)化,我們消除了訓(xùn)練周期中 CPU 和 GPU 之間的所有同步。唯一的同步是發(fā)生在評(píng)估點(diǎn)上的同步,以將每個(gè)評(píng)估點(diǎn)的評(píng)估精度實(shí)時(shí)記錄到一個(gè)文件中。

CUDA graphs in PyTorch

傳統(tǒng)上, CPU 單獨(dú)啟動(dòng)每個(gè) GPU 內(nèi)核。一般來(lái)說(shuō),即使 GPU 內(nèi)核對(duì)大批量處理做更多的工作, CPU 內(nèi)核啟動(dòng)工作和相關(guān)的 CPU 開(kāi)銷(xiāo)保持不變,除非 CPU 調(diào)度發(fā)生變化。因此,對(duì)于較小的本地批處理大小, CPU 開(kāi)銷(xiāo)可能成為一個(gè)重要的性能瓶頸。這就是我們?cè)?MLPerf 中的 max-scale BERT 配置中發(fā)生的情況。

除此之外,當(dāng) CPU 執(zhí)行成為瓶頸時(shí), CPU 執(zhí)行的變化會(huì)導(dǎo)致每個(gè)迭代的所有 GPU 的運(yùn)行時(shí)不同。當(dāng)工作負(fù)載擴(kuò)展到多個(gè) GPU 時(shí)(在本例中是 4096 個(gè) GPU ),這會(huì)帶來(lái)很大的同步開(kāi)銷(xiāo)。每個(gè) GPU 同步每個(gè)梯度縮減的迭代,迭代時(shí)間由最慢的工人決定。

BERT 圖形是一種功能,它允許一次啟動(dòng)整個(gè)內(nèi)核序列,消除了內(nèi)核執(zhí)行之間的 CPU 開(kāi)銷(xiāo)。 CUDA 圖形最近在 PyTorch 中可用。通過(guò)圖捕獲模型,我們消除了 CPU 開(kāi)銷(xiāo)和伴隨的同步開(kāi)銷(xiāo)。對(duì)于我們的 max-scale CUDA 配置, CUDA Graphs 實(shí)現(xiàn)本身就帶來(lái)了 1 。 7 倍的性能提升。

一炮皆減銳利

夏普顯著提高了 BERT 的集體性能,特別是我們的最大規(guī)模配置。對(duì)于這種 BERT 配置,夏普的端到端性能提升了 17% 。

圖像分類(lèi)( ResNet-50 v1 。 5 )

ResNet-50 是 MLPerf 工作負(fù)載中的老手。在這個(gè)版本的 MLPerf 中,我們繼續(xù)通過(guò)改進(jìn) cuDNN 中的 Conv + BN + ReLu 融合內(nèi)核來(lái)優(yōu)化 ResNet ,并進(jìn)行以下優(yōu)化:

DALI 優(yōu)化

MXNet 保險(xiǎn)絲 BN + ReLu

改進(jìn)的 MXNet 依賴(lài)引擎改進(jìn)

DALI 優(yōu)化

在 ResNet-50 的大范圍(》 128 個(gè)節(jié)點(diǎn))中,我們將每 GPU 的本地批大小減少到非常小的值。這通常會(huì)導(dǎo)致低于 20 毫秒的迭代時(shí)間。為了減少數(shù)據(jù)管道的開(kāi)銷(xiāo),我們引入了輸入批處理乘數(shù)( IBM )。大批量的 DALI 吞吐量高于小批量。為了利用這個(gè)事實(shí),我們創(chuàng)建了比本地批大小大得多的超級(jí)批。對(duì)于每個(gè)迭代,我們從這些超級(jí)批中導(dǎo)出所需的樣本,從而增加 DALI 處理吞吐量并減少數(shù)據(jù)管道開(kāi)銷(xiāo)。

在這些小的迭代時(shí)間中,無(wú)間隙和連續(xù)執(zhí)行是實(shí)現(xiàn)完美縮放的關(guān)鍵。 通過(guò)提示預(yù)分配 DALI 緩沖區(qū) 是我們引入的另一個(gè)功能,用于在探索數(shù)據(jù)集時(shí)減少動(dòng)態(tài) GPU 內(nèi)存分配的開(kāi)銷(xiāo)。

MXNet 融合了 BN + ReLu 和 BN + Add + ReLu 性能優(yōu)化

對(duì)于 ResNet-50 ,批處理范數(shù)( BN )是網(wǎng)絡(luò)迭代時(shí)間的重要部分。通過(guò)矢量化、緩存友好的內(nèi)存遍歷和減少量化,優(yōu)化了 MXNet 中融合的 BN + ReLu 和 BN + Add + ReLu 核。

改進(jìn)的 MXNet 依賴(lài)引擎改進(jìn)

新的 MXNet 依賴(lài)引擎提供了一種異步方法來(lái)調(diào)度 GPU 上的工作,減少了主機(jī)( CPU )開(kāi)銷(xiāo)和抖動(dòng),例如 MXNet 和 Horovord 握手產(chǎn)生的開(kāi)銷(xiāo)。

在新的依賴(lài)關(guān)系引擎中,只要在 GPU 上安排了工作,操作就會(huì)更新依賴(lài)關(guān)系,而不是在工作完成時(shí)。后續(xù)操作必須執(zhí)行同步以確保正確性。通過(guò)消除對(duì)同步的需要并使用 cudaStreamWait 事件來(lái)管理依賴(lài)關(guān)系,這一點(diǎn)得到了進(jìn)一步的增強(qiáng)。

pYYBAGJHw3qAK7-qAACzhdN9FhA478.png

圖 6 。 ResNet-50 和舊的 MXNet 依賴(lài)引擎

poYBAGJHw3qANWwHAAC6-ZZcAS8228.png

圖 7 。 ResNet-50 和新的依賴(lài)引擎, cudaStreamWaitEvent

圖像分割( 3D U 網(wǎng))

U-Net3D 是這一輪 MLPerf 訓(xùn)練的兩個(gè)新工作量之一。我們使用了以下優(yōu)化:

空間平行性

異步求值

數(shù)據(jù)加載器

通道上次布局支持

空間平行性

在 3du-Net 中,由于訓(xùn)練數(shù)據(jù)集中的樣本數(shù)相對(duì)較小,因此在原始數(shù)據(jù)并行性的情況下,其可伸縮性有一個(gè)基本的限制。為了打破這一限制,我們使用空間平行性將單個(gè)圖像分割成八個(gè) GPU s 。在反向傳播結(jié)束時(shí),可以像往常一樣減少每個(gè)分區(qū)的梯度,以得到合成的梯度,然后可以用來(lái)計(jì)算權(quán)重梯度。

實(shí)現(xiàn)空間并行卷積的簡(jiǎn)單方法是在運(yùn)行卷積之前從相鄰的 GPU 傳輸光環(huán)信息。然而,為了提高效率,我們實(shí)現(xiàn)了一個(gè)不同的方案,在這個(gè)方案中,我們從相鄰的 GPU 轉(zhuǎn)移光環(huán),同時(shí)運(yùn)行主要的內(nèi)部卷積。這個(gè)主卷積的誤差項(xiàng)是用光暈獨(dú)立計(jì)算出來(lái)的,再加上它就得到了結(jié)果。通過(guò)隱藏傳輸成本,我們看到了比單純方法更好的擴(kuò)展效率。

pYYBAGJHw3uAX_KPAABzKwkwMSE019.png

圖 8 。 fprop 空間并行卷積

對(duì)于反向傳播,類(lèi)似地, dgrad 操作所需的光暈與權(quán)值梯度和數(shù)據(jù)梯度的計(jì)算并行傳輸。然后,為數(shù)據(jù)梯度傳輸?shù)墓鈺灡恢匦掠糜谟?jì)算權(quán)重和數(shù)據(jù)梯度的校正項(xiàng)。

poYBAGJHw3yARxWqAAB_pZwfR-U272.png

圖 9 。帶 bprop 的空間并行卷積

3D U-NET 在網(wǎng)絡(luò)中間具有瓶頸區(qū)域,其激活大小小得多,不適合于空間并行性。我們使用了一種混合方法,只對(duì)從中受益的層使用空間并行性。我們從瓶頸區(qū)域之前的所有 GPU 中收集樣本的激活,并在每個(gè) GPU 上連續(xù)執(zhí)行這些層。當(dāng)合作變得有益時(shí),我們又把工作分給了 GPU 。這確保了我們?yōu)榫W(wǎng)絡(luò)的每個(gè)區(qū)域分別做出最佳選擇。

pYYBAGJHw32AWvXSAADY-k5Onak052.png

圖 10 ??臻g并行性在三維 U 網(wǎng)中的應(yīng)用

異步求值

在參考代碼中,求值貢獻(xiàn)了大量的時(shí)間。因?yàn)樵u(píng)估可以與訓(xùn)練同時(shí)運(yùn)行,所以我們?yōu)檫\(yùn)行評(píng)估分配了專(zhuān)用節(jié)點(diǎn)。

為了將評(píng)估完全隱藏在訓(xùn)練周期之后,我們使用了空間并行來(lái)加速驗(yàn)證步驟。此外,由于 evaluation 使用同一組圖像,因此這些圖像只加載一次,然后緩存在 GPU 內(nèi)存中。

因?yàn)樵u(píng)估要到培訓(xùn)的三分之一時(shí)間才會(huì)開(kāi)始,所以評(píng)估節(jié)點(diǎn)有足夠的時(shí)間加載、處理和緩存數(shù)據(jù)集,以及初始化所有必需的庫(kù)。

在訓(xùn)練周期結(jié)束時(shí),訓(xùn)練節(jié)點(diǎn)使用 InfiniBand 將模型快速傳輸?shù)皆u(píng)估節(jié)點(diǎn),并繼續(xù)運(yùn)行后續(xù)的訓(xùn)練迭代。傳遞模型參數(shù)后,求值節(jié)點(diǎn)運(yùn)行求值。在評(píng)估結(jié)束時(shí),如果達(dá)到目標(biāo)精度,評(píng)估節(jié)點(diǎn)將與訓(xùn)練節(jié)點(diǎn)通信。

添加的評(píng)估節(jié)點(diǎn)數(shù)量剛好足以將整個(gè)評(píng)估周期隱藏在訓(xùn)練周期之后。

poYBAGJHw32AJHu0AACYNipDJYU231.png

圖 11 。異步評(píng)估計(jì)劃

數(shù)據(jù)加載器

我們通過(guò)兩種方式優(yōu)化了數(shù)據(jù)加載器:優(yōu)化擴(kuò)充和緩存數(shù)據(jù)集。

Augmentations :由于數(shù)據(jù)集的小尺寸, 3D U-Net 需要大量的擴(kuò)充。最昂貴的操作之一是我們稱(chēng)之為“有偏見(jiàn)的作物”。與隨機(jī)裁剪相反,有偏裁剪以給定的概率選擇具有正標(biāo)簽的區(qū)域。這要求每次選擇昂貴的路徑時(shí),都要對(duì)標(biāo)簽上的三維連接組件進(jìn)行大量計(jì)算。為了避免每次加載示例時(shí)都計(jì)算連接的組件,結(jié)果將緩存在主機(jī)中并重用,以便只計(jì)算一次。

數(shù)據(jù)加載 :隨著使用新特性的培訓(xùn)變得更快, I / O 開(kāi)始成為瓶頸。為了緩解這種情況,我們將整個(gè)圖像數(shù)據(jù)集緩存在 GPU 內(nèi)存中。這將從關(guān)鍵數(shù)據(jù)加載程序路徑中移除 PCIe 和 I / O 。當(dāng)圖像從大而高帶寬 GPU 內(nèi)存加載時(shí),標(biāo)簽從 CPU 加載以執(zhí)行增強(qiáng)。

pYYBAGJHw4GAPB9MAAC6Zt5NVKs278.png

圖 12 。 ZFK5 內(nèi)存上的數(shù)據(jù)緩存

通道上次布局支持

因?yàn)?Channels Last 布局對(duì)于卷積內(nèi)核更有效,所以在 MXNet 中添加了對(duì) Channels Last 格式的本機(jī)支持。這避免了模型中需要的任何額外轉(zhuǎn)置,以利用高效的 GPU 內(nèi)核。

優(yōu)化的 cuDNN 內(nèi)核

3du-Net 有多個(gè)編碼器和解碼器層,信道數(shù)很小。使用 256 的典型平鋪大小× 64 對(duì)于這些操作中使用的內(nèi)核,會(huì)產(chǎn)生顯著的分片大小量化效果。為了優(yōu)化這一點(diǎn), cuDNN 添加了一些內(nèi)核,這些內(nèi)核針對(duì)較小的磁貼大小進(jìn)行了優(yōu)化,具有更好的緩存重用性。這有助于 3D-U-Net 實(shí)現(xiàn)更好的計(jì)算利用率。

除了這些優(yōu)化之外, 3du-Net 還受益于優(yōu)化的 BatchNorm + ReLu 激活內(nèi)核。使用 BatchSize 值 1 重復(fù)運(yùn)行 BatchNorm 內(nèi)核以獲得實(shí)例 Norm 功能。在 MXNet 、 CUDA 圖形和 SHARP 中實(shí)現(xiàn)的異步依賴(lài)引擎也顯著提高了性能。

通過(guò)對(duì) 3D U-Net 進(jìn)行一系列優(yōu)化,我們將 DGX 擴(kuò)展到 100 個(gè) A100 節(jié)點(diǎn)( 800 GPU s ),在 80 個(gè)節(jié)點(diǎn)( 640 GPU s )上運(yùn)行訓(xùn)練,在 20 個(gè)節(jié)點(diǎn)( 160 GPU s )上運(yùn)行評(píng)估。與單節(jié)點(diǎn)配置相比, 100 節(jié)點(diǎn)的最大規(guī)模配置獲得了 9 。 7 倍以上的加速比。

目標(biāo)檢測(cè)(輕量級(jí))( SSD

這是輕量 SSD 第四次出現(xiàn)在 MLPerf 中。在這一輪中,評(píng)估時(shí)間表被改為每五個(gè)時(shí)代進(jìn)行一次,從第一個(gè)時(shí)代開(kāi)始。在前幾輪中,評(píng)估計(jì)劃從第 40 個(gè)時(shí)代開(kāi)始。即使有額外的計(jì)算要求,我們也將提交時(shí)間加快了 x1 。 6 以上。

SSD 由許多較小的卷積層組成。如前所述, MXNet 依賴(lài)引擎 CUDA 圖的改進(jìn)以及 SHARP 的啟用對(duì)基準(zhǔn)測(cè)試尤其有影響。

更高效的配置

優(yōu)化評(píng)價(jià)

更高效的配置

深度學(xué)習(xí)模型的訓(xùn)練時(shí)間是一個(gè)多變量函數(shù)。在其最基本的形式中,方程式如下:

latex.php?latex=Train%5C%3B+Time+%3D+Average%5C%3B+Iteration%5C%3B+Time%5C%3B+%5Ccdot%5C%3B+Number%5C%3B+of%5C%3B+Iterations&bg=ffffff&fg=000&s=1&c=20201002

目標(biāo)是最小化

latex.php?latex=Train%5C%3B+Time&bg=ffffff&fg=000&s=0&c=20201002

它和

latex.php?latex=Average%5C%3B+Iteration%5C%3B+Time&bg=ffffff&fg=000&s=0&c=20201002

and

latex.php?latex=Number%5C%3B+of%5C%3B+Iterations&bg=ffffff&fg=000&s=0&c=20201002

是批量大小的函數(shù)。

latex.php?latex=Average%5C%3B+Iteration&bg=ffffff&fg=000&s=0&c=20201002

是單調(diào)非減函數(shù)。批量大小的計(jì)算效率更高,但每次迭代需要更多的時(shí)間。

另一方面,

latex.php?latex=Number%5C%3B+of%5C%3B+Iterations&bg=ffffff&fg=000&s=0&c=20201002

在一定的批量大小下,是一個(gè)單調(diào)的非遞增函數(shù)。更大的批量需要更少的迭代來(lái)收斂,因?yàn)槟P兔看蔚吹礁嗟膱D像。

pYYBAGJHw92AAObJAAAZ-y2fQzI530.png

表 2 。使用不同批量大小收斂所需的迭代次數(shù)

( 1 ) MS-COCO 歷元大小為 117266 張圖像 (2 ) 經(jīng)驗(yàn)值

與我們使用 2048 批量大小的 v0 。 7 提交相比, v1 。 0 批量大小為 3072 ,需要的迭代次數(shù)減少了 22% 。因?yàn)檩^大的迭代只慢了 20% ,結(jié)果是收斂速度快了 8% 。

在本例中,將批處理大小改為 4096 而不是 3072 將導(dǎo)致更長(zhǎng)的訓(xùn)練時(shí)間。迭代次數(shù)減少 11% 并不能彌補(bǔ)每次迭代額外 20% 的運(yùn)行時(shí)間。

優(yōu)化評(píng)價(jià)

評(píng)估可分為三個(gè)階段:

Inference :使用經(jīng)過(guò)訓(xùn)練的模型對(duì)驗(yàn)證數(shù)據(jù)集進(jìn)行預(yù)測(cè)。在 GPU 上運(yùn)行。

Prep : [NEED DESCRIPTION]

Scoring :根據(jù)基本事實(shí)評(píng)估推理結(jié)果。在 CPU 上異步運(yùn)行。

v1 。 0 中的新評(píng)估為基本提交添加了八個(gè)驗(yàn)證周期。更糟糕的是,對(duì) epoch 訓(xùn)練時(shí)間的改進(jìn)意味著得分需要不到 2 秒或 5 個(gè) epoch 的訓(xùn)練時(shí)間。否則,它不會(huì)被完全隱藏,任何訓(xùn)練時(shí)間的改進(jìn)都是毫無(wú)意義的。

為了提高推理時(shí)間,我們保證了推理圖是靜態(tài)的。我們改進(jìn)了非最大值抑制實(shí)現(xiàn),并將用于過(guò)濾負(fù)檢測(cè)的布爾掩碼移到圖的外部。靜態(tài)圖節(jié)省了內(nèi)存重新分配時(shí)間,使訓(xùn)練和推理上下文之間的切換更快。

對(duì)于得分,我們使用 nv-cocoapi ,這是一個(gè) C ++實(shí)現(xiàn)的 cocoapi 和 60X 倍的速度更快。對(duì)于 v1 。 0 ,我們通過(guò)多線程結(jié)果累積、更快的索引排序和緩存基本真相數(shù)據(jù)結(jié)構(gòu),將 nv-cocoapi 的性能提高了 2 倍。

目標(biāo)檢測(cè)(重量級(jí))( Mask R-CNN )

我們通過(guò)以下技術(shù)優(yōu)化了目標(biāo)檢測(cè):

CUDA graphs in PyTorch

刪除同步點(diǎn)

異步求值

數(shù)據(jù)加載器優(yōu)化

ResNet 層與 cuDNN v8 的更好融合

CUDA graphs in PyTorch

深度學(xué)習(xí)框架使用 GPU 加速計(jì)算,但大量代碼仍在 CPU 內(nèi)核上運(yùn)行。 CPU 代碼處理類(lèi)似張量形狀的元數(shù)據(jù),以準(zhǔn)備啟動(dòng) GPU 內(nèi)核所需的參數(shù)。處理元數(shù)據(jù)的成本是固定的,而 GPU 所做的計(jì)算工作的成本與批處理大小正相關(guān)。對(duì)于大批量, CPU 開(kāi)銷(xiāo)占總運(yùn)行時(shí)成本的百分比可以忽略不計(jì)。在小批量時(shí), CPU 開(kāi)銷(xiāo)可能會(huì)大于 GPU 運(yùn)行時(shí)。當(dāng)這種情況發(fā)生時(shí), GPU 在內(nèi)核調(diào)用之間處于空閑狀態(tài)。

此問(wèn)題可以在 Nsight Systems 時(shí)間軸圖上確定。下圖顯示了在繪圖前每 – GPU 批大小為 1 的掩碼 R-CNN 的“主干”部分。綠色部分顯示 CPU 負(fù)載,藍(lán)色部分顯示 GPU 負(fù)載。在這個(gè)配置文件中,您可以看到 CPU 在 100% 負(fù)載時(shí)達(dá)到最大值,而 GPU 大部分時(shí)間處于空閑狀態(tài)。 GPU 內(nèi)核之間有很多空白。

poYBAGJHw4KAKEKkAAB7UurxGr8222.png

圖 13 。遮罩 R-CNN 的右時(shí)間軸圖

CUDA graph 是一個(gè)工具,當(dāng)張量形狀是靜態(tài)的時(shí),它可以自動(dòng)消除 CPU 開(kāi)銷(xiāo)。在第一步中捕獲所有內(nèi)核調(diào)用的完整圖。在隨后的步驟中,整個(gè)圖形通過(guò)一個(gè)操作啟動(dòng),消除了所有的 CPU 開(kāi)銷(xiāo)。 PyTorch 現(xiàn)在支持 CUDA 圖形,我們使用它來(lái)加速 MLPerf 1 。 0 的 Mask R-CNN 。

pYYBAGJHw4OAHZjZAABJ6V6NbLI840.png

圖 14 。 CUDA 圖形優(yōu)化

通過(guò)作圖,我們可以看到 GPU 內(nèi)核被緊密打包, GPU 利用率仍然很高。圖示部分現(xiàn)在以 6 毫秒而不是 31 毫秒的速度運(yùn)行,速度提高了 5 倍。我們主要只是繪制 ResNet 主干,而不是整個(gè)模型。即使在那時(shí),我們看到整個(gè)基準(zhǔn)的提升超過(guò)了 2 倍。

刪除同步點(diǎn)

有許多 PyTorch 模塊使主進(jìn)程等待 GPU 完成之前啟動(dòng)的所有內(nèi)核。這可能對(duì)性能有害,因?yàn)楫?dāng) CPU 可以啟動(dòng)更多內(nèi)核時(shí),它會(huì)處于空閑狀態(tài)。 CPU 可以在低開(kāi)銷(xiāo)段中領(lǐng)先于 GPU ,并開(kāi)始從后續(xù)段啟動(dòng)內(nèi)核。只要總的 CPU 開(kāi)銷(xiāo)小于總的 GPU 內(nèi)核時(shí)間, CPU 就永遠(yuǎn)不會(huì)成為瓶頸,但當(dāng)引入同步點(diǎn)時(shí),瓶頸就會(huì)中斷。而且,具有同步點(diǎn)的模型段不能用 CUDA 圖形表示,因此刪除同步非常重要。

我們?yōu)?mlperf1 。 0 做了一些工作。例如, Trang 。 RangPrm 改寫(xiě)為使用 CUB 而不是推力,因?yàn)楹笳呤峭?C ++模板庫(kù)。這些改進(jìn)在最新的 NGC 容器中提供。

刪除所有同步將 CUDA 圖中的提升從 1 。 6x 提高到 2 。 5x 。

異步求值

我們提交的 mlperf0 。 7 進(jìn)行了異步評(píng)估,但速度不夠快,無(wú)法跟上優(yōu)化后的培訓(xùn)。每個(gè)歷元的評(píng)估時(shí)間為 18 秒,其中 4 秒是完全暴露的時(shí)間。如果不更改評(píng)估代碼,我們的 at-scale 提交的時(shí)間會(huì)慢大約 100 秒。

在三個(gè)評(píng)價(jià)階段中,推理和準(zhǔn)備占了所有的暴露時(shí)間。為了加快推理速度,我們將測(cè)試圖像緩存在 GPU 內(nèi)存中,因?yàn)樗鼈冇肋h(yuǎn)不會(huì)改變。我們將準(zhǔn)備階段移到后臺(tái)進(jìn)程池中,因?yàn)闇y(cè)試數(shù)據(jù)集中的每個(gè)樣本都可以獨(dú)立處理。我們?cè)趦蓚€(gè)背景過(guò)程中同時(shí)對(duì)分割模板和框進(jìn)行評(píng)分。這些優(yōu)化將每個(gè)歷元的計(jì)算時(shí)間減少到了~ 4 秒。

數(shù)據(jù)加載器優(yōu)化

該組件在訓(xùn)練期間加載和增強(qiáng)圖像。在我們提交的 mlperf0 。 7 中,所有數(shù)據(jù)加載工作都由 CPU 內(nèi)核完成。舊的 dataloader 不夠快,無(wú)法跟上優(yōu)化后的培訓(xùn)。為了解決這個(gè)問(wèn)題,我們開(kāi)發(fā)了一個(gè)混合數(shù)據(jù)加載器。

混合數(shù)據(jù)加載器對(duì) CUDA 上的圖像進(jìn)行解碼,然后使用 Torchvision 對(duì) GPU 進(jìn)行圖像增強(qiáng)。為了完全隱藏?cái)?shù)據(jù)加載的代價(jià),我們將 loss 后向調(diào)用移到主訓(xùn)練循環(huán)中的 load next image 調(diào)用。由于 CPU 圖形啟動(dòng), CPU 在丟失向后調(diào)用后空閑了幾毫秒。這是足夠的時(shí)間解碼下一個(gè)圖像。在 GPU 完成反向傳播之后,它們處于空閑狀態(tài),而優(yōu)化器在梯度上進(jìn)行所有減少。在此空閑時(shí)間內(nèi), dataloader 執(zhí)行圖像增強(qiáng)工作。

ResNet 層與 cuDNN v8 的更好融合

ResNet50 的基本構(gòu)造塊是一個(gè)由卷積、批處理范數(shù)和激活函數(shù)組成的三層堆棧。對(duì)于 maskr-CNN ,批處理范數(shù)是凍結(jié)的,這意味著批處理范數(shù)和激活函數(shù)都是可以融合的逐點(diǎn)操作。

在前幾輪中,我們使用 PyTorch JIT fuser 來(lái)融合兩個(gè)逐點(diǎn)操作。多虧了 cuDNN v8 中的新融合引擎,我們通過(guò)將逐點(diǎn)運(yùn)算與卷積融合在一起對(duì)其進(jìn)行了改進(jìn)。 fusion 引擎靈活的 API 還使我們能夠在一個(gè) autograd 函數(shù)下融合所有三個(gè)基本層。這讓我們可以繞過(guò)定影器的限制,在反向傳播中進(jìn)行不對(duì)稱(chēng)融合,以獲得更大的性能提升。

poYBAGJHw4OAOD3DAACSxvWpEq0006.png

圖 15 。 cuDNN 圖形 API 將高級(jí) DL 層融合用例降低為細(xì)粒度的 CUDA 內(nèi)核圖形

pYYBAGJHw4SAF03lAAEqWuUMUl4924.png

圖 16 。細(xì)粒度的 CUDA 內(nèi)核圖被進(jìn)一步轉(zhuǎn)換為一個(gè)高效的張量核融合內(nèi)核

語(yǔ)音識(shí)別( RNN-T )

RNN-T 語(yǔ)音識(shí)別是這一輪 MLPerf 訓(xùn)練中的又一項(xiàng)新任務(wù)。我們使用了以下優(yōu)化:

頂點(diǎn)傳感器損耗

頂點(diǎn)傳感器接頭

序列分裂

批量拆分

用 CUDA 圖進(jìn)行批量評(píng)估

cuDNN v8 中更優(yōu)化的 LSTMs

頂點(diǎn)傳感器損耗

RNN-T 使用一種特殊的損耗函數(shù),我們稱(chēng)之為傳感器損耗函數(shù)。計(jì)算損耗的算法本質(zhì)上是迭代的。由于不規(guī)則的內(nèi)存訪問(wèn)模式和暴露的長(zhǎng)內(nèi)存讀取延遲,簡(jiǎn)單的實(shí)現(xiàn)通常效率低下。

為了克服這個(gè)困難,我們開(kāi)發(fā)了 apex.contrib.transducer.TransducerLoss 。它采用了一種類(lèi)似于對(duì)角線波前的計(jì)算范式來(lái)開(kāi)發(fā)算法中的并行性。共享內(nèi)存和寄存器廣泛用于緩存迭代之間交換的數(shù)據(jù)。 loss 函數(shù)還使用預(yù)取來(lái)隱藏內(nèi)存訪問(wèn)延遲。

頂點(diǎn)傳感器接頭

另一個(gè)經(jīng)常出現(xiàn)在傳感器類(lèi)型網(wǎng)絡(luò)中的組件是傳感器聯(lián)合操作。為了加速這個(gè)操作,我們開(kāi)發(fā)了 apex.contrib.transducer.TransducerJoint 。這個(gè) Apex 擴(kuò)展不僅比其本機(jī)的 PyTorch 擴(kuò)展快,而且還支持輸出打包,減少了后續(xù)層的工作負(fù)載。

圖 17 顯示了頂點(diǎn)傳感器接頭的填料操作。在基線聯(lián)合操作中,由于聯(lián)合操作與輸入填充無(wú)關(guān),因此輸入序列中的填充被轉(zhuǎn)移到輸出。在頂點(diǎn)傳感器聯(lián)合操作中,輸出端的填充被移除,減小了饋送給后續(xù)操作的張量的大小。

poYBAGJHw4WAbCJlAAFUJkYH3kQ975.png

圖 17 。 Apex 傳感器接頭填料操作

序列分裂

為了減少填充物上浪費(fèi)的 LSTM 計(jì)算,我們將批處理分為兩個(gè)階段(圖 18 )。在第一個(gè)過(guò)程中,對(duì)小批量中的所有樣本進(jìn)行評(píng)估,直到特定的時(shí)間步(用黑框括起來(lái))。小批量樣品的一半在第一次通過(guò)時(shí)完成。另一半樣本的剩余時(shí)間步長(zhǎng)(用紅色框括起來(lái))在第二遍中進(jìn)行評(píng)估。用藍(lán)色框括起來(lái)的區(qū)域表示批量拆分的節(jié)省。

pYYBAGJHw4aAflRpAAD4e925PnA095.png

圖 18 。序列分裂

圖 18 中的黑色虛線估計(jì)了 GPU 所看到的工作量。因?yàn)榈诙榈呐幚泶笮p少了一半, GPU 看到的工作負(fù)載大約減少了一半。在 multi- GPU 訓(xùn)練中,通常是最慢的 GPU 限制了訓(xùn)練吞吐量。虛線是從具有大多數(shù)工作負(fù)載的 GPU 中獲得的。

為了減輕這種負(fù)載不平衡,我們采用了一種稱(chēng)為預(yù)排序的技術(shù),即根據(jù)序列長(zhǎng)度對(duì)小批量中的樣本進(jìn)行排序。最長(zhǎng)和最短的序列放在同一個(gè) GPU 上以平衡工作負(fù)載。這背后的直覺(jué)是,具有長(zhǎng)序列的 GPU 可能是瓶頸。因此,短序列也應(yīng)該放在這些 GPU 上,以最大限度地發(fā)揮序列分裂的優(yōu)勢(shì)。

批量拆分

RNN-T 有一個(gè)有趣的網(wǎng)絡(luò)結(jié)構(gòu),其中 LSTM 處理相對(duì)較小的張量,而聯(lián)合網(wǎng)絡(luò)則處理更大的張量。為了使 LSTMs 能夠更有效地以大批量運(yùn)行,同時(shí)不超過(guò) GPU 內(nèi)存容量,我們采用了一種稱(chēng)為批處理拆分的技術(shù)(圖 17 )。我們使用了一個(gè)相當(dāng)大的批量大小,這樣 LSTMs 就獲得了相當(dāng)高的 GPU 利用率。相比之下,聯(lián)合網(wǎng)絡(luò)對(duì)批處理的一部分進(jìn)行操作,并逐個(gè)遍歷這些子批。

在圖 19 中,使用了 2 的批次分割因子。在這種情況下,輸入到 LSTMs 和聯(lián)合網(wǎng)的批量大小分別是 B 和 B / 2 。因?yàn)樵诜聪騻鞑ネ瓿珊?,除了?quán)值的梯度之外,關(guān)節(jié)網(wǎng)絡(luò)生成的所有張量都不再需要,所以可以釋放它們并為循環(huán)中的下一個(gè)子批次創(chuàng)建空間。

poYBAGJHw4aALo-vAADfXH0ZxN0152.png

圖 19 批量拆分

用 CUDA 圖進(jìn)行批量評(píng)估

除了加速訓(xùn)練, RNN-T 的評(píng)估也被仔細(xì)審查。 RNN-T 的評(píng)估本質(zhì)上是迭代的,預(yù)測(cè)網(wǎng)絡(luò)的評(píng)估是逐步進(jìn)行的。批處理 MIG 中的每個(gè)示例在同一時(shí)間步中選擇不同的代碼路徑,具體取決于執(zhí)行結(jié)果。因此,簡(jiǎn)單的實(shí)現(xiàn)會(huì)導(dǎo)致較低的 GPU 利用率和較長(zhǎng)的評(píng)估時(shí)間,與培訓(xùn)本身相當(dāng)。

為了克服這些困難,我們?cè)谠u(píng)估中進(jìn)行了兩類(lèi)優(yōu)化。第一個(gè)優(yōu)化在批處理模式下執(zhí)行評(píng)估,并使用謂詞處理批處理中的不同控制流。第二個(gè)優(yōu)化繪制了主 RNN-T 評(píng)估循環(huán),該循環(huán)由許多短 GPU 核組成。我們還使用循環(huán)展開(kāi)和重疊 CPU – GPU 通信與 GPU 執(zhí)行來(lái)分?jǐn)傁嚓P(guān)的開(kāi)銷(xiāo)。優(yōu)化后的評(píng)估速度比單節(jié)點(diǎn)配置的參考代碼快 100 倍以上,比最大規(guī)模配置快 30 倍以上。

cuDNN v8 中更優(yōu)化的 LSTMs

LSTM 是 RNN-T 的主要構(gòu)造塊。端到端網(wǎng)絡(luò)時(shí)間的很大一部分花在 LSTMs 上。在 cuDNN v8 中, LSTMs 的性能得到了極大的優(yōu)化。例如,將更好的水平融合算法和啟發(fā)式算法應(yīng)用于 LSTM 單元中的 gemm 和 LSTM 層之間的 drop-out ,提高了性能并減少了 drop-out 帶來(lái)的開(kāi)銷(xiāo)。

概括

MLPerf v1 。 0 展示了人工智能領(lǐng)域的不斷創(chuàng)新。 NVIDIA 人工智能平臺(tái)通過(guò)硬件、數(shù)據(jù)中心技術(shù)和軟件的緊密集成,提供領(lǐng)先的性能,以充分發(fā)揮人工智能的潛力。

自第一個(gè) MLPerf 訓(xùn)練基準(zhǔn)啟動(dòng)以來(lái)的過(guò)去兩年半時(shí)間里, NVIDIA 性能提高了近 7 倍。 NVIDIA 平臺(tái)在性能和可用性方面都非常出色,提供了從數(shù)據(jù)中心到邊緣再到云的單一領(lǐng)導(dǎo)平臺(tái)。

所有用于 NVIDIA 提交的軟件都可以從 MLPerf 存儲(chǔ)庫(kù)獲得,以使您能夠重現(xiàn)我們的基準(zhǔn)測(cè)試結(jié)果。我們不斷地將這些最前沿的 MLPerf 改進(jìn)添加到我們的深度學(xué)習(xí)框架容器中,這些容器可以在 NGC 上找到,它是我們的 GPU 優(yōu)化應(yīng)用程序的軟件中心。

關(guān)于作者

Vinh Nguyen 是一位深度學(xué)習(xí)的工程師和數(shù)據(jù)科學(xué)家,發(fā)表了 50 多篇科學(xué)文章,引文超過(guò) 2500 篇。在 NVIDIA ,他的工作涉及廣泛的深度學(xué)習(xí)和人工智能應(yīng)用,包括語(yǔ)音、語(yǔ)言和視覺(jué)處理以及推薦系統(tǒng)。

Sukru Burc Eryilmaz 是 NVIDIA 計(jì)算機(jī)體系結(jié)構(gòu)的高級(jí)架構(gòu)師,他致力于在單節(jié)點(diǎn)和超級(jí)計(jì)算機(jī)規(guī)模上改進(jìn)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的端到端性能。他從斯坦福大學(xué)獲得博士學(xué)位,并從比爾肯特大學(xué)獲得學(xué)士學(xué)位。

Davide Del Testa 是 NVIDIA 汽車(chē)解決方案架構(gòu)師團(tuán)隊(duì)的成員,他支持客戶(hù)構(gòu)建基于 NVIDIA 驅(qū)動(dòng)平臺(tái)的自主駕駛架構(gòu)。在此之前,他是 NVIDIA 的深度學(xué)習(xí)研究實(shí)習(xí)生,在那里他應(yīng)用深度學(xué)習(xí)技術(shù)開(kāi)發(fā) BB8 , NVIDIA 的研究工具。 Davide 擁有應(yīng)用于電信的機(jī)器學(xué)習(xí)博士學(xué)位,他在網(wǎng)絡(luò)優(yōu)化和信號(hào)處理領(lǐng)域采用了學(xué)習(xí)技術(shù)。他在意大利帕多瓦大學(xué)獲得電信工程碩士學(xué)位。

Shar Narasimhan 是 AI 的高級(jí)產(chǎn)品營(yíng)銷(xiāo)經(jīng)理,專(zhuān)門(mén)從事 NVIDIA 的 Tesla 數(shù)據(jù)中心團(tuán)隊(duì)的深度學(xué)習(xí)培訓(xùn)和 OEM 業(yè)務(wù)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4986

    瀏覽量

    103067
  • 數(shù)據(jù)中心
    +關(guān)注

    關(guān)注

    16

    文章

    4778

    瀏覽量

    72129
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    47279

    瀏覽量

    238511
  • MLPerf
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    641
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式和人工智能究竟是什么關(guān)系?

    嵌入式和人工智能究竟是什么關(guān)系? 嵌入式系統(tǒng)是一種特殊的系統(tǒng),它通常被嵌入到其他設(shè)備或機(jī)器中,以實(shí)現(xiàn)特定功能。嵌入式系統(tǒng)具有非常強(qiáng)的適應(yīng)性和靈活性,能夠根據(jù)用戶(hù)需求進(jìn)行定制化設(shè)計(jì)。它廣泛應(yīng)用于各種
    發(fā)表于 11-14 16:39

    《AI for Science:人工智能驅(qū)動(dòng)科學(xué)創(chuàng)新》第6章人AI與能源科學(xué)讀后感

    幸得一好書(shū),特此來(lái)分享。感謝平臺(tái),感謝作者。受益匪淺。 在閱讀《AI for Science:人工智能驅(qū)動(dòng)科學(xué)創(chuàng)新》的第6章后,我深刻感受到人工智能在能源科學(xué)領(lǐng)域中的巨大潛力和廣泛應(yīng)用。這一章詳細(xì)
    發(fā)表于 10-14 09:27

    《AI for Science:人工智能驅(qū)動(dòng)科學(xué)創(chuàng)新》第一章人工智能驅(qū)動(dòng)的科學(xué)創(chuàng)新學(xué)習(xí)心得

    人工智能:科學(xué)研究的加速器 第一章清晰地闡述了人工智能作為科學(xué)研究工具的強(qiáng)大功能。通過(guò)機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等先進(jìn)技術(shù),AI能夠處理和分析海量數(shù)據(jù),發(fā)現(xiàn)傳統(tǒng)方法難以捕捉的模式和規(guī)律。這不僅極大地提高了數(shù)據(jù)處理
    發(fā)表于 10-14 09:12

    浪潮信息AS13000G7榮獲MLPerf? AI存儲(chǔ)基準(zhǔn)測(cè)試五項(xiàng)性能全球第一

    北京2024年9月27日?/美通社/ -- 9月25日,MLCommons協(xié)會(huì)發(fā)布最新MLPerf? Storage v1.0 AI存儲(chǔ)基準(zhǔn)測(cè)試成績(jī)。浪潮信息分布式存儲(chǔ)平臺(tái)AS13000G7表現(xiàn)出
    的頭像 發(fā)表于 09-28 16:46 ?217次閱讀
    浪潮信息AS13000G7榮獲<b class='flag-5'>MLPerf</b>? AI存儲(chǔ)<b class='flag-5'>基準(zhǔn)</b>測(cè)試五項(xiàng)性能全球第一

    risc-v人工智能圖像處理應(yīng)用前景分析

    長(zhǎng)時(shí)間運(yùn)行或電池供電的設(shè)備尤為重要。 高性能 : 盡管RISC-V架構(gòu)以低功耗著稱(chēng),但其高性能也不容忽視。通過(guò)優(yōu)化指令集和處理器設(shè)計(jì),RISC-V可以在處理復(fù)雜的人工智能圖像處理任務(wù)時(shí)表現(xiàn)出色。 三
    發(fā)表于 09-28 11:00

    名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.44】AI for Science:人工智能驅(qū)動(dòng)科學(xué)創(chuàng)新

    ! 《AI for Science:人工智能驅(qū)動(dòng)科學(xué)創(chuàng)新》 這本書(shū)便將為讀者徐徐展開(kāi)AI for Science的美麗圖景,與大家一起去了解: 人工智能究竟幫科學(xué)家做了什么? 人工智能將如何改變我們所生
    發(fā)表于 09-09 13:54

    報(bào)名開(kāi)啟!深圳(國(guó)際)通用人工智能大會(huì)將啟幕,國(guó)內(nèi)外大咖齊聚話(huà)AI

    8月28日至30日,2024深圳(國(guó)際)通用人工智能大會(huì)暨深圳(國(guó)際)通用人工智能產(chǎn)業(yè)博覽會(huì)將在深圳國(guó)際會(huì)展中心(寶安)舉辦。大會(huì)以“魅力AI·無(wú)限未來(lái)”為主題,致力于打造全球通用人工智能領(lǐng)域集產(chǎn)品
    發(fā)表于 08-22 15:00

    FPGA在人工智能中的應(yīng)用有哪些?

    FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)在人工智能領(lǐng)域的應(yīng)用非常廣泛,主要體現(xiàn)在以下幾個(gè)方面: 一、深度學(xué)習(xí)加速 訓(xùn)練和推理過(guò)程加速:FPGA可以用來(lái)加速深度學(xué)習(xí)的訓(xùn)練和推理過(guò)程。由于其高并行性和低延遲特性
    發(fā)表于 07-29 17:05

    Python中的人工智能框架與實(shí)例

    人工智能(AI)領(lǐng)域,Python因其簡(jiǎn)潔的語(yǔ)法、豐富的庫(kù)和強(qiáng)大的社區(qū)支持,成為了最受歡迎的編程語(yǔ)言之一。本文將詳細(xì)介紹Python中的人工智能框架,并通過(guò)具體實(shí)例展示如何使用這些框架來(lái)實(shí)現(xiàn)不同的人工智能應(yīng)用。
    的頭像 發(fā)表于 07-15 14:54 ?1737次閱讀

    Google開(kāi)發(fā)專(zhuān)為視頻生成配樂(lè)的人工智能技術(shù)

    近日,科技巨頭Google旗下的人工智能研究實(shí)驗(yàn)室DeepMind宣布了一項(xiàng)引人注目的技術(shù)突破——V2A技術(shù)(Video to Audio),這是一項(xiàng)專(zhuān)為視頻生成配樂(lè)的人工智能技術(shù)。這項(xiàng)技術(shù)的誕生,標(biāo)志著
    的頭像 發(fā)表于 06-20 11:03 ?511次閱讀

    5G智能物聯(lián)網(wǎng)課程之Aidlux下人工智能開(kāi)發(fā)(SC171開(kāi)發(fā)套件V2)

    5G智能物聯(lián)網(wǎng)課程之Aidlux下人工智能開(kāi)發(fā)(SC171開(kāi)發(fā)套件V2) 課程類(lèi)別 課程名稱(chēng) 視頻課程時(shí)長(zhǎng) 視頻課程鏈接 課件鏈接 人工智能 參賽基礎(chǔ)知識(shí)指引 14分50秒 https
    發(fā)表于 05-10 16:46

    英業(yè)達(dá)推出 P8000IG6 - 為AI和HPC工作負(fù)載的最先進(jìn)平臺(tái)

    / --英業(yè)達(dá)(TPE:2356)是一家全球領(lǐng)先的高性能服務(wù)器制造商,總部位于臺(tái)灣, 其即將推出的?P8000IG6 服務(wù)器可快速、靈活地?cái)U(kuò)展數(shù)據(jù)中心的容量,從而輕松處理最先進(jìn)的人工智能和高性能計(jì)算?(HPC) 工作負(fù)載。 隨著新的人工
    的頭像 發(fā)表于 04-08 16:28 ?598次閱讀

    5G智能物聯(lián)網(wǎng)課程之Aidlux下人工智能開(kāi)發(fā)(SC171開(kāi)發(fā)套件V1)

    課程類(lèi)別 課程名稱(chēng) 視頻課程時(shí)長(zhǎng) 視頻課程鏈接 課件鏈接 人工智能 參賽基礎(chǔ)知識(shí)指引 14分50秒 https://t.elecfans.com/v/25508.html *附件:參賽基礎(chǔ)知識(shí)指引
    發(fā)表于 04-01 10:40

    瑞薩RZ/V2L預(yù)訓(xùn)練的人工智能模型

    RZ/V2L還與RZ/G2L封裝和引腳兼容。這使得RZ/G2L用戶(hù)可輕松升級(jí)至RZ/V2L,以獲得額外的人工智能功能,而無(wú)需修改系統(tǒng)配置,從而保持低遷移成本。
    發(fā)表于 03-21 13:51 ?405次閱讀
    瑞薩RZ/<b class='flag-5'>V</b>2L預(yù)訓(xùn)練<b class='flag-5'>的人工智能</b>模型

    嵌入式人工智能的就業(yè)方向有哪些?

    嵌入式人工智能的就業(yè)方向有哪些? 在新一輪科技革命與產(chǎn)業(yè)變革的時(shí)代背景下,嵌入式人工智能成為國(guó)家新型基礎(chǔ)建設(shè)與傳統(tǒng)產(chǎn)業(yè)升級(jí)的核心驅(qū)動(dòng)力。同時(shí)在此背景驅(qū)動(dòng)下,眾多名企也紛紛在嵌入式人工智能領(lǐng)域布局
    發(fā)表于 02-26 10:17