chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

SOK的Embedding計(jì)算過(guò)程及原理詳解

NVIDIA英偉達(dá)企業(yè)解決方案 ? 來(lái)源:NVIDIA英偉達(dá)企業(yè)解決方案 ? 作者:NVIDIA英偉達(dá)企業(yè)解 ? 2022-06-14 11:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在上期文章中,我們對(duì) HugeCTR Sparse Operation Kit (以下簡(jiǎn)稱(chēng)SOK) 的基本功能,性能,以及 API 用法做了初步的介紹,相信大家對(duì)如何使用 SOK 已經(jīng)有了基本的了解。在這期文章中,我們將從在 TensorFlow 上使用 SOK 時(shí)常見(jiàn)的“數(shù)據(jù)并行-模型并行-數(shù)據(jù)并行”流程入手,帶大家詳細(xì)了解 SOK 的原理。

1f4928c8-eb09-11ec-ba43-dac502259ad0.png

SOK 的 Embedding 計(jì)算主要分為三個(gè)階段:input-dispatcher -> lookup -> output-dispatcher,接下來(lái)我們將以 all-to-all 稠密 Embedding 層為例,帶大家梳理各個(gè)階段的計(jì)算過(guò)程。

1. Input Dispatcher

Input Dispatcher 的職責(zé)是將數(shù)據(jù)以并行的形式的輸入,分配到各個(gè) GPU 上??偣卜譃橐韵聨讉€(gè)步驟:

第一步:對(duì)每個(gè) GPU 接收到的數(shù)據(jù)并行的 category key,按照 key 求余 GPU 的數(shù)量計(jì)算出其對(duì)應(yīng)的 GPU ID,并分成和 GPU 數(shù)量相同的組;同時(shí)計(jì)算出每組內(nèi)有多少 key。例如圖 2 中,GPU 的總數(shù)為 2,GPU 0 獲取的輸入為 [0, 1, 2, 3],根據(jù)前面所講的規(guī)則,它將會(huì)被分成 [0, 2], [1, 3]兩組。注意,在這一步,我們還會(huì)為每個(gè)分組產(chǎn)生一個(gè) order 信息,用于 output dispacher 的重排序。

第二步:通過(guò) NCCL 交換各個(gè) GPU 上每組 key 的數(shù)量。由于每個(gè) GPU 獲取的輸入,按照 key 求余 GPU 數(shù)量不一定能夠均分,如圖 3 所示,提前在各個(gè) GPU 上交換 key 的總數(shù),可以在后面交換 key 的時(shí)候減少通信量。

1f8b1b0c-eb09-11ec-ba43-dac502259ad0.png

第三步:使用 NCCL,在各個(gè) GPU 間按照 GPU ID 交換前面分好的各組 key,如圖 4 所示。

1f971a24-eb09-11ec-ba43-dac502259ad0.png

Step4:對(duì)交換后的所有 key 除以 GPU 總數(shù),這一步是為了讓每個(gè) GPU 上的 key的數(shù)值范圍都小于 embedding table size 整除 GPU 的數(shù)量,保證后續(xù)在每個(gè) worker 上執(zhí)行 lookup 時(shí)不會(huì)越界,結(jié)果如圖 5 所示。

總而言之,經(jīng)過(guò)上面 4 個(gè)步驟,我們將數(shù)據(jù)并行地輸入,按照其求余 GPU 數(shù)量的結(jié)果,分配到了不同對(duì)應(yīng)的 GPU 上,完成了 input key 從數(shù)據(jù)并行到模型并行的轉(zhuǎn)化。雖然用戶往每個(gè) GPU 上輸入的都可以是 embedding table 里的任何一個(gè) key,但是經(jīng)過(guò)上述的轉(zhuǎn)化過(guò)程后,每個(gè) GPU 上則只需要處理 embedding table 里 1/GPU_NUMBER 的 lookup。

1fc5d65c-eb09-11ec-ba43-dac502259ad0.png

2. Lookup

Lookup 的功能比較簡(jiǎn)單,和單機(jī)的 lookup 的行為相同,就是用 input dispatcher 輸出的 key,在本地的 embedding table 里查詢(xún)出對(duì)應(yīng)的 embedding vector,我們同樣用一個(gè)簡(jiǎn)單的圖來(lái)舉例。注意下圖中 Global Index 代表每個(gè) embedding vector 在實(shí)際的 embedding table 中對(duì)應(yīng)的 key,而 Index 則是當(dāng)前 GPU 的“部分”embedding table 中的 key。

201f419c-eb09-11ec-ba43-dac502259ad0.png

3. Output Dispatcher

和 input dispatcher 的功能對(duì)應(yīng),output dispatcher 是將 embedding vector 按照和 input dispatcher 相同的路徑、相反的方向?qū)?embedding vector 返回給各個(gè) GPU,讓模型并行的 lookup 結(jié)果重新變成數(shù)據(jù)并行。

第一步:復(fù)用 input dispatcher 中的分組信息,將 embedding vector 進(jìn)行分組,如圖 7 所示。

204b0610-eb09-11ec-ba43-dac502259ad0.png

第二步:通過(guò) NCCL 將 embedding vector 按 input dispatcher 的路徑返還,如圖 8 所示。

2078053e-eb09-11ec-ba43-dac502259ad0.png

第三步:復(fù)用 input dispatcher 第一步驟的結(jié)果,將 embedding vector 進(jìn)行重排序,讓其和輸入的 key 順序保持一致,如圖 9 所示。

20ac5ea6-eb09-11ec-ba43-dac502259ad0.png

可以看到, GPU 0 上輸入的[0, 1, 3, 5],最終被轉(zhuǎn)化為了[0.0, …], [0.1, …], [0.3, …], [0.5, …] 四個(gè) embedding vector,雖然其中有 3 個(gè) embedding vector 被存儲(chǔ)在 GPU 1 上,但是以一種對(duì)用戶透明的方式,在 GPU 0 上拿到了對(duì)應(yīng)的 vector。在用戶看來(lái),就好像整個(gè) embedding table 都存在 GPU 0 上一樣。

4. Backward

在 backward 中,每個(gè) GPU 會(huì)得到和 input 的 key 所對(duì)應(yīng)的梯度,也就是數(shù)據(jù)并行的梯度。此時(shí)的梯度對(duì)應(yīng)的 embedding vector 可能并不在當(dāng)前 GPU 上,所以還需要做一步梯度的交換。這個(gè)步驟和 output dispatcher 的第三步驟中的工作流程的路徑完全相同,只是方向相反。仍然以前面的例子舉例,GPU 0 獲取了 key [0, 1, 3, 5]的梯度,我們把它們分別叫做 grad0, grad1, grad3, grad5;由于 grad1,grad3,grad5 對(duì)應(yīng)的 embedding vector 在 GPU 1 上,所以我們把它們和 GPU 1 上的 grad4, grad6 進(jìn)行交換,最終在得到了 GPU 0 上的梯度為[grad0, grad4, grad6],GPU 1 上的梯度為[grad1, grad3, grad5, grad5, gard7]。

結(jié)語(yǔ)

以上就是 SOK 將數(shù)據(jù)并行轉(zhuǎn)化為模型并行再轉(zhuǎn)回?cái)?shù)據(jù)并行的過(guò)程,這整個(gè)流程都被封裝在了 SOK 的 Embedding Layer 中,用戶可以直接調(diào)用相關(guān)的 Python API 即可輕松完成訓(xùn)練。

原文標(biāo)題:Merlin HugeCTR Sparse Operation Kit 系列之二

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

審核編輯:湯梓紅

聲明:本文內(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

    文章

    5431

    瀏覽量

    108250
  • 計(jì)算
    +關(guān)注

    關(guān)注

    2

    文章

    456

    瀏覽量

    39698
  • SOK
    SOK
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    6442

原文標(biāo)題:Merlin HugeCTR Sparse Operation Kit 系列之二

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    測(cè)斜儀數(shù)據(jù)計(jì)算方法解析:從公式理解到智能應(yīng)用

    測(cè)斜儀作為工程安全監(jiān)測(cè)的重要設(shè)備,其測(cè)量數(shù)據(jù)的準(zhǔn)確計(jì)算直接關(guān)系到結(jié)構(gòu)物安全狀態(tài)的判斷。南京峟思將系統(tǒng)為大家介紹測(cè)斜儀數(shù)據(jù)的計(jì)算原理與方法,幫助用戶更好地理解監(jiān)測(cè)數(shù)據(jù)的產(chǎn)生過(guò)程。測(cè)斜儀計(jì)算
    的頭像 發(fā)表于 09-28 13:30 ?207次閱讀
    測(cè)斜儀數(shù)據(jù)<b class='flag-5'>計(jì)算</b>方法解析:從公式理解到智能應(yīng)用

    橫河功率分析儀WT5000低功率因數(shù)測(cè)量精度解析

    借助橫河WT5000功率分析儀,用戶可通過(guò)運(yùn)算公式精確計(jì)算誤差值。為簡(jiǎn)化計(jì)算過(guò)程,WT500還提供了更為簡(jiǎn)易的算法。當(dāng)電流S≥0.5A時(shí),直接將S乘以0.02%,便可輕松獲取誤差數(shù)值,大大提高了測(cè)試效率。
    的頭像 發(fā)表于 07-16 17:36 ?458次閱讀
    橫河功率分析儀WT5000低功率因數(shù)測(cè)量精度解析

    SSH常用命令詳解

    SSH常用命令詳解
    的頭像 發(fā)表于 06-04 11:30 ?1434次閱讀

    跪求各路大神labview如何計(jì)算AQI

    使用labview前面板與程序框圖設(shè)計(jì),實(shí)現(xiàn)能夠計(jì)算空氣質(zhì)量指數(shù)AQI 不知道怎樣才能實(shí)現(xiàn)AQI中的最低濃度等,也可以理解成現(xiàn)在有一個(gè)數(shù)字需要對(duì)其進(jìn)行計(jì)算計(jì)算過(guò)程為在一個(gè)固定表格中尋找該數(shù)字位置
    發(fā)表于 05-19 16:49

    【必看】開(kāi)關(guān)電源中每一個(gè)元器件的計(jì)算+51頁(yè)圖文詳解

    開(kāi)關(guān)電源的各個(gè)元器件怎么計(jì)算?損耗怎么估算?散熱器的大小怎么計(jì)算? 51頁(yè)圖文詳解,一文帶你弄懂! 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下哦~)
    發(fā)表于 05-12 16:20

    電機(jī)試驗(yàn)電源制動(dòng)單元工程化計(jì)算及應(yīng)用

    介紹了電機(jī)試驗(yàn)電源制動(dòng)單元的分析及計(jì)算,并且在實(shí)際工程中進(jìn)行了應(yīng)用。結(jié)果表明,依據(jù)計(jì)算過(guò)程得到的制動(dòng)單元參數(shù),滿足電機(jī)試驗(yàn)快速制動(dòng)的要求。純分享帖,需要者可點(diǎn)擊附件獲取完整資料~~~*附件:電機(jī)試驗(yàn)電源
    發(fā)表于 04-27 19:31

    求助,關(guān)于LT8361 SEPICE\\INVERTING轉(zhuǎn)換的ΔISW計(jì)算問(wèn)題求解

    DEMO的一些公式,比如我就以24V輸入-48V輸出,那么VIND就是固定的,沒(méi)有最大值最小值,我已如下方式進(jìn)行了計(jì)算 但是算出來(lái)的結(jié)果是一個(gè)四倍關(guān)系,想請(qǐng)教一下我的計(jì)算過(guò)程是否有誤?
    發(fā)表于 04-18 07:17

    輸入電容及DCM-CCM-QR變壓器計(jì)算

    技術(shù)要求:輸入電壓Vin:90-253Vac 輸出電壓Vo:27.6V 輸出電流Io:6A 輸出功率Po:166W 效率η:0.85 輸入功率Pin:195W一、輸入濾波電容計(jì)算過(guò)程: 上圖為整流后
    發(fā)表于 03-17 15:19

    輸入電容及DCM-CCM-QR變壓器計(jì)算.

    技術(shù)要求:輸入電壓Vin:90-253Vac 輸出電壓Vo:27.6V 輸出電流Io:6A 輸出功率Po:166W 效率η:0.85 輸入功率Pin:195W一、輸入濾波電容計(jì)算過(guò)程
    發(fā)表于 03-10 15:39

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

    今天學(xué)習(xí)大模型RAG 檢索增強(qiáng)生成技術(shù)Embedding,即嵌入,是一種將離散數(shù)據(jù)(如文字、圖像、音頻等)轉(zhuǎn)換為連續(xù)的密集向量表示的技術(shù)。這些向量能夠反映原始數(shù)據(jù)之間的關(guān)系,使得計(jì)算機(jī)能夠更好地處
    發(fā)表于 01-17 19:53

    詳解Arm計(jì)算平臺(tái)的優(yōu)勢(shì)

    對(duì)于人工智能 (AI) 而言,任何單一硬件或計(jì)算組件都無(wú)法成為適合各類(lèi)工作負(fù)載的萬(wàn)能解決方案。AI 貫穿從云端到邊緣側(cè)的整個(gè)現(xiàn)代計(jì)算領(lǐng)域,為了滿足不同的 AI 用例和需求,一個(gè)可以靈活使用 CPU、GPU 和 NPU 等不同計(jì)算
    的頭像 發(fā)表于 12-03 16:53 ?1066次閱讀

    ADS1299器件手冊(cè)里的這個(gè)衰減怎么計(jì)算出來(lái)的?

    我的計(jì)算過(guò)程:33uV x 10.3/(952+10.3) = 0.35uV ?而不是要求的3.5uV,請(qǐng)指教
    發(fā)表于 11-18 06:41

    詳解MySQL多實(shí)例部署

    詳解MySQL多實(shí)例部署
    的頭像 發(fā)表于 11-11 11:10 ?871次閱讀

    CPK為什么要大于1.33?一文詳解CPK計(jì)算

    原文標(biāo)題:CPK為什么要大于1.33?一文詳解CPK計(jì)算
    的頭像 發(fā)表于 11-01 11:08 ?1394次閱讀

    求助,TAS5731關(guān)于DRC和EQ的寄存器的計(jì)算和設(shè)置問(wèn)題?

    TAS5731的文檔只描述了寄存器地址,但是并沒(méi)有說(shuō)明這些寄存器如何計(jì)算設(shè)置,文檔里說(shuō)明參考EVM的設(shè)計(jì)手冊(cè),可是這手冊(cè)中也沒(méi)有具體計(jì)算和設(shè)置說(shuō)明,只是說(shuō)需要通過(guò)GE軟件計(jì)算。并沒(méi)有計(jì)算過(guò)程
    發(fā)表于 10-28 08:29