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

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

3天內不再提示

百度智算峰會精彩回顧:視覺大模型訓練與推理優(yōu)化

NVIDIA英偉達 ? 來源:未知 ? 2022-12-29 00:10 ? 次閱讀

在昨日舉行的 “2022 百度云智峰會·智算峰會” 上,百度智能云發(fā)布國內首個全棧自研的 AI 基礎設施 “百度 AI 大底座”,引發(fā)行業(yè)的廣泛關注。其中,百度百舸·AI 異構計算平臺作為 AI IaaS 層的重要構成,是 AI 大底座堅實的基礎設施。百度百舸·AI 異構計算平臺整合了百度自研的 AI 芯片 “昆侖芯”,在 AI 計算、存儲、加速、容器方面進行系統(tǒng)優(yōu)化,發(fā)揮算力的最佳性能和效率。

在本次峰會上,NVIDIA GPU 計算專家陳庾分享了以 “視覺大模型訓練與推理優(yōu)化” 為題的演講,以 Swin Transformer 模型為例,介紹了 NVIDIA 在視覺大模型訓練與推理優(yōu)化上的探索和實踐經(jīng)驗,包括在 Swin Transformer 的訓練和推理上采用到的加速技巧以及對應的加速效果。這些加速方法目前已經(jīng)應用到百度百舸·AI 異構計算平臺的 AIAK 加速功能中,助力各行業(yè)客戶的 AI 業(yè)務加速落地。

以下為演講內容概要。

視覺大模型簡介:Swim Transformer

32acaef2-86c8-11ed-bfe3-dac502259ad0.png

在介紹 Swin Transformer 之前,我們可以先回顧一下 Vision Transformer (ViT) 的模型結構。如左圖所示,ViT 會將一個圖像分割成一系列的圖像塊(patch),然后通過基于 Transformer 的編碼器對這一系列圖像塊進行編碼,最后得到可用于分類等任務的特征。

而 Swin Transformer,它引入了 window attention 的概念,不同于 ViT 對整個圖像進行注意力計算(attention)。Swin Transformer 會先將圖像劃分成若干個窗口(window),然后僅對窗口內部的圖像塊進行對應的注意力計算,從而減少計算量。為了彌補窗口帶來的邊界問題,Swin Transformer 進一步引入 window shift 的操作。同時為了使得模型有更豐富的位置信息,Swin Transformer 還在注意力計算時引入了 relative position bias。

在 Swin Transformer 的網(wǎng)絡結構中,我們也可以看到, Swin Transformer 被劃分為多個階段(stage),其中每個階段的分辨率是不一樣的,從而形成了一個分辨率金字塔,這樣也使得每個階段的計算復雜程度也逐漸降低。每個階段中對應若干個 transformer block。

接下來,我們從具體操作的角度來對 Swin Transformer 進行算子的劃分??梢钥吹剑粋€ transformer block 中涉及到三大部分,第一部分是如 window shift、partition、reverse 的一些窗口相關的操作,第二部分是注意力計算,第三部分是 FFN 計算。而 attention 和 FFN 部分又可以進一步細分為若個算子,最終如圖所示,我們可以將整個模型細分為幾十個算子的組合。這樣的算子劃分,對于我們進行性能分析,定位性能瓶頸以及開展加速優(yōu)化而言,都是非常重要的。

32e27ab4-86c8-11ed-bfe3-dac502259ad0.png

視覺大模型 Swim Transformer 的訓練加速

接下來,介紹 NVIDIA 在 Swim Transformer 模型訓練加速上進行的優(yōu)化工作。對于 Swin Transformer 而言,我們一般采用數(shù)據(jù)并行的方式進行多 GPU 訓練,我們發(fā)現(xiàn)卡間通訊的開銷占比會相對較少,所以在這里,我們優(yōu)先對單 GPU 上的計算瓶頸進行優(yōu)化。

32f7f90c-86c8-11ed-bfe3-dac502259ad0.png

首先,我們通過 nsight system 性能分析工具來看一下整個 baseline 的性能表現(xiàn)。左圖所示的是 FP32 的 baseline,可以看到它的 GPU 利用率是很高的,而其中占比最高的是矩陣乘法相關的 kernel。

那么對于矩陣乘法而言,我們的一個優(yōu)化手段,就是充分利用 tensor core 進行加速,可以考慮直接采用 tf32 tensor core 或者在混合精度下采用 fp16 tensor core。在這里,我們采用了混合精度的方案,可以看到右圖中,矩陣乘法的 kernel 由于采用了 fp16 tensor core,其耗時占比有了明顯下降。此外,采用混合精度的方式,我們也可以在 kernel io 上取得一定的收益。整體而言,在 Swin-Large 模型上,通過混合精度的方式,我們可以取得了 1.63 倍的吞吐提升。

下一個優(yōu)化方案是算子融合。算子融合一般而言可以為我們帶來兩個好處:一個是減少 kernel launch 的開銷。如左圖所示,兩個 cuda kernel 的執(zhí)行需要兩次 launch,那樣可能會導致 kernel 之間存在一定的空隙,使得 GPU 空閑。

如果我們將兩個 cuda kernel 融合成一個 cuda kernel,一方面節(jié)省了一次 launch,同時也可以避免 gap 的產(chǎn)生。另外一個好處是減少了 global memory 的訪問,因為 global memory 的訪問是非常耗時的。而兩個獨立的 cuda kernel 之間要進行結果傳遞,都需要通過 global memory,將兩個 cuda kernel 融合成一個 kernel,我們就可以在寄存器或者 shared memory 上進行結果傳遞,從而避免了一次 global memory 寫和讀,從而提升性能。

對于算子融合,我們第一步,是采用現(xiàn)成的 apex 庫來進行 Layernorm 和 Adam 中操作的融合??梢钥赐ㄟ^簡單的指令替換,我們可以使能 apex 的 fused layernorm 和 fused Adam,從而使得加速效果從 1.63 倍提升至 2.11 倍。

除了利用現(xiàn)有的 apex 庫,NVIDIA 也進行了手工的融合算子開發(fā)。這里展示的是,我們針對 Swin Transformer 特有的 window 相關操作,如 window partition、shift、merge 等進行的融合算子開發(fā)。可以看到,通過引入我們的定制化融合算子,可以將加速比進一步提升至 2.19 倍。

接下來展示的是,NVIDIA 對 mha 部分的融合工作。Mha 部分是 transformer 模型中一個占比很大的模塊,因此對它的優(yōu)化往往可以帶來較大的加速效果。從圖中可以看到,在沒有進行算子融合之前,mha 部分的操作占比為 37.69%,其中包括了不少 elementwise 的 kernel。我們通過將相關操作融合成一個獨立的 fmha kernel,從而將加速比進一步提升 2.85 倍。

上述是我們在單卡上取得的訓練加速效果。我們再來看一下單機 8 卡的訓練情況,可以看到,通過上述優(yōu)化,我們可以將訓練吞吐從 1,612 提升至 3,733,取得 2.32 倍的加速。

3316be6e-86c8-11ed-bfe3-dac502259ad0.png

視覺大模型 Swim Transformer 的推理加速

接下來,介紹 NVIDIA 在 Swim Transformer 模型推理加速上進行的優(yōu)化工作。

跟訓練一樣,推理的加速離不開算子融合這一方案。不過相對于訓練而言,在推理上進行算子融合有兩個好處:一,推理上的算子融合不需要考慮反向,所以 kernel 開發(fā)過程中不需要考慮保存計算梯度所需要的中間結果;二,推理過程允許預處理,我們可以對一些只需要一次計算便可重復使用的操作,提前算好,保留結果,每次推理時直接調用從而避免重復計算。

在推理側,NVIDIA 進行了不少算子融合,在這里挑選了兩個加速效果比較明顯的算子進行介紹。

首先是 mha 部分的算子融合,我們將 position bias lookup 這一操作提前到預處理部分,從而避免每次推理時都進行 lookup,然后將 batch gemm、softmax、batch gemm 融合成一個獨立的 fmha kernel??梢钥吹剑?strong>融合后,該部分取得了 10 倍的加速,而端到端也取得了 1.58 倍的加速。

另一個算子融合是 QKV gemm + bias 的融合,gemm 和 bias 的融合是一個十分常見的融合手段。在這里為了配合我們前面提到的 fmha kernel,我們需要對 weight 和 bias 提前進行格式上的變換,這種提前變換也體現(xiàn)了上文提到的,推理上進行算子融合的靈活性。最后,通過 QKV gemm+bias 的融合,我們可以進一步取得 1.1 倍的端到端加速。

除算子融合以外,我們使用了矩陣乘法 padding 的優(yōu)化手段。在 Swin Transformer 的計算中,有時候我們會遇到主維為奇數(shù)的矩陣乘法,這時候并不利于我們的矩陣乘法 kernel 進行向量化讀寫,從而使得 kernel 的運行效率變低。這時候我們可以考慮對參與運算的矩陣主維進行 padding 操作,使其變?yōu)?8 的倍數(shù),這樣一來,矩陣乘法 kernel 就可以以 alignment=8,一次讀寫 8 個元素的方式來進行向量化讀寫,提升性能。

如下表所示,我們將 n 從 49 padding 到 56 后,矩陣乘法的 latency 從 60.54us(微秒) 下降為 40.38us,取得了 1.5 倍的加速比。

33317920-86c8-11ed-bfe3-dac502259ad0.png

下一個優(yōu)化手段,是巧用 half2 或者 char4 這樣的數(shù)據(jù)類型。

以 half2 為例,可以帶來以下三個好處:

一,向量化讀寫可以提升顯存的帶寬利用率并降低訪存指令數(shù)。如右圖所示,通過 half2 的使用,訪存指令減少了一半,同時 memory 的 SOL 也有顯著提升。

二, 結合 half2 專有的高吞吐的數(shù)學指令,可以減低 kernel 的時延。

三,在進行 reduction 時,采用 half2 數(shù)據(jù)類型意味著一個 cuda 線程同時處理兩個元素,可以有效減少空閑的線程數(shù)。最終通過使用 half2,我們可以觀察到圖示的 addBiasResidual 這一個 kernel,latency 從 20.96us 下降為 10.78us,加速 1.94 倍。

下一個優(yōu)化手段,是巧用寄存器數(shù)組。在我們進行 layernorm 或者 softmax 等 Transformer 模型常見的算子優(yōu)化時,我們經(jīng)常需要在一個 kernel 中多次使用同一個輸入數(shù)據(jù),那么相對于每次都從 global memory 讀取,我們可以采用寄存器數(shù)組來緩存數(shù)據(jù),從而避免重復讀取 global memory。

由于寄存器是每個 cuda 線程獨占的,所以在進行 kernel 設計時,我們需要提前設定好每個 cuda 線程所需要緩存的元素個數(shù),從而開辟對應大小的寄存器數(shù)組,并且在分配每個 cuda 線程所負責元素時,需要確保我們可以做到合并訪問。

如右圖所示,當我們有 8 個線程時,0 號線程可以處理 0 號元素,當我們有 4 個線程是,0 號線程則處理 0 號和 4 號元素,如此類推。我們一般建議可以采用模板函數(shù)的方式,通過模板參數(shù)來控制每個 cuda 線程的寄存器數(shù)組大小。

33517478-86c8-11ed-bfe3-dac502259ad0.png

此外,在使用寄存器數(shù)組時,需要保證我們的下標是常量,如果是循環(huán)變量作為下標,我們應該盡量保證可以進行循環(huán)展開,這樣可以避免編譯器將數(shù)據(jù)放到了時延很高的 local memory 中,如圖所示,我們在循環(huán)條件中添加限制,通過 ncu 報告可以看到,避免了 local memory 的使用。

最后一個我想介紹優(yōu)化手段是 INT8 量化。INT8 量化是推理加速非常重要的加速手段,對于 Transformer based 的模型而言,INT8 量化往往可以帶來不錯的加速效果。

而對于 Swin Transformer 來說,通過結合合適的 PTQ 或 QAT 量化方案,可以在取得良好加速效果的同時,保證量化精度。通過 QAT,我們可以保證精度損失在千分之 5 以內。

而在 PTQ 那一列,我們可以看到 swin large 的掉點比較嚴重。我們可以通過禁用 FC2 和 PatchMerge 中的部分量化結點,來進一步提升量化精度,這其實就是一個性能和精度的 tr 平衡了。

接下來介紹 NVIDIA 在推理側取得的加速效果。

337cd258-86c8-11ed-bfe3-dac502259ad0.png

左上圖優(yōu)化后 跟 pytorch 的時延對比,右下圖為優(yōu)化后 FP16 下跟 pytorch 以及 INT8 優(yōu)化跟 FP16 優(yōu)化的加速比??梢钥吹?,通過優(yōu)化,在 FP16 精度上,我們可以取得,相對于 pytorch 2.82x~7.34x 的加速,結合 INT8 量化,我們可以在此基礎上進一步取得 1.2x~1.5x 的加速。

總結:視覺大模型 Swim Transformer 訓練與推理加速技巧

本次分享中我們介紹了一系列訓練與推理加速技巧,其中包括 :

一,混合精度訓練、低精度推理,使用更高性能的 Tensor Core 進行計算矩陣乘法或卷積計算;

二、算子融合;

三、cuda kernel 優(yōu)化技巧 :如矩陣補零,向量化讀寫,巧用寄存器數(shù)組等。

結合上述優(yōu)化技巧,加速效果:

在訓練上,以 Swin-Large 模型為例,取得了單卡 ~2.85x 的加速比,8 卡 2.32x 的加速比;

在推理上,以 Swin-tiny 模型為例,在 FP16 精度下取得了 2.82x - 7.34x 的加速比,結合 INT8 量化,進一步取得 1.2x - 1.5x 的加速比。

上述介紹的視覺大模型訓練與推理的加速方法,已經(jīng)在百度百舸·AI 異構計算平臺的 AIAK 加速功能中實現(xiàn)。


原文標題:百度智算峰會精彩回顧:視覺大模型訓練與推理優(yōu)化

文章出處:【微信公眾號:NVIDIA英偉達】歡迎添加關注!文章轉載請注明出處。


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

    關注

    22

    文章

    3718

    瀏覽量

    90647
  • 大模型
    +關注

    關注

    2

    文章

    2265

    瀏覽量

    2343

原文標題:百度智算峰會精彩回顧:視覺大模型訓練與推理優(yōu)化

文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    百度舸AI計算平臺4.0震撼發(fā)布

    在2024年百度云智大會的璀璨舞臺上,百度智能云重磅推出了舸AI異構計算平臺的全新力作——4.0版本。此次升級,標志著百度在AI基礎設施領域邁出了堅實的一步,致力于為行業(yè)提供更為強大
    的頭像 發(fā)表于 09-26 14:46 ?354次閱讀

    摩爾線程和滴普科技完成大模型訓練推理適配

    近日,摩爾線程與滴普科技宣布了一項重要合作成果。摩爾線程的夸娥(KUAE)千卡智集群與滴普科技的企業(yè)大模型Deepexi已完成訓練推理適配,共同實現(xiàn)了700億參數(shù)LLaMA2大語言
    的頭像 發(fā)表于 05-30 10:14 ?480次閱讀

    摩爾線程千卡智集群與滴普企業(yè)大模型已完成訓練推理適配

    近日,摩爾線程與國內領先的數(shù)據(jù)智能服務商滴普科技共同宣布,摩爾線程夸娥(KUAE)千卡智集群與滴普企業(yè)大模型Deepexi已完成訓練推理適配。
    的頭像 發(fā)表于 05-29 10:28 ?401次閱讀
    摩爾線程千卡智<b class='flag-5'>算</b>集群與滴普企業(yè)大<b class='flag-5'>模型</b>已完成<b class='flag-5'>訓練</b>及<b class='flag-5'>推理</b>適配

    百度文心大模型擴展合作領域

    百度創(chuàng)始人兼CEO李彥宏在2024年第一季度財報電話會上宣布,文心大模型API在繼與中國三星、榮耀成功合作后,本季度再度實現(xiàn)重要突破。小米、OPPO、vivo等主流手機廠商已全面接入文心大模型API,此舉標志著
    的頭像 發(fā)表于 05-17 11:17 ?502次閱讀

    百度文心大模型日處理Tokens文本已達2490億

    近日,國內外AI領域迎來新一輪技術革新。百度作為行業(yè)領軍者,率先發(fā)布了大模型的最新進展及相關應用。百度指出,閉源大模型結合公有云已成為全球AI市場的主流趨勢。
    的頭像 發(fā)表于 05-16 10:08 ?360次閱讀

    李彥宏:開源模型將逐漸滯后,文心大模型提升訓練推理效率

    李彥宏解釋道,百度自研的基礎模型——文心 4.0,能夠根據(jù)需求塑造出適應各類場景的微型版模型,并支持精細調整以及后預訓練。相較于直接使用開源模型
    的頭像 發(fā)表于 04-16 14:37 ?396次閱讀

    【機器視覺】歡創(chuàng)播報 | 百度智能云發(fā)布千帆大模型一體機

    謝廣軍表示,千帆大模型一體機是軟硬一體化的企業(yè)專屬大模型解決方案,提供了開箱即用的大模型工具鏈。在核心功能方面,千帆大模型一體機預置了百度
    的頭像 發(fā)表于 04-11 10:49 ?536次閱讀
    【機器<b class='flag-5'>視覺</b>】歡創(chuàng)播報 | <b class='flag-5'>百度</b>智能云發(fā)布千帆大<b class='flag-5'>模型</b>一體機

    優(yōu)必選宣布人形機器人Walker S接入百度文心大模型

    優(yōu)必選宣布人形機器人Walker S接入百度文心大模型,共同探索中國AI大模型+人形機器人的應用。
    的頭像 發(fā)表于 04-07 10:17 ?829次閱讀

    百度智能云正式發(fā)布了《百度智能云水業(yè)大模型白皮書》

    3月28日,由E20環(huán)境平臺主辦的2024(第二十二屆)水業(yè)戰(zhàn)略論壇在北京召開。會上,百度智能云正式發(fā)布了《百度智能云水業(yè)大模型白皮書》(以下簡稱《白皮書》)。
    的頭像 發(fā)表于 03-29 09:20 ?1288次閱讀
    <b class='flag-5'>百度</b>智能云正式發(fā)布了《<b class='flag-5'>百度</b>智能云水業(yè)大<b class='flag-5'>模型</b>白皮書》

    一圖講透百度智能云千帆大模型平臺全面升級!

    【一圖講透】百度智能云千帆大模型平臺全面升級!
    的頭像 發(fā)表于 03-22 10:44 ?433次閱讀
    一圖講透<b class='flag-5'>百度</b>智能云千帆大<b class='flag-5'>模型</b>平臺全面升級!

    百度智能云推出全新輕量級大模型

    在近日舉辦的百度智能云千帆產(chǎn)品發(fā)布會上,三款全新的輕量級大模型——ERNIE Speed、ERNIE Lite以及ERNIE Tiny,引起了業(yè)界的廣泛關注。相較于傳統(tǒng)的千億級別參數(shù)大模型,這些輕量級大
    的頭像 發(fā)表于 03-22 10:28 ?599次閱讀

    百度智能云大模型應用產(chǎn)品發(fā)布會定檔

    百度智能云官方宣布,備受矚目的“AI Cloud Day:百度智能云大模型應用產(chǎn)品發(fā)布會”已正式定檔于3月27日。
    的頭像 發(fā)表于 03-21 11:37 ?762次閱讀

    百度財報告訴你:2024想賺錢,搞大模型

    百度財報里,看見大模型的成績與新篇
    的頭像 發(fā)表于 03-01 09:39 ?2232次閱讀
    <b class='flag-5'>百度</b>財報告訴你:2024想賺錢,搞大<b class='flag-5'>模型</b>

    百度智能云成為榮耀大模型生態(tài)戰(zhàn)略合作伙伴

    2024年1月10日,在榮耀MagicOS 8.0發(fā)布會及開發(fā)者大會上,榮耀終端有限公司CEO趙明宣布了“模生態(tài)計劃”,并與百度集團執(zhí)行副總裁、百度智能云事業(yè)群總裁沈抖共同宣布,百度
    的頭像 發(fā)表于 01-11 10:05 ?626次閱讀

    新火種AI | 谷歌Gemini“抄襲”百度文心一言?AI訓練數(shù)據(jù)陷難題

    谷歌自己放出“實錘”,Gemini化身百度文心大模型?
    的頭像 發(fā)表于 12-20 09:09 ?462次閱讀
    新火種AI | 谷歌Gemini“抄襲”<b class='flag-5'>百度</b>文心一言?AI<b class='flag-5'>訓練</b>數(shù)據(jù)陷難題