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

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

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

NVIDIA Hopper GPU上的新cuBLAS12.0功能和矩陣乘法性能

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

人工智能機器學(xué)習(xí)基準測試中相當(dāng)一部分操作是 通用矩陣乘法 ,也稱為 matmul 函數(shù)。 GEMs 也存在于深度學(xué)習(xí)訓(xùn)練的前向和后向通道以及推理中。

GEMM 的突出性使得深度學(xué)習(xí)軟件能夠最大限度地利用用于矩陣乘法的硬件,同時支持幾個關(guān)鍵的 AI 組件。這些成分包括具有偏置和流行激活功能的融合體及其衍生物。

本文探討了 NVIDIA cuBLAS 庫 在里面 CUDA 12.0 重點是最近推出的 FP8 format 、 NVIDIA Hopper 上的 GEM 性能 GPU ,以及新 64 位整數(shù)應(yīng)用程序編程接口 ( API )和新融合等用戶體驗的改進。

在深入了解這些功能之前,簡要概述了當(dāng)前可用的 cuBLAS API 、如何更有效地應(yīng)用每種 API ,以及 cuBLAS 與其他可用的 NVIDIA 矩陣乘法工具的關(guān)系。

確定要使用的 cuBLAS API

cuBLAS 庫是在 NVIDIA CUDA 運行時之上的基本線性代數(shù)子程序( BLAS )的一種實現(xiàn),旨在利用 NVIDIA GPU 進行各種矩陣乘法運算。本文主要討論 cuBLAScuBLASLt API 的新功能。然而, cuBLAS 庫還提供了針對多 GPU 分布式 GEMs 的 cuBLASXt API 。 cuBLASXt API 將于 2023 年在 Early Access 中提供,目標(biāo)是 GEMs 及其設(shè)備內(nèi)融合功能。

表 1 概述了每種 API 的設(shè)計用途以及用戶可以在哪里獲得最佳性能。

API API complexity Called from Fusion support Matrix sizes for maximum performance
cuBLAS
(since CUDA 6.0)
Low Host None Large (global memory)
cuBLASXt (since CUDA 6.0) Low Host None Very Large (multi-GPU, global memory)
cuBLASLt
(since CUDA 10.1)
Medium Host Fixed set Medium (global memory)
cuBLASDx (targeting 2023 EA) Medium/High Device User ops Small (shared memory)

表 1 。各種 cuBLAS 原料藥的比較。通常, API 復(fù)雜度越高, API 越適合內(nèi)核開發(fā)人員.

cuBLAS API

cuBLAS API 在所有三個級別實現(xiàn) NETLIB BLAS 規(guī)范,每個例程最多有四個版本:實數(shù)單精度、實數(shù)雙精度、復(fù)數(shù)單精度和復(fù)數(shù)雙精度,分別帶有 S 、 D 、 C 和 Z 前綴。

對于 BLAS L3 GEMM ,latex.php?latex=D%3D%5Calpha+%2A+op%28A%29+%2A+op%28B%29+%2B+%5Cbeta+%2A+C&bg=transparent&fg=000&s=0&c=20201002,latex.php?latex=%5Calpha&bg=transparent&fg=000&s=0&c=20201002latex.php?latex=%5Cbeta&bg=transparent&fg=000&s=0&c=20201002變量(如主機和設(shè)備引用)有更多可用選項。該 API 還提供了幾個 extensions ,如傳統(tǒng)函數(shù)的批處理和降低/混合精度版本。

cuBLASLt API

cuBLASLt API 是一個比 cuBLAS 更靈活的解決方案,專門為人工智能和機器學(xué)習(xí)中的 GEMM 操作而設(shè)計。它通過以下選項的參數(shù)可編程性提供靈活性:

矩陣數(shù)據(jù)布局

輸入類型

計算類型

結(jié)語

算法實現(xiàn)選擇

啟發(fā)式

一旦用戶確定了預(yù)期 GEM 操作的一組選項,這些選項就可以重復(fù)用于不同的輸入。簡而言之,與 cuBLAS API 相比, cuBLASLt 可以支持復(fù)雜的情況,例如:

latex.php?latex=D%2C+Aux%3D+Epilogue%28%5Calpha+%2A+scale_%7BA%7D+%2A+scale_%7BB%7D+%2A+op%28A%29+%2A+op%28B%29+%2B+%5Cbeta+%2A+scale_%7BC%7D+%2A+C%29&bg=transparent&fg=000&s=0&c=20201002

該案例有多個輸出,是基于變壓器的模型中遇到的一個突出的 GEMM .

為了提供最近的示例, a 和 B 可以采用兩種新的 FP8 格式中的任一種,并在 FP32 中進行乘法和累加。 Epilogue 可以包括 GELU 和偏倚,偏倚在 BF16 或 FP16 中。許多常見的尾聲現(xiàn)在都融入了 matmul 。此外,latex.php?latex=Aux&bg=transparent&fg=000&s=0&c=20201002是一個可選的附加尾聲輸出,用于計算梯度。使用 cuBLASLt 操作 handle type 描述了上述操作和許多類似操作。

NVIDIA 切割機和 GEMS

作為最著名的開源 NVIDIA 庫之一, NVIDIA CUTLASS 還為 NVIDIA GPU 上的 GEMM (和卷積)提供 CUDA C ++和 Python 抽象,并在設(shè)備、塊、扭曲和線程級別提供原語。 CUTRASS 的一個優(yōu)點是,用戶可以專門為其所需范圍編譯 GEMs ,而無需像 cuBLAS 庫那樣加載更大的二進制文件。

當(dāng)然,這會帶來性能上的權(quán)衡,因為需要大量的努力來為每個單獨的用例找到和實例化最佳內(nèi)核。 cuBLAS 庫通過廣泛訓(xùn)練的啟發(fā)式方法,在廣泛的問題范圍內(nèi)提供最大的性能。

事實上,對于許多用例和數(shù)據(jù)類型, cuBLAS 可能包括從 CULASS 實例化的幾個內(nèi)核。通常, cuBLAS 使用各種內(nèi)核源,以確保在應(yīng)用程序之間更均勻地實現(xiàn)最大性能。

NVIDIA Hopper 上的 FP8 支持

首次在 CUDA 18.1 中引入, FP8 是 16 位浮點類型的自然發(fā)展,減少了 神經(jīng)網(wǎng)絡(luò)訓(xùn)練的記憶和計算要求 。此外,由于其對實數(shù)的非線性采樣,與 int8 相比, FP8 在推理方面也具有優(yōu)勢。
FP8 由兩種編碼 E4M3 和 E5M2 組成,其中名稱明確表示指數(shù)( E )和尾數(shù)( M )位數(shù),符號位隱含。在 CUDA C ++中,這些編碼公開為 __nv_fp8_e4m3 和 __nv_fp8_e5m2 類型。 NVIDIA Hopper Tensor Core 支持 FP16 和 FP32 累積的 FP8 矩陣產(chǎn)品。

在 CUDA 12.0 (以及 CUDA 11.8 )中, cuBLAS 提供了多種 matmul 操作,支持具有 FP32 累積的 both encodings 。(有關(guān)完整列表,請參見 cuBLAS 文檔 .) FP8 matmul 操作還支持附加的融合操作,這些操作對于使用 FP8 進行訓(xùn)練和推理非常重要,包括:

除了傳統(tǒng)的 alpha 和 beta 外, A 、 B 、 C 和 D 矩陣的每矩陣比例因子

輸出矩陣的絕對最大值計算

common-GEMM-in-transformers-diagram.png 圖 2 :變壓器中常見的 GEM 示意圖,帶有尾聲、縮放因子和 cuBLASLt API 支持的多個輸出

latex.php?latex=D_%7Btemp%7D%2C+Aux_%7Btemp%7D+%3D+Epilogue%28%5Calpha+%2A+scale_%7BA%7D+%2A+scale_%7BB%7D+%2A+op%28A%29+%2A+op%28B%29+%2B+%5Cbeta+%2A+scale_%7BC%7D+%2A+C%29&bg=transparent&fg=000&s=0&c=20201002

latex.php?latex=amax_%7BD%7D+%3D+max%28%5Cvert+D_%7Btemp%7D+%5Cvert%29&bg=transparent&fg=000&s=0&c=20201002

latex.php?latex=amax_%7BAux%7D+%3D+max%28%5Cvert+Aux_%7Btemp%7D+%5Cvert%29&bg=transparent&fg=000&s=0&c=20201002

latex.php?latex=D+%3D+scale_%7BD%7D+%2A+D_%7Btemp%7D&bg=transparent&fg=000&s=0&c=20201002

latex.php?latex=Aux+%3D+scale_%7BAux%7D+%2A+Aux_%7Btemp%7D&bg=transparent&fg=000&s=0&c=20201002

latex.php?latex=scale_%7BA%7D&bg=transparent&fg=000&s=0&c=20201002、latex.php?latex=scale_%7BB%7D&bg=transparent&fg=000&s=0&c=20201002latex.php?latex=scale_%7BC%7D&bg=transparent&fg=000&s=0&c=20201002

請注意,所有比例因子都是乘法應(yīng)用的。這意味著有時需要根據(jù)應(yīng)用的上下文使用縮放因子或其倒數(shù)。縮放因子和矩陣之間的乘法的特定順序無法保證。

cuBLAS 12.0 performance on NVIDIA H100 GPU

我們比較了 H100 PCIe 和 SXM (預(yù)覽版)與 A100 ( PCIe )上 FP16 、 BF16 和 FP8 GEMM 在三種情況下的基本時鐘性能: cuBLAS 庫對于大矩陣大小的峰值性能,以及 MLPerf 和 NVIDIA 深度學(xué)習(xí)示例 中存在的 GEMM 。

大型 GEMM 表現(xiàn)出較大的算術(shù)強度,因此受到計算限制。當(dāng)標(biāo)準化為 A100 時,加速因子接近于 GPU 對之間基礎(chǔ)數(shù)據(jù)類型的峰值性能比率。對于計算綁定的 FP16 GEMM , cuBLAS 庫在 H100 SXM 上實現(xiàn)了相對于 A100 的三倍加速。

另一方面, MLPerf 和 NVIDIA DL 示例由跨越一系列算術(shù)強度的 GEMM 組成。有些距離計算范圍較遠,因此表現(xiàn)出比大型 GEMs 更小的加速。對于 MLPerf 和 NVIDIA DL 示例中的 GEMs , cuBLAS 庫在 H100 SXM 上分別實現(xiàn)了 2.7 倍和 2.2 倍的加速。

在 MLPerf 和 NVIDIA DL 示例中,通過 H100 ( PCIe 和 SXM ) GPU 上的 cuBLASLt 標(biāo)準化為 A100 PCIe GPU ,實現(xiàn) FP16 矩陣乘法和 GEMM 的加速。通過將圖形時鐘鎖定到每個 GPU 的基本時鐘來完成測量。

為了比較 H100 上的 FP8 和 BF16 性能,我們選擇 A100 上的 BF16 作為基線。之所以選擇此選項,是因為 FP8 支持僅在 NVIDIA Hopper 架構(gòu)上可用。與 A100 PCIe 上的 BF16 相比, cuBLAS 庫在 H100 SXM 上為 BF16 和 FP8 提供了近 2.8 倍的加速。

cuBLASLt-speedup-H100-for-BF16-and-FP8-2.png 圖 4 。通過 H100 ( PCIe 和 SXM ) GPU 上的 cuBLASLt 實現(xiàn)加速, BF16 和 FP8 矩陣乘法標(biāo)準化為 A100 80 GB PCIe GPU 。通過將圖形時鐘鎖定到每個 GPU 的基本時鐘來完成測量。

NVIDIA Hopper 架構(gòu)工作空間要求

H100 原生內(nèi)核增加了對工作空間大小的需求。因此,強烈建議為 cuBLASLt 調(diào)用或使用 cublasSetWorkspace 時提供至少 32 MiB ( 33554432 B )的工作空間。

cuBLAS 用戶體驗的改進

cuBLAS 12.0 啟用了新的 FP8 和 FP16 / BF16 融合外延。在 NVIDIA Hopper 上, FP8 融合現(xiàn)在提供偏置( BF16 和 FP16 )、 ReLU 和 GELU ,以及輔助輸出緩沖器和輔助輸出緩沖器。新的 FP16 融合器還可用于 NVIDIA Hopper 的偏置、 ReLU 和 GELU 、 dBias 和 dReLU 。對于 NVIDIA Ampere 架構(gòu),單核、更快的 BF16 融合(帶有偏置和 GELU )以及 dBias 和 dGELU 現(xiàn)在已經(jīng)公開。

Heuristics cache 允許將 matmul 問題映射到先前通過啟發(fā)式選擇的內(nèi)核。這有助于減少重復(fù) matmul 問題的主機端開銷。

cuBLAS 12.0 擴展了 cuBLAS API ,以支持 64 位整數(shù)問題大小、前導(dǎo)維數(shù)和向量增量。這些新函數(shù)與 32 位整數(shù)對應(yīng)函數(shù)具有相同的 API ,不同之處在于它們的名稱中有_64后綴,并將相應(yīng)的參數(shù)聲明為int64_t。

例如,對于經(jīng)典的 32 位整數(shù)函數(shù):

cublasStatus_t cublasIsamax( cublasHandle_t handle, int n, const float *x, int incx, int *result);

64 位整數(shù)對應(yīng)項是:

cublasStatus_t cublasIsamax_64( cublasHandle_t handle, int64_t n, const float *x, int64_t incx, int64_t *result);

性能是 cuBLAS 的主要關(guān)注點,因此當(dāng)傳遞給 64 位整數(shù) API 的參數(shù)符合 32 位范圍時,庫將使用與用戶調(diào)用 32 位整數(shù) API 相同的內(nèi)核。要嘗試新的 API ,遷移應(yīng)該像向 cuBLAS 函數(shù)添加_64后綴一樣簡單,這要歸功于 C / C ++將int32_t值自動轉(zhuǎn)換為int64_t。

cuBLAS 12.0 和 NVIDIA Hopper GPU

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

    關(guān)注

    14

    文章

    4994

    瀏覽量

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

    關(guān)注

    28

    文章

    4743

    瀏覽量

    128996
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    30998

    瀏覽量

    269304
收藏 人收藏

    評論

    相關(guān)推薦

    NVIDIA火熱招聘GPU性能計算架構(gòu)師

    這邊是NVIDIA HR Allen, 我們目前在上海招聘GPU性能計算架構(gòu)師(功能驗證)的崗位,有意向的朋友歡迎發(fā)送簡歷到 allelin@nv
    發(fā)表于 09-01 17:22

    NVIDIA-SMI:監(jiān)控GPU的絕佳起點

    nvidia-smi可執(zhí)行文件位于虛擬機管理程序。如果在同一部署中您選擇在GPU使用作為傳遞,那么GPU正在尋找訪客
    發(fā)表于 09-04 15:18

    Nvidia GPU風(fēng)扇和電源顯示ERR怎么解決

    問題最近在Ubuntu使用Nvidia GPU訓(xùn)練模型的時候,如果機器鎖屏一段時間再打開的時候鼠標(biāo)非??D,或者說顯示界面非??D,使用nvidia-smi查看發(fā)現(xiàn),訓(xùn)練模型的
    發(fā)表于 12-30 06:44

    在Ubuntu使用Nvidia GPU訓(xùn)練模型

    問題最近在Ubuntu使用Nvidia GPU訓(xùn)練模型的時候,沒有問題,過一會再訓(xùn)練出現(xiàn)非??D,使用nvidia-smi查看發(fā)現(xiàn),顯示GPU
    發(fā)表于 01-03 08:24

    Arm Neoverse NVIDIA Grace CPU 超級芯片:為人工智能的未來設(shè)定步伐

    和數(shù)據(jù)吞吐量進行優(yōu)化的服務(wù)器和數(shù)據(jù)中心人工智能和機器學(xué)習(xí) (ML) 的需求。否則,人工智能所需的成本、電力和碳將開始超過收益。NVIDIA 率先使用 GPU 來提高數(shù)據(jù)中心中 HPC 和 AI 的性能
    發(fā)表于 03-29 14:40

    探求NVIDIA GPU極限性能的利器

    1、探求 NVIDIA GPU 極限性能的利器  在通常的 CUDA 編程中,用戶主要通過 CUDA C/C++ 或 python 語言實現(xiàn) CUDA 功能的調(diào)用。在
    發(fā)表于 10-11 14:35

    Adreno GPU 矩陣乘法——第1講:OpenCL優(yōu)化

    Adreno GPU架構(gòu),用于計算和加速重要線性代數(shù)算法,包括GPU矩陣乘法。 由于近來依賴于卷積的深度學(xué)習(xí)引起廣泛關(guān)注,
    發(fā)表于 09-18 19:15 ?1825次閱讀

    NVIDIA下下代GPU核心架構(gòu)將是Hopper

    來自國外的最新爆料稱,NVIDIA的下一代GPU核心架構(gòu)是Ampere(安培),下下代將是Hopper,用于紀念Grace Hopper(格蕾絲·赫柏)。
    發(fā)表于 06-12 15:53 ?1984次閱讀

    NVIDIA獲得Hopper商標(biāo)申請,傳聞的Hopper GPU要來了?

    盡管AMD已經(jīng)推出了7nm工藝、RDNA架構(gòu)的新一代Navi家族顯卡,但是NVIDIA在高端GPU市場上的地位依然無可動搖,12nm工藝的圖靈Turing顯卡在性能及能效還是占據(jù)上風(fēng)
    的頭像 發(fā)表于 12-10 10:44 ?2038次閱讀

    NVIDIA下一代GPU曝光:5nm Lovelace、Hopper被延后

    圖靈(Turing)和安培(Ampere)之后,很早就有爆料NVIDIA的下一代GPU將以“Hopper(赫柏)”知名,Hopper被譽為編譯之母,是偉大的女性程序員。 不過,爆料好手
    的頭像 發(fā)表于 12-21 18:07 ?1950次閱讀

    GE完成XA100循環(huán)發(fā)動機測試 NVIDIA發(fā)布Hopper GPU架構(gòu)

    今日在 GTC 發(fā)布的 NVIDIA Hopper GPU 架構(gòu)利用全新 DPX 指令,將動態(tài)編程速度提高多達 40 倍。動態(tài)編程是一種應(yīng)用于基因組學(xué)、量子計算、路線優(yōu)化等領(lǐng)域算法中
    的頭像 發(fā)表于 03-25 16:28 ?1990次閱讀

    NVIDIA發(fā)布最新Hopper架構(gòu)的H100系列GPU和Grace CPU超級芯片

    今日凌晨,NVIDIA(英偉達)發(fā)布了基于最新Hopper架構(gòu)的H100系列GPU和Grace CPU超級芯片!
    的頭像 發(fā)表于 03-26 09:07 ?2908次閱讀

    關(guān)于NVIDIA H100 GPU的問題解答

    今年的 GTC22 NVIDIA 發(fā)布其首款基于 Hopper 架構(gòu)的 GPUNVIDIA H100。
    的頭像 發(fā)表于 07-18 10:35 ?1828次閱讀

    NVIDIA cuBLAS庫加速BLAS的GPU設(shè)計實現(xiàn)

    cuBLASMg 提供了先進的多 GPU 矩陣乘法,您可在多臺設(shè)備間以 2D 塊循環(huán)方式分發(fā)每個矩陣。cuBLASMg 目前已加入 CUDA 數(shù)學(xué)庫搶先體驗計劃。
    的頭像 發(fā)表于 08-07 15:46 ?1543次閱讀

    NVIDIA即將推出首批基于開創(chuàng)性 NVIDIA Hopper 架構(gòu)的產(chǎn)品和服務(wù)

    NVIDIA 于今日宣布 NVIDIA H100 Tensor Core GPU 全面投產(chǎn),NVIDIA 全球技術(shù)合作伙伴計劃于 10 月推出首批基于開創(chuàng)性
    的頭像 發(fā)表于 09-22 10:45 ?1155次閱讀