HugeCTR est un framework de recommandation accéléré par GPU conçu pour la formation et l'inférence de grands modèles d'apprentissage profond.
Objectifs de conception :
REMARQUE : Si vous avez des questions sur l'utilisation de HugeCTR, veuillez signaler un problème ou rejoindre notre chaîne Slack pour avoir des discussions plus interactives.
HugeCTR prend en charge une variété de fonctionnalités, notamment les suivantes :
Pour en savoir plus sur nos dernières améliorations, reportez-vous à nos notes de version.
Si vous souhaitez entraîner rapidement un modèle à l'aide de l'interface Python, procédez comme suit :
Démarrez un conteneur NGC avec votre répertoire hôte local (/your/host/dir monté) en exécutant la commande suivante :
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
REMARQUE : Le répertoire /your/host/dir est tout aussi visible que le répertoire /your/container/dir . Le répertoire /your/host/dir est également votre répertoire de départ.
REMARQUE : HugeCTR utilise NCCL pour partager des données entre les rangs, et NCCL peut nécessiter une mémoire partagée pour les ressources de mémoire système IPC et épinglées (verrouillées par page). Il est recommandé d'augmenter ces ressources en exécutant les options suivantes dans la commande docker run
.
-shm-size=1g -ulimit memlock=-1
Écrivez un script Python simple pour générer un ensemble de données synthétiques :
# 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()
Générez l'ensemble de données Parquet pour votre modèle DCN en exécutant la commande suivante :
python dcn_parquet_generate.py
REMARQUE : L'ensemble de données généré résidera dans le dossier ./dcn_parquet
, qui contient les données de formation et d'évaluation.
Écrivez un script Python simple pour la formation :
# 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")
REMARQUE : assurez-vous que les chemins d'accès aux ensembles de données synthétiques sont corrects par rapport à ce script Python. data_reader_type
, check_type
, label_dim
, dense_dim
et data_reader_sparse_param_array
doivent être cohérents avec l'ensemble de données généré.
Entraînez le modèle en exécutant la commande suivante :
python dcn_parquet_train.py
REMARQUE : Il est présumé que la valeur d'évaluation de l'AUC est incorrecte puisque des ensembles de données générés de manière aléatoire sont utilisés. Une fois la formation terminée, les fichiers contenant le graphique JSON vidé, les poids de modèle enregistrés et les états de l'optimiseur seront générés.
Pour plus d'informations, reportez-vous au Guide de l'utilisateur HugeCTR.
Nous sommes en mesure de prendre en charge les développeurs externes qui ne peuvent pas utiliser HugeCTR directement en exportant des composants HugeCTR importants à l'aide de :
Si vous rencontrez des problèmes ou avez des questions, accédez à https://github.com/NVIDIA/HugeCTR/issues et soumettez un problème afin que nous puissions vous fournir les résolutions et réponses nécessaires. Pour faire progresser davantage la feuille de route HugeCTR, nous vous encourageons à partager tous les détails concernant votre pipeline de système de recommandation à l'aide de cette enquête.
HugeCTR étant un projet open source, nous apprécions les contributions du grand public. Grâce à vos contributions, nous pouvons continuer à améliorer la qualité et les performances de HugeCTR. Pour savoir comment contribuer, reportez-vous à notre Guide du contributeur HugeCTR.
Pages Web |
---|
NVIDIA Merlin |
NVIDIA Énorme CTR |
Yingcan Wei, Matthias Langer, Fan Yu, Minseok Lee, Jie Liu, Ji Shi et Zehuan Wang , "Un serveur de paramètres d'inférence spécialisé dans les GPU pour les modèles de recommandation approfondie à grande échelle", Actes de la 16e conférence ACM sur les systèmes de recommandation, pp. 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 et Kunlun Li , "Merlin HugeCTR : formation et inférence du système de recommandation accéléré par GPU , " Actes de la 16e conférence ACM sur les systèmes de recommandation, pp. 534-537, 2022.
Conférence / Site Web | Titre | Date | Conférencier | Langue |
---|---|---|---|---|
ACM RecSys 2022 | Un serveur de paramètres d'inférence spécialisé dans les GPU pour les modèles de recommandation approfondie à grande échelle | septembre 2022 | Matthias Langer | Anglais |
Courtes vidéos épisode 1 | Merlin HugeCTR:GPU | mai 2022 | Joey Wang | Chine |
Courtes vidéos épisode 2 | HugeCTR 分级参数服务器如何加速推理 | mai 2022 | Joey Wang | Chine |
Courtes vidéos épisode 3 | Avec HugeCTR SOK et TensorFlow | mai 2022 | Gemmes Guo | Chine |
GTC Printemps 2022 | Merlin HugeCTR : serveur de paramètres d'inférence hiérarchique distribué utilisant le cache d'intégration GPU | mars 2022 | Matthias Langer, Yingcan Wei, Yu Fan | Anglais |
APSARA 2021 | GPU pour Merlin | octobre 2021 | Joey Wang | Chine |
CGV Printemps 2021 | Découvrez comment Tencent a déployé un système de publicité sur le framework de recommandation GPU Merlin | avril 2021 | Xiangting Kong, Joey Wang | Anglais |
CGV Printemps 2021 | Merlin HugeCTR : plongée approfondie dans l'optimisation des performances | avril 2021 | Minseok Lee | Anglais |
CGV Printemps 2021 | Intégrer l'intégration HugeCTR avec TensorFlow | avril 2021 | Jianbing Dong | Anglais |
CGV Chine 2020 | MERLIN HUGECTR :深入研究性能优化 | octobre 2020 | Minseok Lee | Anglais |
CGV Chine 2020 | Carte graphique 7 pouces + carte graphique GPU et carte graphique | octobre 2020 | Xiangting Kong | Chine |
CGV Chine 2020 | Pour GPU EMBEDDING CACHE et CTR | octobre 2020 | Fan Yu | Chine |
CGV Chine 2020 | Dans HUGECTR EMBEDDING avec TENSORFLOW | octobre 2020 | Jianbing Dong | Chine |
CGV Printemps 2020 | HugeCTR : formation à l'estimation du taux de clics hautes performances | mars 2020 | Minseok Lee, Joey Wang | Anglais |
CGV Chine 2019 | HUGECTR : GPU 加速的推荐系统训练 | octobre 2019 | Joey Wang | Chine |
Conférence / Site Web | Titre | Date | Auteurs | Langue |
---|---|---|---|---|
Blog Wechat | Merlin HugeCTR est basé sur TensorFlow | novembre 2022 | Kingsley Liu | Chine |
Blog de développement NVIDIA | Mise à l'échelle de l'inférence du système de recommandation avec le serveur de paramètres hiérarchiques Merlin/使用 Merlin | août 2022 | Shashank Verma, Wenwen Gao, Yingcan Wei, Matthias Langer, Jerry Shi, Fan Yu, Kingsley Liu, Minseok Lee | Anglais/中文 |
Blog de développement NVIDIA | Kit d'opérations dispersées Merlin HugeCTR | juin 2022 | Kunlun Li | Chine |
Blog de développement NVIDIA | Merlin HugeCTR Sparse Operation Kit | mars 2022 | Gemmes Guo, Jianbing Dong | Chine |
Blog Wechat | Merlin HugeCTR 分级参数服务器系列之二 | mars 2022 | Yingcan Wei, Matthias Langer, Jerry Shi | Chine |
Blog Wechat | Merlin HugeCTR 分级参数服务器系列之一 | janvier 2022 | Yingcan Wei, Jerry Shi | Chine |
Blog de développement NVIDIA | Accélération de l'intégration avec le plugin d'intégration HugeCTR TensorFlow | septembre 2021 | Vinh Nguyen, Ann Spencer, Joey Wang et Jianbing Dong | Anglais |
moyen.com | Optimisation de la plateforme d'apprentissage automatique de Meituan : entretien avec Jun Huang | septembre 2021 | Sheng Luo et Benedikt Schifferer | Anglais |
moyen.com | Diriger la conception et le développement du système de recommandation publicitaire chez Tencent : une entrevue avec Xiangting Kong | septembre 2021 | Xiangting Kong, Ann Spencer | Anglais |
Blog de développement NVIDIA | 扩展和加速大型深度学习推荐系统 – HugeCTR il y a 1 jour | juin 2021 | Minseok Lee | Chine |
Blog de développement NVIDIA | Merlin HugeCTR et l'API Python publiées par Merlin HugeCTR – HugeCTR version 2 en version 2 | juin 2021 | Vinh Nguyen | Chine |
moyen.com | Formation de grands modèles de recommandation de Deep Learning avec les API Python de Merlin HugeCTR — Série HugeCTR, partie 2 | mai 2021 | Minseok Lee, Joey Wang, Vinh Nguyen et Ashish Sardana | Anglais |
moyen.com | Mise à l'échelle et accélération des grands systèmes de recommandation de Deep Learning — Série HugeCTR, partie 1 | mai 2021 | Minseok Lee | Anglais |
IRS 2020 | Merlin : un cadre de recommandation accéléré par GPU | août 2020 | Même Oldridge, etc. | Anglais |
Blog de développement NVIDIA | Présentation de NVIDIA Merlin HugeCTR : un cadre de formation dédié aux systèmes de recommandation | juillet 2020 | Minseok Lee et Joey Wang | Anglais |