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

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

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

NVIDIA Merlin分布式嵌入使快速、TB級(jí)推薦培訓(xùn)變得簡(jiǎn)單

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-10-11 10:48 ? 次閱讀

嵌入在深度學(xué)習(xí)推薦模型中起著關(guān)鍵作用。它們用于將數(shù)據(jù)中的編碼分類輸入映射到可由數(shù)學(xué)層或多層感知器( MLP )處理的數(shù)值。

嵌入通常構(gòu)成深度學(xué)習(xí)推薦模型中的大部分參數(shù),并且可以相當(dāng)大,甚至達(dá)到 TB 級(jí)。在訓(xùn)練期間,很難將它們放入單個(gè) GPU 的內(nèi)存中。

因此,現(xiàn)代推薦者可能需要模型并行和數(shù)據(jù)并行分布式訓(xùn)練方法的組合,以實(shí)現(xiàn)合理的訓(xùn)練時(shí)間和可用 GPU 計(jì)算的最佳利用。

NVIDIA Merlin 分布式嵌入 ,在 TensorFlow 2 中,一個(gè)用于訓(xùn)練大型基于嵌入的(例如,推薦者)模型的庫使您只需幾行代碼即可輕松完成。

背景

通過 GPU 上的數(shù)據(jù)并行分布式訓(xùn)練,在每個(gè) GPU 工作人員上復(fù)制整個(gè)模型。在訓(xùn)練過程中,一批數(shù)據(jù)在多個(gè) GPU 中分割,每個(gè)設(shè)備獨(dú)立操作其自己的數(shù)據(jù)碎片。

這允許將計(jì)算擴(kuò)展到更大批量的更高數(shù)據(jù)量。在反向傳播期間計(jì)算的梯度使用減少操作(例如, horovod.tensorflow.allreduce ) 用于同步參數(shù)更新。

通過模型并行分布式訓(xùn)練,模型參數(shù)在不同工作人員之間進(jìn)行分割。這是一種更適合分發(fā)大型嵌入表的方法。訓(xùn)練需要使用全對(duì)全通信原語(例如, horovod.tensorflow.alltoall ) 使得工人可以訪問不在其分區(qū)中的參數(shù)。

在之前的相關(guān)文章中, 在 TensorFlow 2 中使用 100B +參數(shù)在 DGX A100 上訓(xùn)練推薦系統(tǒng) , Tomasz 討論了如何為 1130 億參數(shù)分配嵌入 DLRM 跨多個(gè) NVIDIA GPU 的模型有助于在僅 CPU 的解決方案上實(shí)現(xiàn) 672 倍的加速。這一重大改進(jìn)可能會(huì)將訓(xùn)練時(shí)間從幾天縮短到幾分鐘!這是通過模型并行分布嵌入表和通過數(shù)據(jù)并行執(zhí)行小得多的數(shù)學(xué)密集型 MLP 層計(jì)算來實(shí)現(xiàn)的。

與將嵌入存儲(chǔ)在 CPU 內(nèi)存中相比,這種混合方法使您能夠使用 GPU 內(nèi)存的高內(nèi)存帶寬進(jìn)行內(nèi)存綁定嵌入查找。它還使用幾個(gè) GPU 設(shè)備中的計(jì)算能力加速 MLP 層。作為參考 NVIDIA A100-80GB GPU 具有帶寬超過 2 TB / s 的 80 GB HBM2 存儲(chǔ)器)。

poYBAGNE2Y2ADFHDAANKw2kfFzg615.png

圖 1.用于訓(xùn)練大型推薦系統(tǒng)的通用“混合并行”方法

嵌入表可以分為“表方式”(例如,嵌入表 0 和 N )、“列方式”(例如嵌入表 2 )或“行方式”??缢?GPU 復(fù)制 MLP 層。數(shù)字特征可以直接輸入 MLP 層,并且在圖中未示出。

然而,實(shí)現(xiàn)這種復(fù)雜的混合并行訓(xùn)練方法并不簡(jiǎn)單,需要領(lǐng)域?qū)<以O(shè)計(jì)幾百行低級(jí)代碼來開發(fā)和優(yōu)化訓(xùn)練。

為了使其更廣泛地使用 NVIDIA Merlin 分布式嵌入 該庫提供了一個(gè)易于使用的包裝器,只需三行 Python 代碼即可在 TensorFlow 2 中民主化模型并行性。它提供了一個(gè)可伸縮的模型并行包裝器 分發(fā)嵌入表 除了一些 高效嵌入操作 這涵蓋并擴(kuò)展了 TensorFlow 的嵌入功能。下面是它如何實(shí)現(xiàn)混合并行。

分布式并行模型

NVIDIA Merlin 分布式嵌入提供了 distributed_embeddings.dist_model_parallel 單元。它有助于在多個(gè) GPU 工作者之間分發(fā)嵌入,而無需任何復(fù)雜的代碼來處理與原語的跨工作者通信,如 all2all 下面的代碼示例顯示了此 API 的用法:

import dist_model_parallel as dmp

class MyEmbeddingModel(tf.keras.Model):
  def  __init__(self, table_sizes):
    ...
    self.embedding_layers = [tf.keras.layers.Embedding(input_dim, output_dim) for input_dim, output_dim in table_sizes]
    # 1. Add this line to wrap list of embedding layers used in the model
    self.embedding_layers = dmp.DistributedEmbedding(self.embedding_layers)
  def call(self, inputs):
    # embedding_outputs = [e(i) for e, i in zip(self.embedding_layers, inputs)]
    embedding_outputs = self.embedding_layers(inputs)
    ...

要使用 Horovod 以數(shù)據(jù)并行方式運(yùn)行密集層,請(qǐng)?zhí)鎿QHorovod’sDistributed GradientTapebroadcast方法及其在分布式嵌入中的等效。以下示例直接取自 Horovod 文檔,并進(jìn)行了相應(yīng)修改。

@tf.function
def training_step(inputs, labels, first_batch):
  with tf.GradientTape() as tape:
    probs = model(inputs)
    loss_value = loss(labels, probs)

  # 2. Change Horovod Gradient Tape to dmp tape
  # tape = hvd.DistributedGradientTape(tape)
  tape = dmp.DistributedGradientTape(tape)
  grads = tape.gradient(loss_value, model.trainable_variables)
  opt.apply_gradients(zip(grads, model.trainable_variables))

  if first_batch:
    # 3. Change Horovod broadcast_variables to dmp's
    # hvd.broadcast_variables(model.variables, root_rank=0)
    dmp.broadcast_variables(model.variables, root_rank=0)
  return loss_value

通過這些微小的改變,您就可以使用混合并行訓(xùn)練步驟了!

我們還提供了以下完整示例: 使用 Criteo 1TB 點(diǎn)擊日志數(shù)據(jù)訓(xùn)練 DLRM 模型 以及 合成數(shù)據(jù) 這將模型尺寸擴(kuò)展到 22.8 TiB 。

性能

為了證明使用 NVIDIA Merlin 分布式嵌入的好處,我們展示了在 Criteo 1TB 數(shù)據(jù)集上訓(xùn)練的 DLRM 模型的基準(zhǔn)測(cè)試,以及各種具有多達(dá) 3 個(gè) TiB 嵌入表大小的合成模型。

Criteo 數(shù)據(jù)集上的 DLRM 基準(zhǔn)

基準(zhǔn)測(cè)試表明,我們使用更簡(jiǎn)單的 API 保持了類似于專家工程代碼的性能。這個(gè) NVIDIA 深度學(xué)習(xí)示例 DLRM 使用 TensorFlow 2 的代碼現(xiàn)在也已更新,以利用 NVIDIA Merlin 分布式嵌入的混合并行訓(xùn)練。更多信息,請(qǐng)參閱我們之前的文章, 在 TensorFlow 2 中使用 100B +參數(shù)在 DGX A100 上訓(xùn)練推薦系統(tǒng) 。

這個(gè) 基準(zhǔn) 自述部分提供了對(duì)性能數(shù)字的更多了解。

具有 1130 億個(gè)參數(shù)( 421 個(gè) GiB 模型大?。┑?DLRM 模型在 Criteo TB 點(diǎn)擊日志 數(shù)據(jù)集,三種不同的硬件設(shè)置:

僅 CPU 的解決方案。

單 – GPU 解決方案,其中 CPU 內(nèi)存用于存儲(chǔ)最大的嵌入表。

使用 NVIDIA DGX A100-80GB 和 8 GPU 的混合并行解決方案。這利用了 NVIDIA Merlin 分布式嵌入提供的模型并行包裝器和嵌入 API 。

我們觀察到, DGX-A100 上的分布式嵌入解決方案比僅使用 CPU 的解決方案提供了驚人的 683 倍的加速!我們還注意到,與單一 GPU 解決方案相比,性能有了顯著改善。這是因?yàn)樵?GPU 內(nèi)存中保留所有嵌入消除了通過 CPU-GPU 接口嵌入查找的開銷。

綜合模型基準(zhǔn)

為了進(jìn)一步演示解決方案的可伸縮性,我們創(chuàng)建了不同大小的合成 DLRM 模型(表 2 )。

每個(gè)合成模型使用一個(gè)或多個(gè) DGX-A100-80GB 節(jié)點(diǎn)進(jìn)行訓(xùn)練,全局批量大小為 65536 ,并使用 Adagrad 優(yōu)化器。從表 3 中可以看出, NVIDIA Merlin 分布式嵌入可以在數(shù)百 GPU 上輕松訓(xùn)練 TB 級(jí)模型。

另一方面,與傳統(tǒng)的數(shù)據(jù)并行相比,即使對(duì)于可以容納在單個(gè) GPU 中的模型,分布式嵌入的模型并行仍然提供了多 GPU 的顯著加速。這如表 4 所示,其中一個(gè)微型模型在 DGX A100-80GB 上運(yùn)行。

本實(shí)驗(yàn)使用了 65536 的全局批量和 Adagrad 優(yōu)化器。

結(jié)論

在這篇文章中,我們介紹了 NVIDIA Merlin 分布式嵌入庫,僅需幾行代碼即可在 NVIDIA GPU 上實(shí)現(xiàn)基于嵌入的深度學(xué)習(xí)模型的可擴(kuò)展和高效模型并行訓(xùn)練。

關(guān)于作者

Shashank Verma 是 NVIDIA 的一名深入學(xué)習(xí)的技術(shù)營(yíng)銷工程師。他負(fù)責(zé)開發(fā)和展示各種深度學(xué)習(xí)框架中以開發(fā)人員為中心的內(nèi)容。他從威斯康星大學(xué)麥迪遜分校獲得電氣工程碩士學(xué)位,在那里他專注于計(jì)算機(jī)視覺、數(shù)據(jù)科學(xué)的安全方面和 HPC 。

Wenwen Gao 是 NVIDIA Merlin 的高級(jí)產(chǎn)品經(jīng)理,擁有 Amazon 和其他技術(shù)公司的產(chǎn)品管理經(jīng)驗(yàn),專注于個(gè)性化和推薦。她擁有多倫多大學(xué)計(jì)算機(jī)科學(xué)學(xué)士學(xué)位和麻省理工學(xué)院斯隆管理學(xué)院工商管理碩士學(xué)位。

Hao Wu 是 NVIDIA 的高級(jí) GPU 計(jì)算架構(gòu)師。他在完成博士學(xué)位后于 2011 年加入 NVIDIA 計(jì)算架構(gòu)組。在中國(guó)科學(xué)院。近年來, Hao 的技術(shù)重點(diǎn)是將低精度應(yīng)用于深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理。

Deyu Fu 是 NVIDIA 深度學(xué)習(xí)框架團(tuán)隊(duì)的高級(jí)開發(fā)技術(shù)工程師,負(fù)責(zé)加速軟件堆棧 CUDA 內(nèi)核、數(shù)學(xué)、通信、框架和模型的 DL 培訓(xùn)工作。他最近專注于 NVIDIA Merlin 分布式嵌入和推薦系統(tǒng)。

Tomasz Grel 是一名深度學(xué)習(xí)工程師。在NVIDIA ,他專注于確保眾多推薦系統(tǒng)的質(zhì)量和執(zhí)行速度,包括 NCF 、 VAE-CF 和 DLRM 。

審核編輯:郭婷

聲明:本文內(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)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4855

    瀏覽量

    102711
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4673

    瀏覽量

    128593
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5463

    瀏覽量

    120891
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    分布式軟件系統(tǒng)

    一個(gè)組織機(jī)構(gòu)需要增加新的相對(duì)自主的組織單位來擴(kuò)充機(jī)構(gòu),則分布式數(shù)據(jù)庫系統(tǒng)可以在對(duì)當(dāng)前機(jī)構(gòu)影響最小的情況下進(jìn)行擴(kuò)充。 3、均衡負(fù)載的需要。數(shù)據(jù)的分解采用使局部應(yīng)用達(dá)到最大,這使得各處理機(jī)之間的相互干擾
    發(fā)表于 07-22 14:53

    LED分布式恒流原理

    需要恒流,但是電流的大小取決于應(yīng)用環(huán)境,LED照明智能化發(fā)展是關(guān)鍵,分布式恒流技術(shù)充份預(yù)留智能化接口。在分布式LED驅(qū)動(dòng)設(shè)計(jì)中,驅(qū)動(dòng)回搜、色溫可調(diào)、灰度控制都要變得方便。這是分布式恒流
    發(fā)表于 03-09 16:47

    使用分布式I/O進(jìn)行實(shí)時(shí)部署系統(tǒng)的設(shè)計(jì)

    的同時(shí),不犧牲現(xiàn)有實(shí)時(shí)系統(tǒng)確定性。在沒有實(shí)時(shí)通信協(xié)議的情況下,你可能需要借助于數(shù)字I/O模塊的共享時(shí)鐘或硬件觸發(fā)器對(duì)多個(gè)實(shí)時(shí)控制器進(jìn)行同步。但隨著添加的控制器越來越多,同步的復(fù)雜度使工作變得很費(fèi)時(shí)而且很笨拙,特別是需要分布式I/
    發(fā)表于 03-12 17:47

    基于分布式調(diào)用鏈監(jiān)控技術(shù)的全息排查功能

    解決的問題和主要的使用場(chǎng)景,下文在這方面簡(jiǎn)單展開做一下介紹。分布式鏈路追蹤概要介紹和其面臨的主要問題分布式調(diào)用鏈?zhǔn)俏⒎?wù)時(shí)代下的監(jiān)控必備利器。該技術(shù)理論基礎(chǔ)建立在Google Dapper論文基礎(chǔ)之上,主要運(yùn)用于
    發(fā)表于 08-07 17:02

    如何設(shè)計(jì)分布式干擾系統(tǒng)?

    ”的電子戰(zhàn)系統(tǒng),共同完成對(duì)敵信號(hào)的探測(cè)、定位、干擾任務(wù)。因此,嵌入式網(wǎng)關(guān)是分布式干擾系統(tǒng)研究的關(guān)鍵技術(shù)之一。目前國(guó)內(nèi)對(duì)分布式干擾系統(tǒng)的研究還停留在理論基礎(chǔ)上,而對(duì)其關(guān)鍵技術(shù)的研究不多。怎么利用
    發(fā)表于 08-08 06:57

    分布式系統(tǒng)的優(yōu)勢(shì)是什么?

    當(dāng)討論分布式系統(tǒng)時(shí),我們面臨許多以下這些形容詞所描述的 同類型: 分布式的、刪絡(luò)的、并行的、并發(fā)的和分散的。分布式處理是一個(gè)相對(duì)較新的領(lǐng)域,所以還沒有‘致的定義。與順序計(jì)算相比、并行的、并發(fā)的和
    發(fā)表于 03-31 09:01

    HarmonyOS分布式數(shù)據(jù)庫,為啥這么牛?

    考慮到照片數(shù)據(jù)在多設(shè)備間是怎么存儲(chǔ)、怎么共享和怎么訪問? HarmonyOS 分布式數(shù)據(jù)管理的目標(biāo)就是為開發(fā)者在系統(tǒng)層面解決這些問題,讓應(yīng)用開發(fā)變得簡(jiǎn)單。 它能夠保證多設(shè)備間的數(shù)據(jù)安全,解決多設(shè)備
    發(fā)表于 11-19 15:38

    分布式嵌入式系統(tǒng)的過程中利用Jini技術(shù)有什么優(yōu)勢(shì)?

    在構(gòu)建分布式嵌入式系統(tǒng)的過程中利用Jini技術(shù),不但可以降低系統(tǒng)的開發(fā)難度、實(shí)現(xiàn)嵌入式環(huán)境中基于服務(wù)級(jí)的互操作,而且可使系統(tǒng)具有很好的靈活性和可靠性。
    發(fā)表于 04-28 06:46

    【木棉花】:簡(jiǎn)單分布式任務(wù)調(diào)度

    更新。此次是對(duì)實(shí)現(xiàn)分布式任務(wù)調(diào)度的一個(gè)分享,以一個(gè)簡(jiǎn)單的案例來講解。(? ?_?)?概述正文部分分為兩個(gè)部分。O(∩_∩)O第一部分是對(duì)分布式任務(wù)調(diào)度的簡(jiǎn)單概述,第二部分是
    發(fā)表于 09-03 14:34

    如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    Testing從測(cè)試標(biāo)準(zhǔn)、測(cè)試服務(wù)及云測(cè)服務(wù)三個(gè)方面提供分布式應(yīng)用測(cè)試的解決方案。下面,我們將逐一介紹。1. 測(cè)試標(biāo)準(zhǔn)測(cè)試標(biāo)準(zhǔn)定義APP的入門級(jí)測(cè)試要求,重點(diǎn)覆蓋消費(fèi)者用戶最關(guān)心的HarmonyOS特征
    發(fā)表于 12-13 18:07

    分布式電源分布式電源裝置是指什么?有何特點(diǎn)

    區(qū)的電力供應(yīng),節(jié)約輸變電投資,提高供電可靠性等。含義簡(jiǎn)明的分布式電源定義為:35kV及以下電壓等級(jí)的電源,不能直接連接到中央輸電系統(tǒng),主要包括發(fā)電設(shè)備和儲(chǔ)能裝置。特點(diǎn)分布式能源系統(tǒng)不是簡(jiǎn)單地采用傳統(tǒng)的發(fā)電技術(shù),而是基于自動(dòng)控制系
    發(fā)表于 12-29 06:51

    快速在線分布式對(duì)偶平均優(yōu)化算法

    為提高分布式在線優(yōu)化算法的收斂速度,對(duì)底層網(wǎng)絡(luò)拓?fù)湟来翁磉?,提出一種快速的一階分布式在線對(duì)偶平均優(yōu)化( FODD)算法。首先,對(duì)于分布式在線優(yōu)化問題,運(yùn)用添邊方法
    發(fā)表于 01-22 14:45 ?5次下載
    <b class='flag-5'>快速</b>在線<b class='flag-5'>分布式</b>對(duì)偶平均優(yōu)化算法

    基于Jini互聯(lián)技術(shù)實(shí)現(xiàn)分布式嵌入式系統(tǒng)的設(shè)計(jì)

    系統(tǒng)的開發(fā)。在構(gòu)建分布式嵌入式系統(tǒng)的過程中利用Jini互聯(lián)技術(shù),不但可以降低系統(tǒng)開發(fā)難度,實(shí)現(xiàn)嵌入式環(huán)境中基于服務(wù)級(jí)的互操作,而且還可提高整個(gè)系統(tǒng)的靈活性和可靠性。因此Jini技術(shù)推出
    的頭像 發(fā)表于 09-11 17:37 ?3097次閱讀
    基于Jini互聯(lián)技術(shù)實(shí)現(xiàn)<b class='flag-5'>分布式</b><b class='flag-5'>嵌入式</b>系統(tǒng)的設(shè)計(jì)

    用于分布式負(fù)載點(diǎn)應(yīng)用的簡(jiǎn)單電源跟蹤

    用于分布式負(fù)載點(diǎn)應(yīng)用的簡(jiǎn)單電源跟蹤
    發(fā)表于 03-21 00:52 ?7次下載
    用于<b class='flag-5'>分布式</b>負(fù)載點(diǎn)應(yīng)用的<b class='flag-5'>簡(jiǎn)單</b>電源跟蹤

    如何使用NVIDIA Merlin推薦系統(tǒng)框架實(shí)現(xiàn)嵌入優(yōu)化

    HugeCTR TensorFlow 嵌入插件今天可以從 HugeCTR GitHub 存儲(chǔ)庫以及 NGC NVIDIA Merlin TensorFlow 容器獲得。如果您是 TensorFlow
    的頭像 發(fā)表于 04-02 14:18 ?1888次閱讀
    如何使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Merlin</b>推薦系統(tǒng)框架實(shí)現(xiàn)<b class='flag-5'>嵌入</b>優(yōu)化