HugeCTR ist ein GPU-beschleunigtes Empfehlungsframework, das für das Training und die Inferenz großer Deep-Learning-Modelle entwickelt wurde.
Designziele:
HINWEIS : Wenn Sie Fragen zur Verwendung von HugeCTR haben, melden Sie bitte ein Problem oder treten Sie unserem Slack-Kanal bei, um weitere interaktive Diskussionen zu führen.
HugeCTR unterstützt eine Vielzahl von Funktionen, darunter die folgenden:
Weitere Informationen zu unseren neuesten Verbesserungen finden Sie in unseren Versionshinweisen.
Wenn Sie ein Modell mithilfe der Python-Schnittstelle schnell trainieren möchten, gehen Sie wie folgt vor:
Starten Sie einen NGC-Container mit Ihrem lokalen Hostverzeichnis (/your/host/dir gemountet), indem Sie den folgenden Befehl ausführen:
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
HINWEIS : Das Verzeichnis /your/host/dir ist genauso sichtbar wie das Verzeichnis /your/container/dir . Das Verzeichnis /your/host/dir ist auch Ihr Startverzeichnis.
HINWEIS : HugeCTR verwendet NCCL, um Daten zwischen den Rängen auszutauschen, und NCCL erfordert möglicherweise gemeinsam genutzten Speicher für IPC und angeheftete (seitengesperrte) Systemspeicherressourcen. Es wird empfohlen, diese Ressourcen zu erhöhen, indem Sie die folgenden Optionen im docker run
-Befehl ausgeben.
-shm-size=1g -ulimit memlock=-1
Schreiben Sie ein einfaches Python-Skript, um einen synthetischen Datensatz zu generieren:
# 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()
Generieren Sie den Parquet-Datensatz für Ihr DCN-Modell, indem Sie den folgenden Befehl ausführen:
python dcn_parquet_generate.py
HINWEIS : Der generierte Datensatz befindet sich im Ordner ./dcn_parquet
, der Trainings- und Bewertungsdaten enthält.
Schreiben Sie ein einfaches Python-Skript für das Training:
# 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")
HINWEIS : Stellen Sie sicher, dass die Pfade zu den synthetischen Datensätzen in Bezug auf dieses Python-Skript korrekt sind. data_reader_type
, check_type
, label_dim
, dense_dim
und data_reader_sparse_param_array
sollten mit dem generierten Datensatz konsistent sein.
Trainieren Sie das Modell, indem Sie den folgenden Befehl ausführen:
python dcn_parquet_train.py
HINWEIS : Es wird davon ausgegangen, dass der AUC-Wert der Auswertung falsch ist, da zufällig generierte Datensätze verwendet werden. Wenn das Training abgeschlossen ist, werden Dateien generiert, die das ausgegebene Diagramm-JSON, gespeicherte Modellgewichte und Optimiererzustände enthalten.
Weitere Informationen finden Sie im HugeCTR-Benutzerhandbuch.
Wir können externe Entwickler unterstützen, die HugeCTR nicht direkt verwenden können, indem wir wichtige HugeCTR-Komponenten exportieren mit:
Wenn Sie auf Probleme stoßen oder Fragen haben, gehen Sie zu https://github.com/NVIDIA/HugeCTR/issues und reichen Sie ein Problem ein, damit wir Ihnen die notwendigen Lösungen und Antworten liefern können. Um die HugeCTR-Roadmap weiter voranzutreiben, empfehlen wir Ihnen, mithilfe dieser Umfrage alle Details zu Ihrer Empfehlungssystem-Pipeline mitzuteilen.
Da HugeCTR ein Open-Source-Projekt ist, freuen wir uns über Beiträge der breiten Öffentlichkeit. Mit Ihren Beiträgen können wir die Qualität und Leistung von HugeCTR weiter verbessern. Informationen zum Mitwirken finden Sie in unserem HugeCTR Contributor Guide.
Webseiten |
---|
NVIDIA Merlin |
NVIDIA HugeCTR |
Yingcan Wei, Matthias Langer, Fan Yu, Minseok Lee, Jie Liu, Ji Shi und Zehuan Wang , „A GPU-specialised Inference Parameter Server for Large-Scale Deep Recommendation Models“, Proceedings of the 16th ACM Conference on Recommender Systems, S. 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 und Kunlun Li , „Merlin HugeCTR: GPU-beschleunigtes Empfehlungssystemtraining und Inferenz , „Proceedings of the 16th ACM Conference on Recommender Systems, S. 534-537, 2022.
Konferenz / Website | Titel | Datum | Lautsprecher | Sprache |
---|---|---|---|---|
ACM RecSys 2022 | Ein GPU-spezialisierter Inferenzparameterserver für umfangreiche Deep-Empfehlungsmodelle | September 2022 | Matthias Langer | Englisch |
Kurzvideos Folge 1 | Merlin HugeCTR:GPU 加速的推荐系统框架 | Mai 2022 | Joey Wang | 中文 |
Kurzvideos Folge 2 | HugeCTR 分级参数服务器如何加速推理 | Mai 2022 | Joey Wang | 中文 |
Kurzvideos Folge 3 | Verwenden Sie HugeCTR SOK und TensorFlow | Mai 2022 | Edelsteine Guo | 中文 |
AGB Frühjahr 2022 | Merlin HugeCTR: Verteilter hierarchischer Inferenzparameterserver mit GPU-Einbettungscache | März 2022 | Matthias Langer, Yingcan Wei, Yu Fan | Englisch |
APSARA 2021 | GPU von Merlin | Okt. 2021 | Joey Wang | 中文 |
AGB Frühjahr 2021 | Erfahren Sie, wie Tencent ein Werbesystem auf dem Merlin GPU Recommender Framework implementiert hat | April 2021 | Xiangting Kong, Joey Wang | Englisch |
AGB Frühjahr 2021 | Merlin HugeCTR: Tauchen Sie tief in die Leistungsoptimierung ein | April 2021 | Minseok Lee | Englisch |
AGB Frühjahr 2021 | Integrieren Sie HugeCTR Embedding mit TensorFlow | April 2021 | Jianbing Dong | Englisch |
AGB China 2020 | MERLIN HUGECTR: 深入研究性能优化 | Okt. 2020 | Minseok Lee | Englisch |
AGB China 2020 | Mehr als 7 Monate + GPU-Unterstützung | Okt. 2020 | Xiangting Kong | 中文 |
AGB China 2020 | Die GPU-EMBEDDING-CACHE- und CTR-Funktion wird verwendet | Okt. 2020 | Fan Yu | 中文 |
AGB China 2020 | 将 HUGECTR EMBEDDING ist eine TENSORFLOW-Methode | Okt. 2020 | Jianbing Dong | 中文 |
AGB Frühjahr 2020 | HugeCTR: Leistungsstarkes Training zur Schätzung der Klickrate | März 2020 | Minseok Lee, Joey Wang | Englisch |
AGB China 2019 | HUGECTR: GPU-Unterstützung | Okt. 2019 | Joey Wang | 中文 |
Konferenz / Website | Titel | Datum | Autoren | Sprache |
---|---|---|---|---|
Wechat-Blog | Merlin HugeCTR hat eine neue Version von TensorFlow entwickelt | Nov. 2022 | Kingsley Liu | 中文 |
NVIDIA Devblog | Inferenz des Skalierungsempfehlungssystems mit Merlin Hierarchical Parameter Server/使用 Merlin 分层参数服务器扩展推荐系统推理 | August 2022 | Shashank Verma, Wenwen Gao, Yingcan Wei, Matthias Langer, Jerry Shi, Fan Yu, Kingsley Liu, Minseok Lee | Englisch/中文 |
NVIDIA Devblog | Merlin HugeCTR Sparse Operation Kit ist nicht verfügbar | Juni 2022 | Kunlun Li | 中文 |
NVIDIA Devblog | Merlin HugeCTR Sparse Operation Kit ist nicht verfügbar | März 2022 | Edelsteine Guo, Jianbing Dong | 中文 |
Wechat-Blog | Merlin HugeCTR hat eine neue Version von Merlin HugeCTR entwickelt | März 2022 | Yingcan Wei, Matthias Langer, Jerry Shi | 中文 |
Wechat-Blog | Merlin HugeCTR hat eine neue Version von Merlin HugeCTR erstellt | Januar 2022 | Yingcan Wei, Jerry Shi | 中文 |
NVIDIA Devblog | Beschleunigen Sie das Einbetten mit dem HugeCTR TensorFlow Embedding Plugin | September 2021 | Vinh Nguyen, Ann Spencer, Joey Wang und Jianbing Dong | Englisch |
medium.com | Optimierung der maschinellen Lernplattform von Meituan: Ein Interview mit Jun Huang | September 2021 | Sheng Luo und Benedikt Schifferer | Englisch |
medium.com | Leitendes Design und Entwicklung des Werbeempfehlungssystems bei Tencent: Ein Interview mit Xiangting Kong | September 2021 | Xiangting Kong, Ann Spencer | Englisch |
NVIDIA Devblog | 扩展和加速大型深度学习推荐系统 – HugeCTR 系列第 1 部分 | Juni 2021 | Minseok Lee | 中文 |
NVIDIA Devblog | Die Merlin HugeCTR-Python-API-App hat die neueste Version von HugeCTR erstellt | Juni 2021 | Vinh Nguyen | 中文 |
medium.com | Training großer Deep-Learning-Empfehlungsmodelle mit den Python-APIs von Merlin HugeCTR – HugeCTR-Serie Teil 2 | Mai 2021 | Minseok Lee, Joey Wang, Vinh Nguyen und Ashish Sardana | Englisch |
medium.com | Skalierung und Beschleunigung großer Deep-Learning-Empfehlungssysteme – HugeCTR-Serie Teil 1 | Mai 2021 | Minseok Lee | Englisch |
IRS 2020 | Merlin: Ein GPU-beschleunigtes Empfehlungs-Framework | August 2020 | Sogar Oldridge usw. | Englisch |
NVIDIA Devblog | Wir stellen vor: NVIDIA Merlin HugeCTR: Ein Trainings-Framework speziell für Empfehlungssysteme | Juli 2020 | Minseok Lee und Joey Wang | Englisch |