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

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

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

Merlin HugeCTR 分級參數(shù)服務(wù)器系列之三——集成到 TensorFlow

NVIDIA英偉達(dá) ? 來源:未知 ? 2022-11-22 19:45 ? 次閱讀

前兩期中我們介紹了 HugeCTR 分級參數(shù)服務(wù)器 (HPS)的三級存儲結(jié)構(gòu)的設(shè)計(jì),相關(guān)配置使用,數(shù)據(jù)后端以及流式在線模型更新方案。本期將為大家介紹如何將 HPS 集成到 TensorFlow 中,從而實(shí)現(xiàn)在 TensorFlow 中利用分級存儲來部署包含龐大 Embedding Tables 的模型。

引言

當(dāng)需要基于 TensorFlow 來部署包含龐大 Embedding Tables 的深度學(xué)習(xí)模型時(shí),數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師需要面對以下挑戰(zhàn):

  • 龐大的 Embedding Tables:訓(xùn)練好的 Embedding Tables 的大小往往達(dá)到幾百GB,使用 TensorFlow 原生的 Layers 或 Variable 無法放入 GPU 內(nèi)存;

  • 低延時(shí)需求: 在線推理要求 Embedding 查詢的延時(shí)要足夠低(幾毫秒級),以保證體驗(yàn)質(zhì)量和維持用戶粘度;

  • 多 GPU 擴(kuò)展能力:分布式推理框架需要將多個(gè)模型部署在多個(gè) GPU上,每個(gè)模型包含一個(gè)或多個(gè) Embedding Tables;

  • 支持加載為 Pre-trained Embeddings:對于遷移學(xué)習(xí)等任務(wù),需要支持以 Pre-trained Embeddings 的形式加載龐大的 Embedding Tables。

針對以上挑戰(zhàn),我們?yōu)?HPS 提供了一個(gè)面向 TensorFlow 的 Python 定制化插件,以方便用戶將 HPS 集成到 TensorFlow 模型圖中,實(shí)現(xiàn)包含龐大 Embedding Tables 的模型的高效部署:

  • HPS 通過使用集群中可用的存儲資源來擴(kuò)展 GPU 內(nèi)存,包含 CPU RAM 以及非易失性存儲如 HDD 和 SSD,從而實(shí)現(xiàn)龐大 Embedding Tables 的分級存儲,如圖 1 所示;

  • HPS 通過使用 GPU Embedding Cache 來利用 embedding key 的長尾特性,當(dāng)查詢請求持續(xù)不斷涌入時(shí),緩存機(jī)制保證 GPU 內(nèi)存可以自動(dòng)存儲熱門(高頻訪問)key 的 Embeddings,從而可以提供低延遲的查詢服務(wù);

  • 在 GPU 內(nèi)存,CPU 內(nèi)存以及 SSD 組成的存儲層級中,HPS 以層級結(jié)構(gòu)化的方式來管理多個(gè)模型的 Embedding Tables,實(shí)現(xiàn)參數(shù)服務(wù)器的功能;

  • HPS 的查詢服務(wù)通過 Custom TensorFlow Layers 來接入,無論是推理還是類似遷移學(xué)習(xí)的任務(wù),都可以有效支持。

c3fdeebe-6a5a-11ed-8abf-dac502259ad0.png

圖 1:HPS 的分級存儲架構(gòu)

TensorFlow 用戶可以使用我們提供的 Python APIs,輕松利用 HPS 的上述特性,我們將在下文中進(jìn)一步介紹。

工作流程

利用 HPS 來部署包含龐大 Embedding Tables 的 TensorFlow 模型的工作流程如圖 2 所示:

c476d05e-6a5a-11ed-8abf-dac502259ad0.png

圖 2:利用 HPS 部署 TensorFlow 模型的工作流程

流程中的步驟可以總結(jié)如下:

  • 訓(xùn)練階段:用戶可以用原生的 TensorFlow Embedding Layers(例如 tf.nn.embedding_lookup_sparse)或者支持模型并行的 SOK[1] Embedding Layers(例如 sok.DistributedEmbedding)來搭建模型圖并進(jìn)行訓(xùn)練。只要模型可以用 TensorFlow 進(jìn)行訓(xùn)練,則無論密集層以及模型圖的拓?fù)浣Y(jié)構(gòu)如何,HPS 都可以在推理階段集成進(jìn)來。

  • 分解訓(xùn)練的模型圖:用戶需要從訓(xùn)練的模型圖中提取由密集層組成的子圖,并將其單獨(dú)保存下來。至于訓(xùn)練好的 Embedding Weights,如果使用的是原生 TensorFlow Embedding Layers,則需要提取 Embedding Weights 并將其轉(zhuǎn)換成 HPS 支持的格式;如果使用的是 SOK Embedding Layers,可以利用 sok.Saver.dump_to_file 來直接得到所需的格式。HPS 的格式要求為:每個(gè) Embedding Table 都被保存在一個(gè)文件夾中,包含兩個(gè)二進(jìn)制文件,key (int64)和 emb_vector(float32)。舉例來說,如果一共有 1000 個(gè)訓(xùn)練好的鍵值對,并且 embedding vector 的長度是 16,那么 key 文件和 emb_vector 文件的大小分別為 1000*8 bytes 和 1000*16*4 bytes。

  • 搭建并保存推理圖:推理圖由 HPS Layers(如 hps.SparseLookupLayer)和保存好的密集層子圖搭建而成。只需將訓(xùn)練圖中的 Embedding Layer 用 HPS Layers 加以替換,便可以得到推理圖。該推理圖保存后便可在生產(chǎn)環(huán)境中部署。

  • 部署推理圖:為了利用 HPS,用戶需要提供一個(gè) JSON 文件,來指定待部署模型的配置信息,用以啟動(dòng) HPS 查詢服務(wù)。接下來便可以部署保存好的推理圖來執(zhí)行在線推理任務(wù),在此過程中有效地利用 HPS Embedding 查詢的優(yōu)化設(shè)計(jì)。關(guān)于配置信息的更多細(xì)節(jié),請參考 HPS Configuration[2]。

API

HPS 提供了簡潔易用的 Python API,可以與 TensorFlow 無縫地銜接。用戶只需幾行代碼,便可以啟動(dòng) HPS 查詢服務(wù)以及將 HPS 集成到 TensorFlow 模型圖中。

  • hierarchical_parameter_server.Init:該方法用來針對待部署的模型啟動(dòng) HPS 查詢服務(wù),需要在執(zhí)行推理任務(wù)前被調(diào)用一次。必須提供的參數(shù)為:

  • global_batch_size:整型,待部署模型的全局批大小。例如模型部署在 4 個(gè) GPUs 上,每個(gè) GPU 上批大小為 4096,則全局批大小為 16384

  • ps_config_file:字符串,HPS 初始化所需的 JSON 配置文件

該方法支持顯式調(diào)用或隱式調(diào)用。顯式調(diào)用用于基于 Python 腳本的測試工作;隱式調(diào)用則用于在生產(chǎn)環(huán)境中部署模型,要求待部署的推理模型中的 hps.SparseLookupLayer 或 hps.LookupLayer 指定好 global_batch_size 和 ps_config_file,當(dāng)模型首次接收到推理請求時(shí),會以 call_once 且線程安全的方式觸發(fā) HPS 的初始化

  • hierarchical_parameter_server.SparseLookupLayer:繼承自 tf.keras.layers.Layer,通過指定模型名和 table id 訂閱到 HPS 查詢服務(wù)。該層執(zhí)行與 tf.nn.embedding_lookup_sparse 基本相同的功能。構(gòu)造時(shí)必須提供的參數(shù)為:

  • model_name:字符串,HPS 部署的模型名

  • table_id:整型,指定的 model_name 的 Embedding Tables 的索引

  • emb_vec_size:整型,指定的 model_name 和 table_id 的 Embedding Vector 的長度

  • emb_vec_dtype:返回的 Embedding Vector 的數(shù)據(jù)類型,目前只支持為 tf.float32

  • ps_config_file:字符串,HPS 隱式初始化所需的 JSON 配置文件

  • global_batch_size:整型,待部署模型的全局批大小

執(zhí)行時(shí)的輸入和返回值為:

  • sp_ids:輸入,int64 類型的 id 的 N x M SparseTensor,其中 N 通常是批次大小,M 是任意的

  • sp_weights:輸入,可以是具有 float/double weight 的 SparseTensor,或者是 None 以表示所有 weight 應(yīng)為 1。如果指定,則 sp_weights 必須具有與 sp_ids 完全相同的 shape 和 indice

  • combiner:輸入,指定 reduction 操作的字符串。目前支持“mean”,“sqrtn”和“sum”

  • max_norm:輸入,如果提供,則在 combine 之前將每個(gè) embedding 規(guī)范化為具有等于 max_norm 的 l2 范數(shù)

  • emb_vector: 返回值,表示 combined embedding 的密集張量。對于由 sp_ids 表示的密集張量中的每一行,通過 HPS 來查找該行中所有 id 的 embedding,將它們乘以相應(yīng)的 weight,并按指定的方式組合這些 embedding

  • hierarchical_parameter_server.LookupLayer:繼承自 tf.keras.layers.Layer,通過指定模型名和 table id 訂閱到 HPS 查詢服務(wù)。該層執(zhí)行與 tf.nn.embedding_lookup 基本相同的功能。構(gòu)造時(shí)的參數(shù)與 hierarchical_parameter_server.SparseLookupLayer 相同。執(zhí)行時(shí)的輸入和返回值為:

  • inputs:輸入,保存在 Tensor 中的鍵。數(shù)據(jù)類型必須為 tf.int64

  • emb_vector: 返回值,查詢到的 Embedding Vector。數(shù)據(jù)類型為 tf.float32

部署方案

按照圖 2 的工作流程得到集成了 HPS 的推理模型后,用戶可以根據(jù)生產(chǎn)環(huán)境選擇多種部署方案:

  • Triton TensorFlow backend[3]:Triton 推理服務(wù)器是開源推理服務(wù)軟件,可簡化 AI 推理流程,支持部署不同深度學(xué)習(xí)框架的推理模型。集成了 HPS 的 TensorFlow 推理模型可以基于 Triton TensorFlow backend 進(jìn)行部署,只需將 HPS 的 embedding lookup 視作 custom op,并在啟動(dòng) tritonserver 前用 LD_PRELOAD 將其 shared library 加載到 Triton 即可

  • TensorFlow Serving[4]:集成了 HPS 的 TensorFlow 推理模型也可方便地部署在 TensorFlow Serving 這一靈活高性能的推理服務(wù)系統(tǒng)上,HPS 的 embedding lookup 同樣可作為 custom op 被加載到 TensorFlow Serving中

如果用戶希望進(jìn)一步對集成了 HPS 的推理模型中的密集網(wǎng)絡(luò)層進(jìn)行優(yōu)化,還可以使用 tensorflow.python.compiler.tensorrt.trt_convert 對 SavedModel 進(jìn)行轉(zhuǎn)換,HPS 的 embedding lookup 可自動(dòng) fallback 到其 TensorFlow plugin 對應(yīng)的 kernels,而可被優(yōu)化的密集網(wǎng)絡(luò)層則會生成 TensorRT engine 來執(zhí)行。轉(zhuǎn)換后的 SavedModel 仍然可以使用 Triton TensorFlow backend 或 TensorFlow Serving 進(jìn)行部署。

除了使用 HPS 的 TensorFlow plugin 外,用戶還可使用 Triton HPS backend[5]。利用 Triton Ensemble Model[6],用戶可以方便地將 HPS backend 和其他 Triton backend 連接起來,搭建出 HPS 用于 embedding lookup、其他 backend 用于密集網(wǎng)絡(luò)層前向傳播的推理服務(wù)流水線。使用該方案來部署模型的工作流程如圖 3 所示:

c4e7e14a-6a5a-11ed-8abf-dac502259ad0.png

圖 3:利用 Triton Emsemble Model 部署模型的工作流程

這里密集網(wǎng)絡(luò)層部分除了可以使用 TensorFlow backend 進(jìn)行部署外,還可以使用 TensorRT backend 進(jìn)行部署,此時(shí)需要將密集網(wǎng)絡(luò)層的 SavedModel 通過 TensorFlow->ONNX->TensorRT 的轉(zhuǎn)化,得到性能優(yōu)化的 TensorRT engine。

結(jié)語

在這一期的 HugeCTR 分級參數(shù)服務(wù)器文章中,我們介紹了使用 HPS 部署包含龐大 Embedding Tables 的 TensorFlow 模型的解決方案,工作流程以及 API。更多信息,請參考 HPS 官方文檔:

https://nvidia-merlin.github.io/HugeCTR/master/hierarchical_parameter_server/index.html

在下一期中,我們將著重介紹 HugeCTR 分級參數(shù)服務(wù)器中最關(guān)鍵的組件:Embedding Cache 的設(shè)計(jì)細(xì)節(jié),敬請期待。

以下是 HugeCTR 的 Github repo 以及其他發(fā)布的文章,歡迎感興趣的朋友閱讀和反饋。Github:

https://github.com/NVIDIA-Merlin/HugeCTR (更多文章詳見 README)

[1]SOK

https://nvidia-merlin.github.io/HugeCTR/sparse_operation_kit/master/index.html

[2]HPS Configuration

https://nvidia-merlin.github.io/HugeCTR/master/hugectr_parameter_server.html#configuration

[3]Triton TensorFlow backend

https://github.com/triton-inference-server/tensorflow_backend

[4]TensorFlow Serving

https://github.com/tensorflow/serving

[5]Triton HPS backend

https://github.com/triton-inference-server/hugectr_backend/tree/main/hps_backend

[6]Triton Ensemble Model

https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models

點(diǎn)擊查看關(guān)于 HugeCTR 分級參數(shù)服務(wù)器的更多內(nèi)容

????Merlin HugeCTR 分級參數(shù)服務(wù)器簡介

?

Merlin HugeCTR 分級參數(shù)服務(wù)器簡介之二


原文標(biāo)題:Merlin HugeCTR 分級參數(shù)服務(wù)器系列之三——集成到 TensorFlow

文章出處:【微信公眾號:NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


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

    關(guān)注

    22

    文章

    3684

    瀏覽量

    90509

原文標(biāo)題:Merlin HugeCTR 分級參數(shù)服務(wù)器系列之三——集成到 TensorFlow

文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    獨(dú)立服務(wù)器與云服務(wù)器的區(qū)別

    隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,企業(yè)對于服務(wù)器的需求日益增加,而服務(wù)器市場也隨之出現(xiàn)了多種類型的產(chǎn)品,其中最常見的是獨(dú)立服務(wù)器和云服務(wù)器。這兩種服務(wù)器
    的頭像 發(fā)表于 10-12 14:34 ?145次閱讀

    Vector AUTOSAR中的TISCI服務(wù)器集成

    電子發(fā)燒友網(wǎng)站提供《Vector AUTOSAR中的TISCI服務(wù)器集成.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 11:16 ?0次下載
    Vector AUTOSAR中的TISCI<b class='flag-5'>服務(wù)器</b><b class='flag-5'>集成</b>

    SOK在手機(jī)行業(yè)的應(yīng)用案例

    通過封裝 NVIDIA Merlin HugeCTR,Sparse Operation Kit(以下簡稱 SOK)使得 TensorFlow 用戶可以借助 HugeCTR 的一些相關(guān)特
    的頭像 發(fā)表于 07-25 10:01 ?253次閱讀
    SOK在手機(jī)行業(yè)的應(yīng)用案例

    服務(wù)器和虛擬服務(wù)器的區(qū)別是什么

    服務(wù)器和虛擬服務(wù)器是兩種常見的服務(wù)器類型,它們在很多方面有相似之處,但也有一些關(guān)鍵的區(qū)別。本文將詳細(xì)介紹云服務(wù)器和虛擬服務(wù)器的區(qū)別,包括它
    的頭像 發(fā)表于 07-02 09:48 ?508次閱讀

    云存儲服務(wù)器怎么配置

    云存儲服務(wù)器配置是一個(gè)復(fù)雜的過程,涉及硬件、軟件、網(wǎng)絡(luò)等多個(gè)方面。 云存儲服務(wù)器配置概述 云存儲是一種基于互聯(lián)網(wǎng)的存儲方式,用戶可以通過網(wǎng)絡(luò)訪問存儲在遠(yuǎn)程服務(wù)器上的數(shù)據(jù)。云存儲
    的頭像 發(fā)表于 07-02 09:15 ?627次閱讀

    【算能RADXA微服務(wù)器試用體驗(yàn)】Radxa Fogwise 1684X Mini 規(guī)格

    ChatGLM2-6B、AIGC、Llama2、SAM、Whisper等超大參數(shù)模型 還有一份詳細(xì)的英文的規(guī)格表: 另外,算能RADXA微服務(wù)器服務(wù)器,還是大學(xué)生集成電路創(chuàng)新創(chuàng)業(yè)大
    發(fā)表于 02-28 11:21

    服務(wù)器遠(yuǎn)程不上服務(wù)器怎么辦?服務(wù)器無法遠(yuǎn)程的原因是什么?

    產(chǎn)生問題的原因,檢查硬盤和服務(wù)器系統(tǒng)。通過日志和檢查數(shù)據(jù)來確認(rèn)問題出 現(xiàn)的原因以及如何解決。 、端口問題 1.端口錯(cuò)誤 找回正確的端口或更換遠(yuǎn)程端口 2.端口被掃爆 更改端口,并在防火墻禁止掃爆的IP
    發(fā)表于 02-27 16:21

    linux服務(wù)器和windows服務(wù)器

    Linux服務(wù)器和Windows服務(wù)器是目前應(yīng)用最廣泛的兩種服務(wù)器操作系統(tǒng)。兩者各有優(yōu)劣,也適用于不同的應(yīng)用場景。本文將 對Linux服務(wù)器和Windows
    發(fā)表于 02-22 15:46

    服務(wù)器連接應(yīng)用解決方案

    C4201系列線對板連接服務(wù)器的連接應(yīng)用--C4201系列線對板連接,防震、防塵、防脫,電源及信號傳輸高效穩(wěn)定。
    的頭像 發(fā)表于 02-19 12:38 ?209次閱讀
    <b class='flag-5'>服務(wù)器</b>連接應(yīng)用解決方案

    數(shù)據(jù)中心服務(wù)器功率一般多大 數(shù)據(jù)中心服務(wù)器操作系統(tǒng)大類包括

    可以達(dá)到幾千瓦幾十千瓦的范圍,而大型數(shù)據(jù)中心的服務(wù)器功率則可以達(dá)到數(shù)百千瓦甚至數(shù)兆瓦的級別。 數(shù)據(jù)中心服務(wù)器操作系統(tǒng)大類包括: Windows Server
    的頭像 發(fā)表于 01-25 10:10 ?2252次閱讀

    獨(dú)立服務(wù)器和云服務(wù)器的區(qū)別

    獨(dú)立服務(wù)器和云服務(wù)器的區(qū)別是很多用戶在選擇服務(wù)器時(shí)要做的課程,那么獨(dú)立服務(wù)器和云服務(wù)器的區(qū)別有哪些呢?
    的頭像 發(fā)表于 01-17 10:58 ?770次閱讀

    站群服務(wù)器和大寬帶服務(wù)器選哪個(gè)好

    站群服務(wù)器和大寬帶服務(wù)器是兩種不同類型的服務(wù)器,各有其特點(diǎn)和適用場景。小編為您整理了站群服務(wù)器和大寬帶服務(wù)器的用途和對比情況。
    的頭像 發(fā)表于 01-05 09:52 ?332次閱讀

     物理服務(wù)器和大寬服務(wù)器怎么選

    種形式,分別是塔式服務(wù)器、機(jī)架服務(wù)器、刀片服務(wù)器,它們每一種的應(yīng)用場景均不同。例如,如果空間不夠大,可以選擇塔式服務(wù)器
    的頭像 發(fā)表于 12-20 10:50 ?490次閱讀

    物理服務(wù)器對比云服務(wù)器的優(yōu)缺點(diǎn)

    的選擇。然而,物理服務(wù)器也存在一些缺點(diǎn)。例如,因?yàn)橹荒苡邢薜財(cái)U(kuò)展服務(wù)器資源,如果業(yè)務(wù)需求超出最高性能,唯一的選擇就是重定位功能更強(qiáng)大的服務(wù)器上。同時(shí),物理
    的頭像 發(fā)表于 11-22 10:45 ?568次閱讀

    服務(wù)器并發(fā)的概念

    在編寫服務(wù)器時(shí),如果服務(wù)器的設(shè)計(jì)初衷是要可以承擔(dān)百萬、千萬的客戶端連接,那么默認(rèn)的情況下,Linux操作系統(tǒng)提供的相關(guān)配置參數(shù)(比如說進(jìn)程可分配的文件數(shù)目等)是不能夠滿足我們的程序需求的,因此需要
    的頭像 發(fā)表于 11-10 10:05 ?4227次閱讀
    <b class='flag-5'>服務(wù)器</b>并發(fā)的概念