色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

了解SOK的原理

星星科技指導員 ? 來源:NVIDIA ? 作者:Kunlun Lee ? 2022-08-15 15:22 ? 次閱讀

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

poYBAGL59JiARZz4AACrm9j_bTw807.png

圖 1:SOK 訓練的數據并行-模型并行-數據并行流程

1. Input Dispatcher

Input Dispatcher 的職責是將數據以并行的形式的輸入,分配到各個 GPU 上。總共分為以下幾個步驟:

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

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

pYYBAGL59J-ANIPxAABP8FWKNo8475.png

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

poYBAGL59KWAChITAADEtKC5X1Q738.png

圖 4:GPU 間交換 Input key

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

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

pYYBAGL59KyAZ2_9AABYzcg3JBk527.png

圖 5:整除 input key

2. Lookup

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

poYBAGL59LKAPnZrAADtkpy9jkU142.png

圖 6:使用 Embedding Table 進行 Lookup

3. Output Dispatcher

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

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

pYYBAGL59LuAWMvcAADkv5anG2M175.png

圖 7:Embedding vector 的分組

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

poYBAGL59NuAervyAADkv5anG2M680.png

圖 8:Embedding vector 的返還

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

poYBAGL59NCAaZ8HAADMql64990015.png

圖 9:Embedding vector 的重排序

可以看到, 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 所對應的梯度,也就是數據并行的梯度。此時的梯度對應的 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 將數據并行轉化為模型并行再轉回數據并行的過程,這整個流程都被封裝在了 SOK 的 Embedding Layer 中,用戶可以直接調用相關的 Python API 即可輕松完成訓練。

審核編輯:郭婷

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

    關注

    28

    文章

    4752

    瀏覽量

    129057
  • API
    API
    +關注

    關注

    2

    文章

    1504

    瀏覽量

    62162
  • python
    +關注

    關注

    56

    文章

    4798

    瀏覽量

    84810
收藏 人收藏

    評論

    相關推薦

    了解超聲AFE設備的CW模式

    電子發燒友網站提供《了解超聲AFE設備的CW模式.pdf》資料免費下載
    發表于 10-25 09:23 ?0次下載
    <b class='flag-5'>了解</b>超聲AFE設備的CW模式

    了解MSP430閃存數據保留

    電子發燒友網站提供《了解MSP430閃存數據保留.pdf》資料免費下載
    發表于 10-21 09:34 ?0次下載
    <b class='flag-5'>了解</b>MSP430閃存數據保留

    了解Davinci預覽引擎

    電子發燒友網站提供《了解Davinci預覽引擎.pdf》資料免費下載
    發表于 10-15 09:56 ?0次下載
    <b class='flag-5'>了解</b>Davinci預覽引擎

    了解Davinci調整器

    電子發燒友網站提供《了解Davinci調整器.pdf》資料免費下載
    發表于 10-15 09:32 ?0次下載
    <b class='flag-5'>了解</b>Davinci調整器

    了解I2C總線

    電子發燒友網站提供《了解I2C總線.pdf》資料免費下載
    發表于 10-08 11:13 ?2次下載
    <b class='flag-5'>了解</b>I2C總線

    了解電源模塊運行限制

    電子發燒友網站提供《了解電源模塊運行限制.pdf》資料免費下載
    發表于 09-24 11:13 ?0次下載
    <b class='flag-5'>了解</b>電源模塊運行限制

    了解智能柵極驅動器

    電子發燒友網站提供《了解智能柵極驅動器.pdf》資料免費下載
    發表于 09-21 09:03 ?0次下載
    <b class='flag-5'>了解</b>智能柵極驅動器

    了解電源器件中的欠壓鎖定

    電子發燒友網站提供《了解電源器件中的欠壓鎖定.pdf》資料免費下載
    發表于 09-04 10:10 ?0次下載
    <b class='flag-5'>了解</b>電源器件中的欠壓鎖定

    了解TPS56837的軟啟動

    電子發燒友網站提供《了解TPS56837的軟啟動.pdf》資料免費下載
    發表于 08-29 14:15 ?0次下載
    <b class='flag-5'>了解</b>TPS56837的軟啟動

    了解功能隔離

    電子發燒友網站提供《了解功能隔離.pdf》資料免費下載
    發表于 08-28 10:37 ?0次下載
    <b class='flag-5'>了解</b>功能隔離

    你認識貼片電阻嗎,你對他了解多少?

    你認識貼片電阻嗎,你對他了解多少?
    的頭像 發表于 08-27 15:49 ?506次閱讀
    你認識貼片電阻嗎,你對他<b class='flag-5'>了解</b>多少?

    想要了解下大模型知識

    工作需要,想要了解一下大模型算力建設知識。
    發表于 08-20 15:31

    SOK在手機行業的應用案例

    通過封裝 NVIDIA Merlin HugeCTR,Sparse Operation Kit(以下簡稱 SOK)使得 TensorFlow 用戶可以借助 HugeCTR 的一些相關特性和優化加速 GPU 上的分布式 Embedding 訓練。
    的頭像 發表于 07-25 10:01 ?368次閱讀
    <b class='flag-5'>SOK</b>在手機行業的應用案例

    帶你了解電阻封裝

    了解和掌握電阻的封裝類型、尺寸和性能對于確保電路設計的正確性和穩定性具有重要意義。希望以上信息能夠幫助您更好地理解電阻封裝并為您在實際應用中提供幫助。
    的頭像 發表于 05-15 13:28 ?2319次閱讀

    了解EMI濾波器:從基礎到應用?

    了解EMI濾波器:從基礎到應用?|深圳比創達電子
    的頭像 發表于 01-23 10:26 ?586次閱讀
    <b class='flag-5'>了解</b>EMI濾波器:從基礎到應用?
    主站蜘蛛池模板: 肉肉的各种姿势高H细文| 甜性涩爱在线播放| 精品国产自在天天线2019| 国内精品久久久久久久试看| 国产亚洲精品久久综合阿香| 国产色婷婷亚洲99麻豆| 精品久久久久中文字幕日本| 老司机福利在 线影院| 免费色片播放器| 日韩经典欧美一区二区三区| 先锋影音av无码第1页| 亚洲中文热码在线视频| 最新快播网站| 大桥未久电影在线观看| 国产又粗又猛又爽又黄的免费视频| 精品亚洲一区二区在线播放| 免费欧美大片| 十大禁止安装的黄台有风险| 亚洲精品九色在线网站| 做暖暖视频在线看片免费| 成年免费大片黄在线观看岛国| 国产乱码免费卡1卡二卡3卡四卡| 久久99AV无色码人妻蜜柚| 男人和女人一级黄色大片| 色人阁影视| 亚洲视频在线观看网站| 99在线精品国自产拍| 国产精品人妻无码久久久2022| 久爱精品亚洲电影午夜| 欧美无码专区| 亚洲精品视频在线观看视频| 999久久精品国产| 冠希和阿娇13分钟在线视频| 极品色αv影院| 欧美狂野乱码一二三四区| 午夜影院一区二区三区| 97超在线视频| 国产午夜精品福利久久| 美目盼兮amy198281| 天天啪免费视频在线看| 2021全国精品卡一卡二|