日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

SOK的Embedding計算過程及原理詳解

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

掃碼添加小助手

加入工程師交流群

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

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

SOK 的 Embedding 計算主要分為三個階段:input-dispatcher -> lookup -> output-dispatcher,接下來我們將以 all-to-all 稠密 Embedding 層為例,帶大家梳理各個階段的計算過程。

1. Input Dispatcher

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

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

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

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

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

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

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

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

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

2. Lookup

Lookup 的功能比較簡單,和單機的 lookup 的行為相同,就是用 input dispatcher 輸出的 key,在本地的 embedding table 里查詢出對應的 embedding vector,我們同樣用一個簡單的圖來舉例。注意下圖中 Global Index 代表每個 embedding vector 在實際的 embedding table 中對應的 key,而 Index 則是當前 GPU 的“部分”embedding table 中的 key。

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

3. Output Dispatcher

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

第一步:復用 input dispatcher 中的分組信息,將 embedding vector 進行分組,如圖 7 所示。

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

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

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

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

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

可以看到, GPU 0 上輸入的[0, 1, 3, 5],最終被轉化為了[0.0, …], [0.1, …], [0.3, …], [0.5, …] 四個 embedding vector,雖然其中有 3 個 embedding vector 被存儲在 GPU 1 上,但是以一種對用戶透明的方式,在 GPU 0 上拿到了對應的 vector。在用戶看來,就好像整個 embedding table 都存在 GPU 0 上一樣。

4. Backward

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

結語

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

原文標題:Merlin HugeCTR Sparse Operation Kit 系列之二

文章出處:【微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅

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

    關注

    14

    文章

    5696

    瀏覽量

    110141
  • 計算
    +關注

    關注

    2

    文章

    460

    瀏覽量

    40134
  • SOK
    SOK
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6475

原文標題:Merlin HugeCTR Sparse Operation Kit 系列之二

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STPMC1可編程多相電能計算器IC:設計與應用詳解

    STPMC1可編程多相電能計算器IC:設計與應用詳解 在電力計量領域,精準且高效的電能計算是關鍵。STPMC1作為一款可編程多相電能計算器IC,為電力線系統(tǒng)的有效電能測量提供了強大的解
    的頭像 發(fā)表于 03-02 16:55 ?626次閱讀

    RAG(檢索增強生成)原理與實踐

    向量的特點: 語義相似的文本,向量距離更近 向量可以進行數(shù)學運算 (相似度計算) 降維后可視化 (理解語義空間) 常用的Embedding模型 OpenAI
    發(fā)表于 02-11 12:46

    反激開關電源反饋環(huán)路計算過程

    TL431通過分壓電阻檢測輸出電壓,當REF端電壓達到基準電壓(典型值2.495V)時導通。
    的頭像 發(fā)表于 01-28 14:47 ?4032次閱讀
    反激開關電源反饋環(huán)路<b class='flag-5'>計算過程</b>

    差示掃描量熱儀DSC-600S關于DSC輔助線計算焓值

    中基線漂移、傾斜等干擾因素,從而精準捕獲相變峰的凈熱量數(shù)據(jù),為材料特性分析提供可靠支撐。在實際測算過程中,焓值計算的核心邏輯是獲取基線與DSC曲線相交區(qū)域的面積,再結合
    的頭像 發(fā)表于 12-12 16:07 ?453次閱讀
    差示掃描量熱儀DSC-600S關于DSC輔助線<b class='flag-5'>計算</b>焓值

    IRL 指標計算公式,PLTS計算過程指南

    審核編輯 黃宇
    的頭像 發(fā)表于 11-05 16:20 ?320次閱讀
    IRL 指標<b class='flag-5'>計算</b>公式,PLTS<b class='flag-5'>計算過程</b>指南

    Camellia算法的實現(xiàn)(基于開源蜂鳥E203協(xié)處理器)

    開頭的數(shù)據(jù),我們稱之為子密鑰。F為輪函數(shù),F(xiàn)L和FL-1為FL函數(shù)和FL-1函數(shù)。 左上圖所示為產(chǎn)生子密鑰的運算過程。該運算過程與數(shù)據(jù)的加解密過程類似,也要用到F函數(shù)和大量的異括運算。與后者
    發(fā)表于 10-30 07:04

    如何使用恢復算法來實現(xiàn)開平方運算

    我們輸入的操作數(shù)X=0.1011,那么按照上述的步驟計算,就可以算出結果為Q=0.1101,具體計算過程如下:如果我們輸入的操作數(shù)X=0.1011,那么按照上述的步驟計算,就可以算出結果為Q
    發(fā)表于 10-24 13:33

    e203乘除法模塊(e203_exu_alu_muldiv.v)中的back2back和special case信號的含義

    的兩個源寄存器相同,則說明這兩條指令的運算結果是可以在同一次乘法計算過程中得出,這樣可以在17個周期完成兩條指令的運算, Mul指令輸出低位,mulh(如mulhu等寫回計算結果高位的指令)指令輸出高位
    發(fā)表于 10-24 06:37

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

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

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

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

    HarmonyOS NEXT應用元服務布局優(yōu)化利用布局邊界減少布局計算

    Measure階段,其節(jié)點中保存了對應的大小信息,如果組件內(nèi)容較多時,由于避免了其中組件整體的測算過程,性能會帶來較大的提升。 我們通過修改以下示例代碼中Column的寬度,對比給Row設置固定寬度
    發(fā)表于 06-26 11:13

    安徽京準:北斗衛(wèi)星同步時鐘的安裝與調(diào)試詳解

    安徽京準:北斗衛(wèi)星同步時鐘的安裝與調(diào)試詳解
    的頭像 發(fā)表于 06-05 10:08 ?1779次閱讀
    安徽京準:北斗衛(wèi)星同步時鐘的安裝與調(diào)試<b class='flag-5'>詳解</b>

    SSH常用命令詳解

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

    跪求各路大神labview如何計算AQI

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

    【必看】開關電源中每一個元器件的計算+51頁圖文詳解

    開關電源的各個元器件怎么計算?損耗怎么估算?散熱器的大小怎么計算? 51頁圖文詳解,一文帶你弄懂! 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關注、點贊、評論支持一下哦~)
    發(fā)表于 05-12 16:20
    通渭县| 沁源县| 米易县| 龙川县| 三亚市| 通山县| 潼关县| 临江市| 新巴尔虎左旗| 平和县| 阿坝| 洞头县| 榆中县| 衡阳县| 新巴尔虎左旗| 温州市| 南丰县| 齐河县| 涟水县| 夏津县| 桐柏县| 石嘴山市| 灵武市| 安化县| 从化市| 札达县| 平顺县| 宝山区| 含山县| 陆河县| 邯郸市| 甘洛县| 公安县| 大田县| 五寨县| 潜江市| 鄂伦春自治旗| 丽江市| 资源县| 诸城市| 家居|