在 Merlin HugeCTR 博文系列的第一部分,我們討論了訓練大型深度學習推薦系統(tǒng)所面臨的挑戰(zhàn),以及 HugeCTR 如何解決這些問題。
深度學習推薦系統(tǒng)可能包含超大型嵌入表,這些嵌入表可能會超出主機或 GPU 顯存。
我們專為推薦系統(tǒng)設計了 HugeCTR。
這是一個專門用于在 GPU 上訓練和部署大型推薦系統(tǒng)的框架。
它為在多個 GPU 或節(jié)點上分配單個嵌入表提供了不同的策略。
HugeCTR 是 NVIDIA Merlin] 的主要訓練引擎,后者是一種 GPU 加速框架,旨在為推薦系統(tǒng)工作提供一站式服務,從數據準備、特征工程、多 GPU 訓練到本地或云中的生產級推理。
訓練性能和可擴展性一直是 HugeCTR 的突出特性,為 MLPerf 訓練 v0.7 推薦任務中的 NVIDIA 獲獎作品提供支持,但我們近期采納了早期采用者和客戶的反饋,以幫助改進易用性。
這篇博文將著重討論我們在易用性方面的持續(xù)承諾和近期改進。
HugeCTR 是一種定制的深度學習框架,使用 CUDA C++ 編寫,專用于推薦系統(tǒng)。
起初,超參數和神經網絡架構在 JSON 配置中定義,然后通過命令行接口執(zhí)行。
表 1 匯總了命令行和 Python API 之間的主要區(qū)別。
我們建議使用 Python API,并將在后面部分中重點介紹。
但是,如果您對命令行界面感興趣,可以在此處找到一些示例。

表 1:HugeCTR 接口比較。
直接從 Python 配置和訓練 HugeCTR
自 v2.3 版本起,HugeCTR 開始提供易于使用的 Python 接口,用于定義模型架構、超參數、數據加載程序以及訓練循環(huán)。
此接口使 HugeCTR 更接近于數據科學 Python 生態(tài)系統(tǒng)和實踐。
利用此接口的方法有兩種:
1. 類似于 Keras 的高級 Python API
HugeCTR 現(xiàn)在提供了一個類似 Keras 的高級 Python API 套件,用于定義模型、層、優(yōu)化器和執(zhí)行訓練。
下文提供了一個示例代碼段。
如下所示,此 API 模擬熱門的 Keras 構建-編譯-適應范式。
2. 低級 Python API
HugeCTR 低級 Python API 允許從 JSON 文件讀取模型定義和優(yōu)化器配置,從而提供向后兼容性。
此外,此 API 允許使用 Python 循環(huán)不斷手動執(zhí)行訓練,從而獲得對訓練的精細控制。
在本博客的動手實踐部分中,我們將詳細介紹如何使用此 API 基于兩個數據集訓練模型。
我們將在以下示例中演示此 API。
使用預訓練的 HugeCTR 模型進行預測
隨著 v3.0 版本的發(fā)布,HugeCTR 增加了對基于 GPU 的推理的支持,可生成許多批次的預測。
HugeCTR 將參數服務器、嵌入緩存和推理會話分離開來,以便更好地管理資源以及更有效地利用 GPU。
參數服務器用于加載和管理嵌入表。
對于超過 GPU 顯存的嵌入表,參數服務器將嵌入表存儲在 CPU 內存上。
嵌入緩存為模型提供嵌入查找服務?;顒忧度霔l目存儲在 GPU 顯存上,以便快速查找。
推理會話將這兩者與模型權重和其他參數結合起來,以執(zhí)行前向傳播。
下文提供了初始化 HugeCTR 推理的函數調用序列示例。
我們將使用 config_file、embedding_cache 和 parameter_server 初始化 InferenceSession。
HugeCTR Python 推理 API 需要一個 JSON 格式的推理配置文件,該文件類似于訓練配置 JSON。
但是,在添加推理子句時,我們需要省略優(yōu)化器和求解器子句。
我們還需要將輸出層更改為 Sigmoid 類型。
推理子句中的 dense_model_file 和 sparse_model_file 參數應設置為指向由 HugeCTR 訓練的模型文件(_dense_xxxx.model 和 0_sparse_xxxx.model)。
我們在 Github 存儲庫中提供了多個完整示例:電子商務行為數據集和 Microsoft 新聞數據集。
我們一起來看一些示例
我們在 Github 存儲庫中提供了 HugeCTR API 的多個端到端示例。這些筆記本基于實際數據集和應用領域提供了完整的 Merlin 演練,從數據下載、預處理和特征工程到模型訓練和推理。
1. 高級 Python API 與 Criteo 數據集
Criteo 1TB Click Logs 數據集是公開可用于推薦系統(tǒng)的大型數據集。
它包含約 40 億個示例的 1.3TB 未壓縮點擊日志。
在我們的示例中,數據集使用 Pandas 或 NVTabular 進行預處理,以規(guī)范化連續(xù)特征,并對分類特征進行分類。
之后,我們使用 HugeCTR 的高級 API 訓練深度和交叉神經網絡架構。
首先,我們定義求解器和優(yōu)化器,以使用它初始化 HugeCTR 模型。
然后,我們可以逐層添加,這類似于 TensorFlow Keras API。
最后,我們只需要調用 .fit() 函數。
2. 低級 Python API 與電子商務行為數據集
在此演示筆記本中,我們將使用 REES46 營銷平臺中的多品類商店的電子商務行為數據[/u]作為我們的數據集。
此筆記本基于 RecSys 2020 大會上的 NVIDIA 教程構建而成。
我們使用 NVTabular 進行特征工程和預處理,并使用 HugeCTR 訓練 Facebook 深度學習推薦系統(tǒng)模型 (DLRM)。
我們針對 Criteo 點擊日志數據集改編了一個示例 Json 配置文件。
需要編輯以與此數據集匹配的幾個參數為:
slot_size_array:分類變量的基數,可以從 NVTabular 工作流程對象獲取。
dense_dim:密集特征的數量
slot_num:分類變量的數量
以下 Python 代碼會按批執(zhí)行參數更新。

同樣,我們針對 Microsoft 新聞數據集提供了第 2 個示例。
嘗試使用 HugeCTR 的命令行和 Python API 訓練推薦系統(tǒng)管線
我們致力于提供用戶友好且易于使用的體驗,以簡化推薦系統(tǒng)工作流程。
我們近期根據早期采用者和客戶的反饋對 HugeCTR 接口進行了改進。
HugeCTR Github 存儲庫提供了有關如何基于多個公共數據集(從小型到大型數據集都包含在內)使用此新接口的示例。
我們想邀請您針對您自己的領域改編這些示例,并見證 Merlin 的處理能力。
和往常一樣,我們希望通過 Github 以及其他渠道獲得您的反饋。
這是我們 HugeCTR 系列中關于“使用 HugeCTR 的新 API 訓練大型深度學習推薦系統(tǒng)模型”的第二篇博文。
下一篇博文將討論如何部署到生產。
關于作者
Vinh Nguyen 是一位深度學習的工程師和數據科學家,發(fā)表了 50 多篇科學文章,引文超過 2500 篇。在 NVIDIA ,他的工作涉及廣泛的深度學習和人工智能應用,包括語音、語言和視覺處理以及推薦系統(tǒng)。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
5444瀏覽量
108612 -
API
+關注
關注
2文章
1969瀏覽量
65839 -
深度學習
+關注
關注
73文章
5587瀏覽量
123766
發(fā)布評論請先 登錄
龍芯中科與文心系列模型開展深度技術合作
云知聲深度參與三項大模型國家標準編寫
從Open Model Zoo下載的FastSeg大型公共預訓練模型,無法導入名稱是怎么回事?
小白學大模型:訓練大語言模型的深度指南

HugeCTR系列第2部分:訓練大型深度學習推薦模型
評論