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

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

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

NVIDIA AI 技術(shù)助力 vivo 文本預(yù)訓(xùn)練大模型性能提升

NVIDIA英偉達(dá) ? 來(lái)源:未知 ? 2023-05-26 07:15 ? 次閱讀

vivo AI 團(tuán)隊(duì)與 NVIDIA 團(tuán)隊(duì)合作,通過算子優(yōu)化,提升 vivo 文本預(yù)訓(xùn)練大模型的訓(xùn)練速度。在實(shí)際應(yīng)用中,訓(xùn)練提速 60%,滿足了下游業(yè)務(wù)應(yīng)用對(duì)模型訓(xùn)練速度的要求。通過 NVIDIA Nsight Systems 性能分析工具進(jìn)行性能瓶頸分析,并在此基礎(chǔ)上,針對(duì) gather、dropout、softmax、scale、layernorm 等算子進(jìn)行優(yōu)化。

客戶簡(jiǎn)介及應(yīng)用背景

vivo 是一家以設(shè)計(jì)驅(qū)動(dòng)創(chuàng)造偉大產(chǎn)品,以智能終端和智慧服務(wù)為核心的科技公司。自 2017 年開始,vivo 不斷地思考著如何通過 AI 技術(shù)能力,為全球超過 4 億的用戶提供更好的智能服務(wù)?;诖嗽妇?,vivo 打造了針對(duì)消費(fèi)互聯(lián)網(wǎng)場(chǎng)景的 1001 個(gè) AI 便利。其中,vivo AI 團(tuán)隊(duì)研發(fā)了面向自然語(yǔ)言理解任務(wù)的文本預(yù)訓(xùn)練模型 3MP-Text。在中文語(yǔ)言理解測(cè)評(píng)基準(zhǔn) CLUE 榜單上,3MP-Text 1 億參數(shù)模型效果排名同規(guī)模第一,7 億參數(shù)模型排名總榜第十(不包括人類);在 vivo 內(nèi)部的多個(gè)應(yīng)用場(chǎng)景如內(nèi)容理解、輿情分析、語(yǔ)音助手上測(cè)試,3MP-Text 1 億模型效果明顯優(yōu)于同規(guī)模開源模型,展現(xiàn)出優(yōu)秀的中文語(yǔ)言理解能力,具有良好的應(yīng)用價(jià)值。

b2d82c3e-fb51-11ed-90ce-dac502259ad0.png

此圖片來(lái)源于 vivo

*如果您有任何疑問或需要使用此圖片,請(qǐng)聯(lián)系 vivo

客戶挑戰(zhàn)

為提升預(yù)訓(xùn)練模型的效果,往往需要對(duì)模型的結(jié)構(gòu)做一定修改,(比如改變位置編碼的實(shí)現(xiàn)方式,改變模型的寬度和深度等)而這些修改,可能造成模型訓(xùn)練速度的下降。

3MP-Text 模型,采用 Deberta V2 的模型結(jié)構(gòu),該結(jié)構(gòu)使用相對(duì)位置編碼,相對(duì)于絕對(duì)位置編碼,效果更好,但其相對(duì)位置編碼的實(shí)現(xiàn)過程,增加了模型在注意力機(jī)制部分的計(jì)算量,從而降低了模型的訓(xùn)練速度。如圖 1 所示,在 NVIDIA GPU 單卡測(cè)試中,含有相對(duì)位置編碼的注意力機(jī)制的計(jì)算耗時(shí)占了單次迭代耗時(shí)的 71.5%。

另一方面,已有的研究和實(shí)踐驗(yàn)證顯示,相同參數(shù)規(guī)模下,減小模型隱層維度,增加模型層數(shù),能提升效果(效果對(duì)比見圖 2),因此,3MP-Text 模型采用了這種 DeepNarrow 的結(jié)構(gòu)。

b3275912-fb51-11ed-90ce-dac502259ad0.png

圖 1. Deberta V2 xlarge 模型在 NVIDIA GPU 單卡上,batch size = 20 時(shí)一次迭代的 nsys timeline。單次迭代耗時(shí) 965ms,含有相對(duì)位置編碼的注意力機(jī)制(DisentangledSelfAttention)前后向計(jì)算耗時(shí) 690ms,占比 71.5%。

b378d1d4-fb51-11ed-90ce-dac502259ad0.png

圖 2. 實(shí)際驗(yàn)證的數(shù)據(jù)表格

以上兩點(diǎn)修改,使得 3MP-Text 模型,相比同參數(shù)規(guī)模的 BERT 模型,訓(xùn)練時(shí)間多 60%,訓(xùn)練成本相應(yīng)增加,對(duì)模型在實(shí)際業(yè)務(wù)場(chǎng)景的應(yīng)用,造成一定障礙。比如,采用領(lǐng)域預(yù)訓(xùn)練的方法,提升 3MP-Text 模型在手機(jī)輿情領(lǐng)域任務(wù)上的整體表現(xiàn),由于模型訓(xùn)練時(shí)間比 BERT 長(zhǎng) 60%,采用該模型會(huì)使業(yè)務(wù)功能的上線時(shí)間明顯延遲,從而影響了正常迭代優(yōu)化。

應(yīng)用方案

本案例將以 NVIDIA GPU 單卡訓(xùn)練情況為例,展開介紹 NVIDIA 所進(jìn)行的算子優(yōu)化。

如上文提到,含有相對(duì)位置編碼的注意力機(jī)制計(jì)算耗時(shí)占比達(dá) 71.5%,因此,NVIDIA 團(tuán)隊(duì)優(yōu)先對(duì)該模塊進(jìn)行了優(yōu)化,其中包括 gather 算子、dropout 算子、softmax 算子和 scale 算子的優(yōu)化。

Gather 算子優(yōu)化:

對(duì)于 gather 操作本身,在 cuda kernel 實(shí)現(xiàn)方面,采用了 float4/half4 等數(shù)據(jù)類型進(jìn)行向量化讀寫(一次讀寫 4 個(gè) float 或 4 個(gè) half 元素),并且利用 shared memory 確保合并訪問,從而優(yōu)化 gather(前向)/ scatter(反向)cuda kernels。

除了 gather 本身的優(yōu)化外,如圖 3 所示的 pytorch 代碼中看到,有不少 elementwise 的操作(紅框所示)可以通過 kernel 融合(kernel fusion)的優(yōu)化手段,把它們都融合到一個(gè) cuda kernel(藍(lán)框所示)中,從而提升性能。如圖 4 所示,在進(jìn)行 kernel 融合前,完成相應(yīng)計(jì)算需要 9 個(gè) cuda kernels,kernel 融合后,只需要 4 個(gè) cuda kernels。

綜合 gather kernel 優(yōu)化和 kernel 融合優(yōu)化,該模塊性能提升 3.3 倍。

b3a89964-fb51-11ed-90ce-dac502259ad0.png

圖 3. gather 及相關(guān)操作的 pytorch 源碼。紅框?yàn)?gather 操作上下游的 elementwise 操作。藍(lán)框示意進(jìn)行 kernel 融合后,對(duì)應(yīng) cuda kernel 所執(zhí)行的全部操作。

b3d8f730-fb51-11ed-90ce-dac502259ad0.png

圖 4. gather 及相關(guān)操作優(yōu)化 nsys timeline 對(duì)比。(a) 優(yōu)化前,前向 (fw) 6 個(gè) cuda kernels 耗時(shí) 2.6ms,反向 (bw) 3 個(gè)cuda kernels 耗時(shí) 3.6 ms;(b)優(yōu)化后,前向 (fw) 2 個(gè) cuda kernels 耗時(shí) 0.88ms,反向 (bw) 2 個(gè) cuda kernels 耗時(shí) 0.99ms。優(yōu)化后加速比 3.3x。

Dropout 算子優(yōu)化:

在 debertaV2 中會(huì)使用 StableDropout,如果仔細(xì)對(duì)比 pytorch 代碼,會(huì)發(fā)現(xiàn)其計(jì)算公式絕大部分情況下可以簡(jiǎn)化為:

  • Step 1. rand_data = torch.rand_like(input)

  • Step 2. x.bernoulli_(1 - dropout) == rand_data < (1 - dropout)

  • Step 3. mask = (1 - torch.empty_like(input).bernoulli_(1 - dropout)).to(torch.bool)

  • Step 4. input.masked_fill(mask, 0) * (1.0 / (1 - dropout))

顯然上述操作涉及大量的 elementwise 的操作,因此把 step 2~4 融合到一個(gè)獨(dú)立的 cuda kernel 中,同時(shí)再次采用了 float4/half4 等數(shù)據(jù)類型進(jìn)行向量化讀寫來(lái)優(yōu)化 cuda kernel。

如圖 5 所示,在進(jìn)行 kernel 融合前,完成相應(yīng)計(jì)算需要 9 個(gè) cuda kernels,kernel 融合后,只需要 3 個(gè) cuda kernels。

綜合 dropout kernel 優(yōu)化和 kernel 融合優(yōu)化,該模塊性能提升 4.5 倍。

b3fe5020-fb51-11ed-90ce-dac502259ad0.png

圖 5. dropout 及相關(guān)操作優(yōu)化 nsys timeline 對(duì)比。(a) 優(yōu)化前,前向 (fw) 6 個(gè) cuda kernels 耗時(shí) 3.4ms,反向 (bw) 3 個(gè) cuda kernels 耗時(shí) 1.9 ms;(b)優(yōu)化后,前向 (fw) 2 個(gè) cuda kernels 耗時(shí) 0.82ms,反向 (bw) 1 個(gè) cuda kernels 耗時(shí) 0.37ms。優(yōu)化后加速比 4.5x。

Softmax 算子優(yōu)化:

與 dropout 類似,根據(jù)源碼對(duì) Softmax 算子的計(jì)算步驟進(jìn)行如下劃分:

  • Step 1. rmask = ~(mask.to(torch.bool))

  • Step 2. output = input.masked_fill(rmask, torch.tensor(torch.finfo(input.dtype).min))

  • Step 3. output = torch.softmax(output, self.dim)

  • Step 4. output.masked_fill_(rmask, 0)

把 step 1~4 融合到一個(gè)獨(dú)立的 cuda kernel 中。由于 softmax 計(jì)算中涉及 cuda 線程之間的同步操作,當(dāng)采用 float4/half4 等數(shù)據(jù)類型進(jìn)行向量化讀寫時(shí),也減少了參與同步的 cuda 線程數(shù)目,從而減少了同步的開銷。此外,NVIDIA 團(tuán)隊(duì)也利用寄存器數(shù)組來(lái)緩存數(shù)據(jù),避免了多次從全局內(nèi)存中讀取數(shù)據(jù)。

在 softmax 優(yōu)化中,只優(yōu)化了其前向,沿用了原有的反向?qū)崿F(xiàn)。如圖 6 所示,經(jīng)過優(yōu)化后,該模塊前向性能提升 4 倍。

b422b6cc-fb51-11ed-90ce-dac502259ad0.png

圖 6. softmax 及相關(guān)操作優(yōu)化 nsys timeline 對(duì)比。(a) 優(yōu)化前,前向 (fw) 6 個(gè) cuda kernels 耗時(shí) 2.1ms;(b)優(yōu)化后,前向 (fw) 1 個(gè) cuda kernels 耗時(shí) 0.5ms。優(yōu)化后加速比 4x。

Scale 算子優(yōu)化:

如圖 7 所示,在 attention 部分,計(jì)算 attention score 時(shí)會(huì)有一個(gè)除以 scale 的操作,這個(gè)除法操作其實(shí)可以很容易通過 cublas 的 API 融合 到矩陣乘法之中,因此,直接調(diào)用 cublasGemmStridedBatchedEx() API,實(shí)現(xiàn)了一個(gè)融合 gemm + scale 的 torch op。取得了 1.9x 的加速比(優(yōu)化前 1.42 ms,優(yōu)化后 0.75 ms)。

b451bf9e-fb51-11ed-90ce-dac502259ad0.png

圖 7. Attention 部分,scale 操作相關(guān)源碼。

Layernorm 算子優(yōu)化:

除了上述提到算子外,還通過改造 apex 中的 layer_norm 模塊(https://github.com/NVIDIA/apex/tree/master/apex/contrib/csrc/layer_norm),以便在 hidden dim=512 情況下,優(yōu)化 layernorm 算子,取得了 2.4 倍的加速比(優(yōu)化前 0.53 ms,優(yōu)化后 0.22 ms)。

使用效果及影響

使用 NVIDIA 做的算子優(yōu)化,vivo 3MP-Text 模型的訓(xùn)練速度提升 60%,達(dá)到了和同規(guī)模 BERT 模型相同的速度,下游業(yè)務(wù)應(yīng)用時(shí),模型的訓(xùn)練速度不再成為瓶頸,訓(xùn)練成本進(jìn)一步降低。另外,這些算子優(yōu)化,也可以應(yīng)用到其他使用 Deberta V2 模型的場(chǎng)景中。

未來(lái),vivo AI 團(tuán)隊(duì)和 NVIDIA 將在大模型分布式訓(xùn)練、推理等方面持續(xù)合作,共同推進(jìn)生成式 AI 在手機(jī)場(chǎng)景行業(yè)的應(yīng)用落地(如語(yǔ)音助手、智能創(chuàng)作、智能辦公等)和性能提升。

點(diǎn)擊 “閱讀原文”,或掃描下方海報(bào)二維碼,在 5 月 29 日觀看 NVIDIA 創(chuàng)始人兼 CEO 黃仁勛為 COMPUTEX 2023 帶來(lái)的主題演講直播,了解AI、圖形及其他領(lǐng)域的最新進(jìn)展!


原文標(biāo)題:NVIDIA AI 技術(shù)助力 vivo 文本預(yù)訓(xùn)練大模型性能提升

文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


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

    關(guān)注

    22

    文章

    3894

    瀏覽量

    92727

原文標(biāo)題:NVIDIA AI 技術(shù)助力 vivo 文本預(yù)訓(xùn)練大模型性能提升

文章出處:【微信號(hào):NVIDIA_China,微信公眾號(hào):NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    適用于數(shù)據(jù)中心和AI時(shí)代的800G網(wǎng)絡(luò)

    下降。 InfiniBand助力AI性能提升AI工廠中,InfiniBand網(wǎng)絡(luò)技術(shù)
    發(fā)表于 03-25 17:35

    用PaddleNLP為GPT-2模型制作FineWeb二進(jìn)制預(yù)訓(xùn)練數(shù)據(jù)集

    ,使用PaddleNLP將FineWeb數(shù)據(jù)集中文本形式的數(shù)據(jù),經(jīng)過分詞化(Tokenize),轉(zhuǎn)換為大語(yǔ)言模型能直接使用的二進(jìn)制數(shù)據(jù),以便提升訓(xùn)練效果。 ChatGPT發(fā)布后,當(dāng)代大
    的頭像 發(fā)表于 03-21 18:24 ?161次閱讀
    用PaddleNLP為GPT-2<b class='flag-5'>模型</b>制作FineWeb二進(jìn)制<b class='flag-5'>預(yù)</b><b class='flag-5'>訓(xùn)練</b>數(shù)據(jù)集

    訓(xùn)練好的ai模型導(dǎo)入cubemx不成功怎么處理?

    訓(xùn)練好的ai模型導(dǎo)入cubemx不成功咋辦,試了好幾個(gè)模型壓縮了也不行,ram占用過大,有無(wú)解決方案?
    發(fā)表于 03-11 07:18

    用PaddleNLP在4060單卡上實(shí)踐大模型預(yù)訓(xùn)練技術(shù)

    作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 之前我們分享了《從零開始訓(xùn)練一個(gè)大語(yǔ)言模型需要投資多少錢》,其中高昂的預(yù)訓(xùn)練費(fèi)用讓許多對(duì)大模型
    的頭像 發(fā)表于 02-19 16:10 ?622次閱讀
    用PaddleNLP在4060單卡上實(shí)踐大<b class='flag-5'>模型</b><b class='flag-5'>預(yù)</b><b class='flag-5'>訓(xùn)練</b><b class='flag-5'>技術(shù)</b>

    【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+大模型微調(diào)技術(shù)解讀

    今天學(xué)習(xí)<基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化>這本書。大模型微調(diào)是深度學(xué)習(xí)領(lǐng)域中的一項(xiàng)關(guān)鍵技術(shù),它指的是在已經(jīng)預(yù)訓(xùn)練好的大型深度學(xué)
    發(fā)表于 01-14 16:51

    NVIDIA推出面向RTX AI PC的AI基礎(chǔ)模型

    NVIDIA 今日發(fā)布能在 NVIDIA RTX AI PC 本地運(yùn)行的基礎(chǔ)模型,為數(shù)字人、內(nèi)容創(chuàng)作、生產(chǎn)力和開發(fā)提供強(qiáng)大助力
    的頭像 發(fā)表于 01-08 11:01 ?407次閱讀

    NVIDIA推出全新生成式AI模型Fugatto

    NVIDIA 開發(fā)了一個(gè)全新的生成式 AI 模型。利用輸入的文本和音頻,該模型可以創(chuàng)作出包含任意的音樂、人聲和聲音組合的作品。
    的頭像 發(fā)表于 11-27 11:29 ?621次閱讀

    AI模型訓(xùn)練數(shù)據(jù)來(lái)源分析

    AI模型訓(xùn)練數(shù)據(jù)來(lái)源廣泛且多元化,這些數(shù)據(jù)源對(duì)于構(gòu)建和優(yōu)化AI模型至關(guān)重要。以下是對(duì)AI
    的頭像 發(fā)表于 10-23 15:32 ?2711次閱讀

    蘋果揭示AI新動(dòng)向:Apple Intelligence模型在谷歌云端芯片上預(yù)訓(xùn)練

    蘋果公司在最新的技術(shù)論文中披露了一項(xiàng)重要信息,其全新的人工智能系統(tǒng)Apple Intelligence所依賴的模型并非傳統(tǒng)上大型科技公司首選的NVIDIA GPU,而是選擇了在谷歌設(shè)計(jì)的云端芯片上進(jìn)行
    的頭像 發(fā)表于 07-30 15:00 ?663次閱讀

    大語(yǔ)言模型預(yù)訓(xùn)練

    能力,逐漸成為NLP領(lǐng)域的研究熱點(diǎn)。大語(yǔ)言模型預(yù)訓(xùn)練是這一技術(shù)發(fā)展的關(guān)鍵步驟,它通過在海量無(wú)標(biāo)簽數(shù)據(jù)上進(jìn)行訓(xùn)練,使
    的頭像 發(fā)表于 07-11 10:11 ?754次閱讀

    預(yù)訓(xùn)練模型的基本原理和應(yīng)用

    預(yù)訓(xùn)練模型(Pre-trained Model)是深度學(xué)習(xí)和機(jī)器學(xué)習(xí)領(lǐng)域中的一個(gè)重要概念,尤其是在自然語(yǔ)言處理(NLP)和計(jì)算機(jī)視覺(CV)等領(lǐng)域中得到了廣泛應(yīng)用。預(yù)
    的頭像 發(fā)表于 07-03 18:20 ?3760次閱讀

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型預(yù)訓(xùn)練

    如此卓越的性能,就是通過其核心能力對(duì)海量數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練,再進(jìn)行微調(diào)或?qū)ζ涫裁葱透玫母鶕?jù)人類的指令和偏好,發(fā)揮這些性能。隨著語(yǔ)言模型參數(shù)的不
    發(fā)表于 05-07 17:10

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的基礎(chǔ)技術(shù)

    特定任務(wù)對(duì)模型進(jìn)行微調(diào)。這種方法的成功不僅是自然語(yǔ)言處理發(fā)展的一個(gè)轉(zhuǎn)折點(diǎn),還為許多現(xiàn)實(shí)世界的應(yīng)用場(chǎng)帶來(lái)了前所未有的性能提升。從廣為人知的GPT到BERT,預(yù)
    發(fā)表于 05-05 12:17

    【大語(yǔ)言模型:原理與工程實(shí)踐】核心技術(shù)綜述

    預(yù)訓(xùn)練和微調(diào),直到模型的部署和性能評(píng)估。以下是對(duì)這些技術(shù)的綜述: 模型架構(gòu): LLMs通常采
    發(fā)表于 05-05 10:56

    【大語(yǔ)言模型:原理與工程實(shí)踐】揭開大語(yǔ)言模型的面紗

    Transformer架構(gòu),利用自注意力機(jī)制對(duì)文本進(jìn)行編碼,通過預(yù)訓(xùn)練、有監(jiān)督微調(diào)和強(qiáng)化學(xué)習(xí)等階段,不斷提升性能,展現(xiàn)出強(qiáng)大的語(yǔ)言理解和生成
    發(fā)表于 05-04 23:55

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品