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

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

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

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

SOKey如何將數(shù)據(jù)并行轉(zhuǎn)化為模型并行再轉(zhuǎn)回數(shù)據(jù)并行

科技綠洲 ? 來源:NVIDIA英偉達企業(yè)解決方案 ? 作者:NVIDIA英偉達企業(yè)解 ? 2022-06-14 15:05 ? 次閱讀

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

poYBAGKoMvSAYGaWAABmdfsrJiE812.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 獲取的輸入為 ,根據(jù)前面所講的規(guī)則,它將會被分成兩組。注意,在這一步,我們還會為每個分組產(chǎn)生一個 order 信息,用于 output dispacher 的重排序。

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

poYBAGKoMv2AJqUBAAA3cyhqBsc646.png

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

pYYBAGKoMwWAT6j4AAAq8s52F_A277.png

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

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

pYYBAGKoMxKAYivpAAAu6m8aqLA636.png

2. Lookup

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

poYBAGKoMxyAHnezAAD8Q5G-3Ho061.png

3. Output Dispatcher

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

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

poYBAGKoMyaAayGnAABezq78Is0376.png

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

poYBAGKoMy-AULrGAABdfOr709U744.png

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

pYYBAGKoMzeAWghNAABg1OZ5H-A524.png

可以看到, GPU 0 上輸入的[0, 1, 3, 5],最終被轉(zhuǎn)化為了[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]。

結(jié)語

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

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

    關注

    8

    文章

    7067

    瀏覽量

    89108
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4743

    瀏覽量

    128992
  • API
    API
    +關注

    關注

    2

    文章

    1502

    瀏覽量

    62101
  • SOK
    SOK
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6338
收藏 人收藏

    評論

    相關推薦

    基于Transformer做大模型預訓練基本的并行范式

    在之前的內(nèi)容中,我們已經(jīng)介紹過流水線并行數(shù)據(jù)并行(DP,DDP和ZeRO)。 今天我們將要介紹最重要,也是目前基于Transformer做大模型預訓練最基本的
    的頭像 發(fā)表于 05-31 14:38 ?2706次閱讀
    基于Transformer做大<b class='flag-5'>模型</b>預訓練基本的<b class='flag-5'>并行</b>范式

    用單片機進行串并行數(shù)據(jù)轉(zhuǎn)化及其在家用電器控制中的應用

    Holtek單片機46R47配合74HC164移位鎖存器來實現(xiàn)串行數(shù)據(jù)并行數(shù)據(jù)轉(zhuǎn)化,并探討如何將其應用到鍵盤掃描和顯示之中。
    發(fā)表于 03-03 14:56

    verilog串并轉(zhuǎn)換,串行輸入八個12位的數(shù)據(jù),請問如何將這八個12位的數(shù)據(jù)并行輸出?

    串行輸入八個12位的數(shù)據(jù),請問如何將這八個12位的數(shù)據(jù)并行輸出?
    發(fā)表于 04-01 12:41

    串行和并行的區(qū)別

    傳輸時,數(shù)據(jù)是一位一位地在通信線上傳輸?shù)模扔删哂袔孜豢偩€的計算機內(nèi)的發(fā)送設備,幾位并行數(shù)據(jù)經(jīng)并--串轉(zhuǎn)換硬件轉(zhuǎn)換成串行方式,逐位經(jīng) 傳輸線到達接收站的設備中,并在接收端
    發(fā)表于 11-24 18:24

    串行和并行的區(qū)別

    速度快,處理簡單。 串行數(shù)據(jù)傳輸時,數(shù)據(jù)是一位一位地在通信線上傳輸?shù)模扔删哂袔孜豢偩€的計算機內(nèi)的發(fā)送設備,幾位并行數(shù)據(jù)經(jīng)并--串轉(zhuǎn)換硬件轉(zhuǎn)換成串行方式,
    發(fā)表于 01-11 09:40

    并行編程模型有什么優(yōu)勢

    并行編程模型并行計算,尤其是并行軟件的基礎,也是并行硬件系統(tǒng)的導向,在面臨多核新挑戰(zhàn)的情況下,什么樣的
    發(fā)表于 07-11 08:03

    什么是數(shù)據(jù)并行傳輸,并行傳輸原理是什么?

    什么是數(shù)據(jù)并行傳輸,并行傳輸原理是什么? 數(shù)據(jù)通信的基本方式可分為并行通信與串行通信。 并行
    發(fā)表于 03-17 16:25 ?8142次閱讀

    單片機進行串/并行數(shù)據(jù)轉(zhuǎn)化及在家用電器控制中的應用

    在家用電器控制中,數(shù)據(jù)并行轉(zhuǎn)換是經(jīng)常進行的,這是因為很多時候我們需要并行數(shù)據(jù)傳輸,比如驅(qū)動一個七段顯示器顯示出
    發(fā)表于 03-14 14:21 ?94次下載

    并行總線是什么?(并行總線協(xié)議介紹)

    并行總線,就是并行接口與計算機設備之間傳遞數(shù)據(jù)的通道。采用并行傳送方式在 微型計算機與外部設備之間進行數(shù)據(jù)傳送的接口叫
    發(fā)表于 11-13 09:55 ?1.3w次閱讀
    <b class='flag-5'>并行</b>總線是什么?(<b class='flag-5'>并行</b>總線協(xié)議介紹)

    Spark的并行數(shù)據(jù)挖掘的研究

    本文研究了基于Spark的并行數(shù)據(jù)挖掘,并將其應用到了流程對象數(shù)據(jù)分析中。文章通過對串行的流程 對象數(shù)據(jù)挖掘算法流的研究,提出了一種基于Spark并行計算框架的
    發(fā)表于 12-30 17:31 ?0次下載

    如何使用FPGA驅(qū)動并行ADC和并行DAC芯片

    ADC和DAC是FPGA與外部信號的接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口和高速的并行接口。FPGA經(jīng)常用來采集中高頻信號,因此使用并行ADC和DAC居多。本文介紹如何使用
    的頭像 發(fā)表于 04-21 08:55 ?7149次閱讀

    了解SOK的原理

      以上就是 SOK 數(shù)據(jù)并行轉(zhuǎn)化為模型并行
    的頭像 發(fā)表于 08-15 15:22 ?1931次閱讀
    了解SOK的原理

    圖解大模型訓練之:數(shù)據(jù)并行上篇(DP, DDP與ZeRO)

    數(shù)據(jù)并行的核心思想是:在各個GPU上都拷貝一份完整模型,各自吃一份數(shù)據(jù),算一份梯度,最后對梯度進行累加來更新整體模型。理念不復雜,但到了大
    發(fā)表于 06-16 09:54 ?3535次閱讀
    圖解大<b class='flag-5'>模型</b>訓練之:<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>并行</b>上篇(DP, DDP與ZeRO)

    模型分布式訓練并行技術(一)-概述

    數(shù)據(jù)并行是最常見的并行形式,因為它很簡單。在數(shù)據(jù)并行訓練中,數(shù)據(jù)集被分割成幾個碎片,每個碎片被分
    的頭像 發(fā)表于 08-24 15:17 ?1491次閱讀
    大<b class='flag-5'>模型</b>分布式訓練<b class='flag-5'>并行</b>技術(一)-概述

    基于PyTorch的模型并行分布式訓練Megatron解析

    NVIDIA Megatron 是一個基于 PyTorch 的分布式訓練框架,用來訓練超大Transformer語言模型,其通過綜合應用了數(shù)據(jù)并行,Tensor并行和Pipeline
    的頭像 發(fā)表于 10-23 11:01 ?3073次閱讀
    基于PyTorch的<b class='flag-5'>模型</b><b class='flag-5'>并行</b>分布式訓練Megatron解析
    主站蜘蛛池模板: proburn中文破解版下载| 国产人妻人伦精品98| 亚洲成AV人电影在线观看 | 呻吟翘臀后进爆白浆| 极品少妇伦理一区二区| 午夜熟女插插XX免费视频| 国产高清视频免费在线观看| 伊在香蕉国产在线视频| 少妇精品久久久一区二区三区| 国产精品婷婷久青青原| www.黄色| 69亞洲亂人倫AV精品發布| 人与畜禽CROPROATION免费| 国产传媒18精品免费观看| 99久久99久久久精品久久| 亚洲人成无码久久久AAA片| 猫咪av永久最新域名| 国产人妻麻豆蜜桃色| 抽插的日日液液H| 亚洲精品6久久久久中文字幕| 久久99久久成人免费播放| 国产精品无码亚洲网| 耽美肉文 高h失禁| jizzhd中国| chaopeng 在线视频| 777午夜精品久久AV蜜臀| 一受n攻高h全肉np| 日韩 国产 中文 无码| 国产在线观看的| 98色精品视频在线| 一本道无码字幕在线看| 欧美日韩另类在线专区| 国产精人妻无码一区麻豆| 成人免费视频在线观看| 亚洲午夜无码久久久久蜜臀av| 午夜精品久久久久久99热蜜桃| 日日操夜夜摸| 日日日夜夜在线视频| 看电影来5566一区.二区| 久久99AV无色码人妻蜜| 狠狠躁日日躁人人爽|