HugeCTR は、大規模な深層学習モデルのトレーニングと推論のために設計された GPU 高速化レコメンダー フレームワークです。
設計目標:
注: HugeCTR の使用に関して質問がある場合は、問題を提出するか、Slack チャンネルに参加してよりインタラクティブなディスカッションを行ってください。
HugeCTR は、次のようなさまざまな機能をサポートしています。
最新の機能強化については、リリース ノートを参照してください。
Python インターフェイスを使用してモデルをすばやくトレーニングしたい場合は、次の手順を実行します。
次のコマンドを実行して、ローカル ホスト ディレクトリ (/your/host/dir がマウントされている) で NGC コンテナを起動します。
docker run --gpus=all --rm -it --cap-add SYS_NICE -v /your/host/dir:/your/container/dir -w /your/container/dir -it -u $(id -u):$(id -g) nvcr.io/nvidia/merlin/merlin-hugectr:24.06
注: /your/host/dirディレクトリは、/your/container/dirディレクトリと同じように表示されます。 /your/host/dirディレクトリは開始ディレクトリでもあります。
注: HugeCTR は NCCL を使用してランク間でデータを共有し、NCCL は IPC 用の共有メモリと固定 (ページロック) システム メモリ リソースを必要とする場合があります。 docker run
コマンドで次のオプションを発行して、これらのリソースを増やすことをお勧めします。
-shm-size=1g -ulimit memlock=-1
合成データセットを生成するための簡単な Python スクリプトを作成します。
# dcn_parquet_generate.py
import hugectr
from hugectr.tools import DataGeneratorParams, DataGenerator
data_generator_params = DataGeneratorParams(
format = hugectr.DataReaderType_t.Parquet,
label_dim = 1,
dense_dim = 13,
num_slot = 26,
i64_input_key = False,
source = "./dcn_parquet/file_list.txt",
eval_source = "./dcn_parquet/file_list_test.txt",
slot_size_array = [39884, 39043, 17289, 7420, 20263, 3, 7120, 1543, 39884, 39043, 17289, 7420,
20263, 3, 7120, 1543, 63, 63, 39884, 39043, 17289, 7420, 20263, 3, 7120,
1543 ],
dist_type = hugectr.Distribution_t.PowerLaw,
power_law_type = hugectr.PowerLaw_t.Short)
data_generator = DataGenerator(data_generator_params)
data_generator.generate()
次のコマンドを実行して、DCN モデルの Parquet データセットを生成します。
python dcn_parquet_generate.py
注: 生成されたデータセットは、トレーニング データと評価データが含まれるフォルダー./dcn_parquet
に存在します。
トレーニング用の簡単な Python スクリプトを作成します。
# dcn_parquet_train.py
import hugectr
from mpi4py import MPI
solver = hugectr.CreateSolver(max_eval_batches = 1280,
batchsize_eval = 1024,
batchsize = 1024,
lr = 0.001,
vvgpu = [[0]],
repeat_dataset = True)
reader = hugectr.DataReaderParams(data_reader_type = hugectr.DataReaderType_t.Parquet,
source = ["./dcn_parquet/file_list.txt"],
eval_source = "./dcn_parquet/file_list_test.txt",
slot_size_array = [39884, 39043, 17289, 7420, 20263, 3, 7120, 1543, 39884, 39043, 17289, 7420,
20263, 3, 7120, 1543, 63, 63, 39884, 39043, 17289, 7420, 20263, 3, 7120, 1543 ])
optimizer = hugectr.CreateOptimizer(optimizer_type = hugectr.Optimizer_t.Adam,
update_type = hugectr.Update_t.Global)
model = hugectr.Model(solver, reader, optimizer)
model.add(hugectr.Input(label_dim = 1, label_name = "label",
dense_dim = 13, dense_name = "dense",
data_reader_sparse_param_array =
[hugectr.DataReaderSparseParam("data1", 1, True, 26)]))
model.add(hugectr.SparseEmbedding(embedding_type = hugectr.Embedding_t.DistributedSlotSparseEmbeddingHash,
workspace_size_per_gpu_in_mb = 75,
embedding_vec_size = 16,
combiner = "sum",
sparse_embedding_name = "sparse_embedding1",
bottom_name = "data1",
optimizer = optimizer))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.Reshape,
bottom_names = ["sparse_embedding1"],
top_names = ["reshape1"],
leading_dim=416))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.Concat,
bottom_names = ["reshape1", "dense"], top_names = ["concat1"]))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.MultiCross,
bottom_names = ["concat1"],
top_names = ["multicross1"],
num_layers=6))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.InnerProduct,
bottom_names = ["concat1"],
top_names = ["fc1"],
num_output=1024))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.ReLU,
bottom_names = ["fc1"],
top_names = ["relu1"]))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.Dropout,
bottom_names = ["relu1"],
top_names = ["dropout1"],
dropout_rate=0.5))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.Concat,
bottom_names = ["dropout1", "multicross1"],
top_names = ["concat2"]))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.InnerProduct,
bottom_names = ["concat2"],
top_names = ["fc2"],
num_output=1))
model.add(hugectr.DenseLayer(layer_type = hugectr.Layer_t.BinaryCrossEntropyLoss,
bottom_names = ["fc2", "label"],
top_names = ["loss"]))
model.compile()
model.summary()
model.graph_to_json(graph_config_file = "dcn.json")
model.fit(max_iter = 5120, display = 200, eval_interval = 1000, snapshot = 5000, snapshot_prefix = "dcn")
注: この Python スクリプトに関して、合成データセットへのパスが正しいことを確認してください。 data_reader_type
、 check_type
、 label_dim
、 dense_dim
、およびdata_reader_sparse_param_array
、生成されたデータセットと一致している必要があります。
次のコマンドを実行してモデルをトレーニングします。
python dcn_parquet_train.py
注: ランダムに生成されたデータセットが使用されているため、評価 AUC 値が正しくないことが推測されます。トレーニングが完了すると、ダンプされたグラフ JSON、保存されたモデルの重み、およびオプティマイザーの状態を含むファイルが生成されます。
詳細については、「HugeCTR ユーザー ガイド」を参照してください。
以下を使用して重要な HugeCTR コンポーネントをエクスポートすることで、HugeCTR を直接使用できない外部開発者をサポートできます。
問題が発生したり質問がある場合は、https://github.com/NVIDIA/HugeCTR/issues にアクセスして問題を送信し、必要な解決策と回答を提供してください。 HugeCTR ロードマップをさらに前進させるために、このアンケートを使用してレコメンダー システム パイプラインに関するすべての詳細を共有することをお勧めします。
HugeCTR はオープンソース プロジェクトであるため、一般からの貢献を歓迎します。皆様のご貢献により、HugeCTR の品質とパフォーマンスを向上し続けることができます。貢献方法については、HugeCTR 貢献者ガイドを参照してください。
ウェブページ |
---|
NVIDIA マーリン |
NVIDIA HugeCTR |
Yingcan Wei、Matthias Langer、Fan Yu、Minseok Lee、Jie Liu、Ji Shi、Zehuan Wang 、「大規模なディープ レコメンデーション モデルのための GPU に特化した推論パラメータ サーバー」、第 16 回 ACM Conference on Recommender Systems の議事録、pp.101 408-419、2022。
Zehuan Wang、Yingcan Wei、Minseok Lee、Matthias Langer、Fan Yu、Jie Liu、Shijie Liu、Daniel G. Abel、Xu Guo、Jianbing Dong、Ji Shi、Kunlun Li 、「Merlin HugeCTR: GPU で高速化されたレコメンダー システムのトレーニングと推論」 、「レコメンダー システムに関する第 16 回 ACM 会議議事録」、pp. 534-537、2022。
カンファレンス / ウェブサイト | タイトル | 日付 | スピーカー | 言語 |
---|---|---|---|---|
ACM RecSys 2022 | 大規模なディープ レコメンデーション モデル向けの GPU に特化した推論パラメータ サーバー | 2022年9月 | マティアス・ランガー | 英語 |
ショートビデオ エピソード 1 | Merlin HugeCTR:GPU 加速的推荐系统架 | 2022年5月 | ジョーイ・ワン | 中国語 |
ショートビデオ エピソード 2 | HugeCTR 分级パラメータサービス务器の加速方法 | 2022年5月 | ジョーイ・ワン | 中国語 |
ショートビデオ エピソード 3 | HugeCTR SOK を使用して TensorFlow を加速する | 2022年5月 | 郭宝石 | 中国語 |
GTC スピン 2022 | Merlin HugeCTR: GPU 埋め込みキャッシュを使用した分散階層推論パラメーター サーバー | 2022年3月 | マティアス・ランガー、インカン・ウェイ、ユー・ファン | 英語 |
アプサラ 2021 | GPU 推荐系统 Merlin | 2021年10月 | ジョーイ・ワン | 中国語 |
GTC 2021 春 | Tencent が Merlin GPU Recommender フレームワークに広告システムを導入した方法を学ぶ | 2021年4月 | シャンティン・コン、ジョーイ・ワン | 英語 |
GTC 2021 春 | Merlin HugeCTR: パフォーマンスの最適化の詳細 | 2021年4月 | イ・ミンソク | 英語 |
GTC 2021 春 | HugeCTR 埋め込みを TensorFlow と統合する | 2021年4月 | ドン・ジャンビン | 英語 |
GTC 中国 2020 | MERLIN HUGECTR :深入研究性能优化 | 2020年10月 | イ・ミンソク | 英語 |
GTC 中国 2020 | 性能向上 7 + 倍の高性能 GPU 推荐加速系の落地实现 | 2020年10月 | 香庭孔 | 中国語 |
GTC 中国 2020 | GPU EMBEDDING CACHE の使用による CTR 暇过程の加速 | 2020年10月 | ファン・ユー | 中国語 |
GTC 中国 2020 | HUGECTR EMBEDDING を TENSORFLOW に集約 | 2020年10月 | ドン・ジャンビン | 中国語 |
GTC 2020 春 | HugeCTR: 高パフォーマンスのクリックスルー率推定トレーニング | 2020年3月 | ミンソク・イ、ジョーイ・ワン | 英語 |
GTC 中国 2019 | HUGECTR: GPU 加速の推荐系训练 | 2019年10月 | ジョーイ・ワン | 中国語 |
カンファレンス / ウェブサイト | タイトル | 日付 | 著者 | 言語 |
---|---|---|---|---|
微信ブログ | Merlin HugeCTR 分级パラメータ服务器系列之三:集成到TensorFlow | 2022年11月 | キングスリー・リュー | 中国語 |
NVIDIA 開発ブログ | スケーリング推奨事項 Merlin 階層パラメーター サーバーによるシステム推論/Merlin の使用 分层パラメータ服务器扩展推荐系统確保 | 2022年8月 | シャシャンク・ヴェルマ、ウェンウェン・ガオ、インカン・ウェイ、マティアス・ランガー、ジェリー・シー、ファン・ユー、キングスリー・リウ、ミンソク・リー | 英語/中国語 |
NVIDIA 開発ブログ | Merlin HugeCTR Sparse Operation Kit 系列之二 | 2022年6月 | クンルン・リー | 中国語 |
NVIDIA 開発ブログ | Merlin HugeCTR スパース オペレーション キット 系列之一 | 2022年3月 | Gems Guo、Jianbing Dong | 中国語 |
微信ブログ | Merlin HugeCTR 分级パラメータ数服务器系列之二 | 2022年3月 | インカン・ウェイ、マティアス・ランガー、ジェリー・シー | 中国語 |
微信ブログ | Merlin HugeCTR 分级パラメータ数服务器系列之一 | 2022年1月 | インカン・ウェイ、ジェリー・シー | 中国語 |
NVIDIA 開発ブログ | HugeCTR TensorFlow 埋め込みプラグインによる埋め込みの高速化 | 2021年9月 | ヴィン・グエン、アン・スペンサー、ジョーイ・ワン、ジャンビン・ドン | 英語 |
ミディアム.com | Meituan の機械学習プラットフォームの最適化: Jun Huang 氏へのインタビュー | 2021年9月 | シェン・ルオとベネディクト・シファーラー | 英語 |
ミディアム.com | Tencent の広告レコメンダー システムの設計と開発を主導: Xiangting Kong 氏へのインタビュー | 2021年9月 | シャンティン・コン、アン・スペンサー | 英語 |
NVIDIA 開発ブログ | 扩展和加速大型深度学习推荐系统 – HugeCTR 系列第 1 部 | 2021年6月 | イ・ミンソク | 中国語 |
NVIDIA 開発ブログ | Merlin HugeCTR の Python API を使用した大型深度学推荐モデル – HugeCTR 系列第 2 部 | 2021年6月 | ヴィン・グエン | 中国語 |
ミディアム.com | Merlin HugeCTR の Python API を使用した大規模な深層学習レコメンダー モデルのトレーニング — HugeCTR シリーズ パート 2 | 2021年5月 | ミンソク・リー、ジョーイ・ワン、ビン・グエン、アシシュ・サルダナ | 英語 |
ミディアム.com | 大規模な深層学習レコメンダー システムのスケーリングと高速化 — HugeCTR シリーズ パート 1 | 2021年5月 | イ・ミンソク | 英語 |
IRS 2020 | Merlin: GPU 高速レコメンデーション フレームワーク | 2020年8月 | オールドリッジなどでも | 英語 |
NVIDIA 開発ブログ | NVIDIA Merlin HugeCTR の紹介: レコメンダー システム専用のトレーニング フレームワーク | 2020年7月 | ミンソク・リーとジョーイ・ワン | 英語 |