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