NVIDIA Merlin HugeCTR(以下簡稱 HugeCTR)是 GPU 加速的推薦框架,旨在在多個 GPU 和節(jié)點之間分配訓(xùn)練并估計點擊率(Click-through rate)。作為一個開源框架,HugeCTR 能夠優(yōu)化 NVIDIA GPU 上的大規(guī)模推薦。近期,HugeCTR 發(fā)布了 v4.3 版本,讓我們一同了解一下此次更新的詳細(xì)內(nèi)容!
新增內(nèi)容
HugeCTR 第三代 Embedding 更新:
-
第三代 Embedding 功能優(yōu)化:自從在 v3.7 中引入新一代 HugeCTR Embedding 以來,進行了一些更新和優(yōu)化,包括代碼重構(gòu)以提高可用性。此版本的增強功能如下:
-
EmbeddingPlanner 類替換為 EmbeddingCollectionConfig 類。有關(guān) API 的示例,請參閱 test/embedding_collection_test 目錄。
-
優(yōu)化了一些 API ,以支持訓(xùn)練過程中模型導(dǎo)入和導(dǎo)出。這些方法是 Model.embedding_dump(path: str, table_names: list[str]) 和 Model.embedding_load(path: str, list[str])。路徑參數(shù)是文件系統(tǒng)中的一個目錄,您可以將模型權(quán)重存儲到該目錄或從中加載權(quán)重。table_names 參數(shù)是 Embedding 表名的列表。
圖 1:HugeCTR 分層參數(shù)服務(wù)器(HPS)架構(gòu)
HugeCTR 分層參數(shù)服務(wù)器(HPS)更新:
-
RedisClusterBackend 現(xiàn)在支持 TLS/SSL 通信。相關(guān)示例代碼,請參閱分層參數(shù)服務(wù)器演示筆記本。該筆記本更新了分步說明,向您展示如何設(shè)置 HPS 以使用帶(和不帶)加密的 Redis。同時, 易失性數(shù)據(jù)庫參數(shù) 文檔對 enable_tls、tls_ca_certificate、tls_client_certificate、tls_client_key 和 tls_server_name_identification 等參數(shù)進行了更新。
-
對 Embedding 緩存添加了靜態(tài)表支持。當(dāng) Embedding 表可以完全放在 GPU 內(nèi)存中時,靜態(tài)表是合適的。在這種情況下,靜態(tài)表比 Embedding 緩存查找快三倍以上。當(dāng)然,靜態(tài)表將不支持 Embedding 的更新。
-
用于 TensorFlow 與 TensorFlow-TensorRT 集成的 HPS 插件 (TF-TRT):有關(guān)示例代碼請參閱部署 SavedModel 筆記本
-
Redis 或 Kafka 使用的更改:更新了用 RedisClusterBackend 和用 Kafka 參數(shù)流部署模型的方式。使用了 HPS 分區(qū)選擇算法的第三方庫以提高性能。新算法可以為易失性數(shù)據(jù)庫生成不同的分區(qū)分配。
-
新易失性數(shù)據(jù)庫類型:此版本將 multi_process_hash_map 的 db_type 值添加到分層參數(shù)服務(wù)器。此數(shù)據(jù)庫類型支持使用共享內(nèi)存和 /dev/shm 設(shè)備文件跨進程的共享 Embedding。運行 HPS 的多個進程可以讀取和寫入同一個哈希映射。
-
HPS Redis 后端的優(yōu)化:在此版本中,分層參數(shù)服務(wù)器可以并行打開多個連接到每個 Redis 節(jié)點。此增強功能使 HPS 能夠利用 Redis 服務(wù)器 I/O 模塊中的重疊處理優(yōu)化。此外,HPS 現(xiàn)在可以利用 Redis 散列標(biāo)簽來共同定位 Embedding 值和元數(shù)據(jù)。此增強功能可以減少對 Redis 節(jié)點的訪問次數(shù)以及完成事務(wù)所需的每個節(jié)點往返通信的次數(shù)。
-
向 ONNX 模型轉(zhuǎn)換器添加了多任務(wù)模型支持:此版本向 ONNX 轉(zhuǎn)換器添加了對多任務(wù)模型的支持。此版本還包括對 preprocess_census.py 腳本的更新。
-
刪除了對一些庫的依賴。
Layer 以及優(yōu)化器的更新以及新的模型支持:
-
增加了對動態(tài) Embedding 表 (DET) 的 SGD、Momentum SGD、Nesterov Momentum、AdaGrad、RMS-Prop、Adam 和 FTRL 優(yōu)化器的支持。示例代碼請參考目錄中的test_embedding_table_optimizer.cpp 文件 test/utest/embedding_collection/ 目錄。
-
添加了對稠密網(wǎng)絡(luò) FTRL 優(yōu)化器的支持。
-
支持了 BERT 和其變體:包括對 MultiHeadAttention 層并為序列掩碼層。有關(guān)詳細(xì)信息,請參閱 samples/bst 目錄。
-
Deep & Cross Network Layer 版本 2 支持:有關(guān)概念信息,請參閱 https://arxiv.org/abs/2008.13535。多交叉層文檔也已更新。
-
MLP Layer 更新:添加了一個帶有 hugectr.Layer_t.MLP 類的 MLP 層。該層非常靈活,可以更輕松地使用一組融合的全連接層并啟用相關(guān)優(yōu)化。對于 MLPLayer 中的每個融合全連接層,輸出維度、偏差和激活函數(shù)都是可調(diào)的。MLPLayer 支持 FP32、FP16 和 TF32 數(shù)據(jù)類型。有關(guān)示例請參閱 dlrm 目錄中的 dgx_a100_mlp.py 以了解如何使用該層。
Sparse Operation Kit(SOK) 的更新:
-
DeepRec 中 Sparse Operation Kit 的增強功能:此版本包括對 Sparse Operation Kit 的更新,以提高 DeepRec 中 Embedding 變量查找操作的性能。lookup_sparse() 函數(shù)的 API 已更改以刪除熱度參數(shù)。lookup_sparse() 函數(shù)得到優(yōu)化,可以動態(tài)計算非零元素的數(shù)量。有關(guān)詳細(xì)信息,請參閱 sparse_operation_kit 目錄 。
-
Sparse Operation Kit 可從 PyPi 安裝:1.1.4 版的 SOK 可從 PyPi 安裝了。
HugeCTR I/O 模塊更新:
-
支持了在離線推理中從遠(yuǎn)端文件系統(tǒng)(HDFS, S3 等)中讀取推理數(shù)據(jù):HugeCTR 除了訓(xùn)練時讀取外,現(xiàn)在還支持離線推理時通過 DataSourceParams API 從遠(yuǎn)程文件系統(tǒng)如 HDFS 和 S3 讀取數(shù)據(jù)。HugeCTR Training and Inference with Remote File System Example 已更新以展示這個新功能。
圖 2:HugeCTR I/O 模塊功能架構(gòu)
文檔和示例更新:
-
為了幫助用戶配置 Jupyter Notebook 的運行環(huán)境,新增了運行示例筆記本 。
-
提高了數(shù)據(jù)預(yù)處理腳本的易用性。
-
MLP 層的文檔更新了。
-
新增了 2022 年的 HugeCTR 相關(guān)演講和博客:HugeCTR 演講和博客 。
修復(fù)的問題
-
修復(fù)了 MultiProcessHashMapBackend 在使用基于 JSON 文件的配置時阻止配置共享內(nèi)存大小的錯誤。
-
在調(diào)用某些 HugeCTR API 之前具有 NUMA 綁定的原始 CUDA 設(shè)備現(xiàn)在可以正確恢復(fù)。
-
修復(fù)了使用宏 DEBUG 安裝 HugeCTR 時偶爾出現(xiàn)的 Embedding CUDA 內(nèi)核啟動失敗的問題。
-
修復(fù)了與 TensorFlow v2.1.0 及更高版本相關(guān)的 SOK 構(gòu)建錯誤。
-
修復(fù)了與 CUDA 12 相關(guān)的編譯錯誤。
已知問題
以下是目前 HugeCTR 存在的已知問題,我們將在之后的版本中盡快修復(fù):
-
如果客戶端代碼調(diào)用 RMM rmm::set_current_device_resource() 方法或 rmm::set_current_device_resource() 方法,HugeCTR 可能會出現(xiàn)運行時錯誤。該錯誤是由于 HugeCTR 中的 Parquet 數(shù)據(jù)讀取器也調(diào)用了 rmm::set_current_device_resource(),因此該設(shè)備對同一進程中的其他庫可見。參考 GitHub 問題 #356 以獲取更多信息。作為解決方法,如果您知道 rmm::set_current_device_resource() 被 HugeCTR 以外的客戶端代碼調(diào)用,您可以將環(huán)境變量 HCTR_RMM_SETTABLE 設(shè)置為 0 以防止 HugeCTR 設(shè)置自定義 RMM 設(shè)備資源。但要小心,因為該設(shè)置會降低 Parquet 讀取的性能。
-
HugeCTR 使用 NCCL 在隊列之間共享數(shù)據(jù),并且 NCCL 可能需要共享系統(tǒng)內(nèi)存用于 IPC 和固定(頁面鎖定)系統(tǒng)內(nèi)存資源。如果您在容器內(nèi)使用 NCCL,請在啟動容器時通過指定參數(shù) -shm-size=1g -ulimit memlock=-1 來增加這些資源。
-
即使目標(biāo) Kafka 代理沒有響應(yīng),KafkaProducers 啟動也會成功。為避免與來自 Kafka 的流模型更新相關(guān)的數(shù)據(jù)丟失,您必須確保足夠數(shù)量的 Kafka 代理正在運行、正常運行,并且可以從運行 HugeCTR 的節(jié)點訪問。
-
文件列表中的數(shù)據(jù)文件數(shù)量應(yīng)大于或等于數(shù)據(jù)讀取器工作人員的數(shù)量。否則,不同的 worker 會映射到同一個文件,并且數(shù)據(jù)加載不會按預(yù)期進行。
-
暫時不支持使用正則化器的聯(lián)合損失訓(xùn)練。
-
暫時不支持將 Adam 優(yōu)化器狀態(tài)導(dǎo)出到 AWS S3。
HugeCTR v4.3 發(fā)布說明,已更新至 GitHub 和文檔:
GitHub:
https://github.com/NVIDIA-Merlin/HugeCTR
文檔:
https://nvidia-merlin.github.io/HugeCTR/master/hugectr_user_guide.html
從 2023 年一月起,HugeCTR 的版本號將從數(shù)字版本(v.4.4)變更為年歷版本(v23.01)。
原文標(biāo)題:Merlin HugeCTR v4.3 發(fā)布說明
文章出處:【微信公眾號:NVIDIA英偉達】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
英偉達
+關(guān)注
關(guān)注
22文章
3720瀏覽量
90682
原文標(biāo)題:Merlin HugeCTR v4.3 發(fā)布說明
文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論