在 Merlin HugeCTR 博文系列的第一部分,我們討論了訓(xùn)練大型深度學(xué)習(xí)推薦系統(tǒng)所面臨的挑戰(zhàn),以及 HugeCTR 如何解決這些問(wèn)題。
深度學(xué)習(xí)推薦系統(tǒng)可能包含超大型嵌入表,這些嵌入表可能會(huì)超出主機(jī)或 GPU 顯存。
我們專為推薦系統(tǒng)設(shè)計(jì)了 HugeCTR。
這是一個(gè)專門用于在 GPU 上訓(xùn)練和部署大型推薦系統(tǒng)的框架。
它為在多個(gè) GPU 或節(jié)點(diǎn)上分配單個(gè)嵌入表提供了不同的策略。
HugeCTR 是 NVIDIA Merlin] 的主要訓(xùn)練引擎,后者是一種 GPU 加速框架,旨在為推薦系統(tǒng)工作提供一站式服務(wù),從數(shù)據(jù)準(zhǔn)備、特征工程、多 GPU 訓(xùn)練到本地或云中的生產(chǎn)級(jí)推理。
訓(xùn)練性能和可擴(kuò)展性一直是 HugeCTR 的突出特性,為 MLPerf 訓(xùn)練 v0.7 推薦任務(wù)中的 NVIDIA 獲獎(jiǎng)作品提供支持,但我們近期采納了早期采用者和客戶的反饋,以幫助改進(jìn)易用性。
這篇博文將著重討論我們?cè)谝子眯苑矫娴某掷m(xù)承諾和近期改進(jìn)。
HugeCTR 是一種定制的深度學(xué)習(xí)框架,使用 CUDA C++ 編寫(xiě),專用于推薦系統(tǒng)。
起初,超參數(shù)和神經(jīng)網(wǎng)絡(luò)架構(gòu)在 JSON 配置中定義,然后通過(guò)命令行接口執(zhí)行。
表 1 匯總了命令行和 Python API 之間的主要區(qū)別。
我們建議使用 Python API,并將在后面部分中重點(diǎn)介紹。
但是,如果您對(duì)命令行界面感興趣,可以在此處找到一些示例。
表 1:HugeCTR 接口比較。
直接從 Python 配置和訓(xùn)練 HugeCTR
自 v2.3 版本起,HugeCTR 開(kāi)始提供易于使用的 Python 接口,用于定義模型架構(gòu)、超參數(shù)、數(shù)據(jù)加載程序以及訓(xùn)練循環(huán)。
此接口使 HugeCTR 更接近于數(shù)據(jù)科學(xué) Python 生態(tài)系統(tǒng)和實(shí)踐。
利用此接口的方法有兩種:
1. 類似于 Keras 的高級(jí) Python API
HugeCTR 現(xiàn)在提供了一個(gè)類似 Keras 的高級(jí) Python API 套件,用于定義模型、層、優(yōu)化器和執(zhí)行訓(xùn)練。
下文提供了一個(gè)示例代碼段。
如下所示,此 API 模擬熱門的 Keras 構(gòu)建-編譯-適應(yīng)范式。
2. 低級(jí) Python API
HugeCTR 低級(jí) Python API 允許從 JSON 文件讀取模型定義和優(yōu)化器配置,從而提供向后兼容性。
此外,此 API 允許使用 Python 循環(huán)不斷手動(dòng)執(zhí)行訓(xùn)練,從而獲得對(duì)訓(xùn)練的精細(xì)控制。
在本博客的動(dòng)手實(shí)踐部分中,我們將詳細(xì)介紹如何使用此 API 基于兩個(gè)數(shù)據(jù)集訓(xùn)練模型。
我們將在以下示例中演示此 API。
使用預(yù)訓(xùn)練的 HugeCTR 模型進(jìn)行預(yù)測(cè)
隨著 v3.0 版本的發(fā)布,HugeCTR 增加了對(duì)基于 GPU 的推理的支持,可生成許多批次的預(yù)測(cè)。
HugeCTR 將參數(shù)服務(wù)器、嵌入緩存和推理會(huì)話分離開(kāi)來(lái),以便更好地管理資源以及更有效地利用 GPU。
參數(shù)服務(wù)器用于加載和管理嵌入表。
對(duì)于超過(guò) GPU 顯存的嵌入表,參數(shù)服務(wù)器將嵌入表存儲(chǔ)在 CPU 內(nèi)存上。
嵌入緩存為模型提供嵌入查找服務(wù)?;顒?dòng)嵌入條目存儲(chǔ)在 GPU 顯存上,以便快速查找。
推理會(huì)話將這兩者與模型權(quán)重和其他參數(shù)結(jié)合起來(lái),以執(zhí)行前向傳播。
下文提供了初始化 HugeCTR 推理的函數(shù)調(diào)用序列示例。
我們將使用 config_file、embedding_cache 和 parameter_server 初始化 InferenceSession。
HugeCTR Python 推理 API 需要一個(gè) JSON 格式的推理配置文件,該文件類似于訓(xùn)練配置 JSON。
但是,在添加推理子句時(shí),我們需要省略優(yōu)化器和求解器子句。
我們還需要將輸出層更改為 Sigmoid 類型。
推理子句中的 dense_model_file 和 sparse_model_file 參數(shù)應(yīng)設(shè)置為指向由 HugeCTR 訓(xùn)練的模型文件(_dense_xxxx.model 和 0_sparse_xxxx.model)。
我們?cè)?Github 存儲(chǔ)庫(kù)中提供了多個(gè)完整示例:電子商務(wù)行為數(shù)據(jù)集和 Microsoft 新聞數(shù)據(jù)集。
我們一起來(lái)看一些示例
我們?cè)?Github 存儲(chǔ)庫(kù)中提供了 HugeCTR API 的多個(gè)端到端示例。這些筆記本基于實(shí)際數(shù)據(jù)集和應(yīng)用領(lǐng)域提供了完整的 Merlin 演練,從數(shù)據(jù)下載、預(yù)處理和特征工程到模型訓(xùn)練和推理。
1. 高級(jí) Python API 與 Criteo 數(shù)據(jù)集
Criteo 1TB Click Logs 數(shù)據(jù)集是公開(kāi)可用于推薦系統(tǒng)的大型數(shù)據(jù)集。
它包含約 40 億個(gè)示例的 1.3TB 未壓縮點(diǎn)擊日志。
在我們的示例中,數(shù)據(jù)集使用 Pandas 或 NVTabular 進(jìn)行預(yù)處理,以規(guī)范化連續(xù)特征,并對(duì)分類特征進(jìn)行分類。
之后,我們使用 HugeCTR 的高級(jí) API 訓(xùn)練深度和交叉神經(jīng)網(wǎng)絡(luò)架構(gòu)。
首先,我們定義求解器和優(yōu)化器,以使用它初始化 HugeCTR 模型。
然后,我們可以逐層添加,這類似于 TensorFlow Keras API。
最后,我們只需要調(diào)用 .fit() 函數(shù)。
2. 低級(jí) Python API 與電子商務(wù)行為數(shù)據(jù)集
在此演示筆記本中,我們將使用 REES46 營(yíng)銷平臺(tái)中的多品類商店的電子商務(wù)行為數(shù)據(jù)[/u]作為我們的數(shù)據(jù)集。
此筆記本基于 RecSys 2020 大會(huì)上的 NVIDIA 教程構(gòu)建而成。
我們使用 NVTabular 進(jìn)行特征工程和預(yù)處理,并使用 HugeCTR 訓(xùn)練 Facebook 深度學(xué)習(xí)推薦系統(tǒng)模型 (DLRM)。
我們針對(duì) Criteo 點(diǎn)擊日志數(shù)據(jù)集改編了一個(gè)示例 Json 配置文件。
需要編輯以與此數(shù)據(jù)集匹配的幾個(gè)參數(shù)為:
slot_size_array:分類變量的基數(shù),可以從 NVTabular 工作流程對(duì)象獲取。
dense_dim:密集特征的數(shù)量
slot_num:分類變量的數(shù)量
以下 Python 代碼會(huì)按批執(zhí)行參數(shù)更新。
同樣,我們針對(duì) Microsoft 新聞數(shù)據(jù)集提供了第 2 個(gè)示例。
嘗試使用 HugeCTR 的命令行和 Python API 訓(xùn)練推薦系統(tǒng)管線
我們致力于提供用戶友好且易于使用的體驗(yàn),以簡(jiǎn)化推薦系統(tǒng)工作流程。
我們近期根據(jù)早期采用者和客戶的反饋對(duì) HugeCTR 接口進(jìn)行了改進(jìn)。
HugeCTR Github 存儲(chǔ)庫(kù)提供了有關(guān)如何基于多個(gè)公共數(shù)據(jù)集(從小型到大型數(shù)據(jù)集都包含在內(nèi))使用此新接口的示例。
我們想邀請(qǐng)您針對(duì)您自己的領(lǐng)域改編這些示例,并見(jiàn)證 Merlin 的處理能力。
和往常一樣,我們希望通過(guò) Github 以及其他渠道獲得您的反饋。
這是我們 HugeCTR 系列中關(guān)于“使用 HugeCTR 的新 API 訓(xùn)練大型深度學(xué)習(xí)推薦系統(tǒng)模型”的第二篇博文。
下一篇博文將討論如何部署到生產(chǎn)。
關(guān)于作者
Vinh Nguyen 是一位深度學(xué)習(xí)的工程師和數(shù)據(jù)科學(xué)家,發(fā)表了 50 多篇科學(xué)文章,引文超過(guò) 2500 篇。在 NVIDIA ,他的工作涉及廣泛的深度學(xué)習(xí)和人工智能應(yīng)用,包括語(yǔ)音、語(yǔ)言和視覺(jué)處理以及推薦系統(tǒng)。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4856瀏覽量
102711 -
API
+關(guān)注
關(guān)注
2文章
1473瀏覽量
61750 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5466瀏覽量
120891
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論