HugeCTR é uma estrutura de recomendação acelerada por GPU projetada para treinamento e inferência de grandes modelos de aprendizado profundo.
Metas de projeto:
NOTA : Se você tiver alguma dúvida sobre o uso do HugeCTR, registre um problema ou junte-se ao nosso canal Slack para ter discussões mais interativas.
HugeCTR oferece suporte a uma variedade de recursos, incluindo os seguintes:
Para saber mais sobre nossos aprimoramentos mais recentes, consulte nossas notas de versão.
Se quiser treinar rapidamente um modelo usando a interface Python, faça o seguinte:
Inicie um contêiner NGC com seu diretório de host local (/your/host/dir montado) executando o seguinte comando:
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
NOTA : O diretório /your/host/dir é tão visível quanto o diretório /your/container/dir . O diretório /your/host/dir também é seu diretório inicial.
NOTA : HugeCTR usa NCCL para compartilhar dados entre classificações, e NCCL pode exigir memória compartilhada para IPC e recursos de memória do sistema fixados (bloqueados por página). É recomendável aumentar esses recursos emitindo as seguintes opções no comando docker run
.
-shm-size=1g -ulimit memlock=-1
Escreva um script Python simples para gerar um conjunto de dados sintético:
# 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()
Gere o conjunto de dados Parquet para seu modelo DCN executando o seguinte comando:
python dcn_parquet_generate.py
NOTA : O conjunto de dados gerado residirá na pasta ./dcn_parquet
, que contém dados de treinamento e avaliação.
Escreva um script Python simples para treinamento:
# 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")
NOTA : Certifique-se de que os caminhos para os conjuntos de dados sintéticos estejam corretos em relação a este script Python. data_reader_type
, check_type
, label_dim
, dense_dim
e data_reader_sparse_param_array
devem ser consistentes com o conjunto de dados gerado.
Treine o modelo executando o seguinte comando:
python dcn_parquet_train.py
NOTA : Presume-se que o valor de avaliação AUC está incorreto, uma vez que estão sendo usados conjuntos de dados gerados aleatoriamente. Quando o treinamento for concluído, serão gerados arquivos que contêm o JSON do gráfico despejado, os pesos do modelo salvos e os estados do otimizador.
Para obter mais informações, consulte o Guia do usuário HugeCTR.
Podemos oferecer suporte a desenvolvedores externos que não podem usar o HugeCTR diretamente, exportando componentes importantes do HugeCTR usando:
Se você encontrar algum problema ou tiver dúvidas, acesse https://github.com/NVIDIA/HugeCTR/issues e envie um problema para que possamos fornecer as soluções e respostas necessárias. Para avançar ainda mais no Roadmap HugeCTR, encorajamos você a compartilhar todos os detalhes sobre o pipeline do seu sistema de recomendação usando esta pesquisa.
Sendo o HugeCTR um projeto de código aberto, aceitamos contribuições do público em geral. Com suas contribuições, podemos continuar a melhorar a qualidade e o desempenho do HugeCTR. Para saber como contribuir, consulte nosso Guia do Colaborador HugeCTR.
Páginas da web |
---|
NVIDIA Merlin |
NVIDIA HugeCTR |
Yingcan Wei, Matthias Langer, Fan Yu, Minseok Lee, Jie Liu, Ji Shi e Zehuan Wang , "Um servidor de parâmetros de inferência especializado em GPU para modelos de recomendação profunda em grande escala", Anais da 16ª Conferência ACM sobre Sistemas de Recomendação, 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 e Kunlun Li , "Merlin HugeCTR: treinamento e inferência do sistema de recomendação acelerado por GPU ," Anais da 16ª Conferência ACM sobre Sistemas de Recomendação, pp. 534-537, 2022.
Conferência / Site | Título | Data | Palestrante | Linguagem |
---|---|---|---|---|
ACM RecSys 2022 | Um servidor de parâmetros de inferência especializado em GPU para modelos de recomendação profunda em grande escala | Setembro de 2022 | Matias Langer | Inglês |
Vídeos curtos, episódio 1 | Merlin HugeCTR:GPU 加速的推荐系统框架 | Maio de 2022 | Joey Wang | 中文 |
Vídeos curtos, episódio 2 | HugeCTR | Maio de 2022 | Joey Wang | 中文 |
Vídeos curtos, episódio 3 | Usando o HugeCTR SOK e o TensorFlow | Maio de 2022 | Gemas Guo | 中文 |
GTC Sping 2022 | Merlin HugeCTR: servidor de parâmetros de inferência hierárquica distribuído usando cache de incorporação de GPU | Março de 2022 | Matthias Langer, Yingcan Wei, Yu Fan | Inglês |
APSARA 2021 | GPU 推荐系统 Merlin | Outubro de 2021 | Joey Wang | 中文 |
GTC Primavera 2021 | Saiba como a Tencent implantou um sistema de publicidade no Merlin GPU Recommender Framework | Abril de 2021 | Xiangting Kong, Joey Wang | Inglês |
GTC Primavera 2021 | Merlin HugeCTR: mergulho profundo na otimização de desempenho | Abril de 2021 | Minseok Lee | Inglês |
GTC Primavera 2021 | Integre a incorporação do HugeCTR com o TensorFlow | Abril de 2021 | Jianbingdong | Inglês |
GTC China 2020 | MERLIN HUGECTR:深入研究性能优化 | Outubro de 2020 | Minseok Lee | Inglês |
GTC China 2020 | 性能提升 7 倍 + 的高性能 GPU 广告推荐加速系统的落地实现 | Outubro de 2020 | Xiangting Kong | 中文 |
GTC China 2020 | Use GPU EMBEDDING CACHE e CTR 推理过程 | Outubro de 2020 | Fã Yu | 中文 |
GTC China 2020 | 将 HUGECTR EMBEDDING 集成于 TENSORFLOW | Outubro de 2020 | Jianbingdong | 中文 |
GTC Primavera 2020 | HugeCTR: treinamento de estimativa de taxa de cliques de alto desempenho | Março de 2020 | Minseok Lee, Joey Wang | Inglês |
GTC China 2019 | HUGECTR: GPU 加速的推荐系统训练 | Outubro de 2019 | Joey Wang | 中文 |
Conferência / Site | Título | Data | Autores | Linguagem |
---|---|---|---|---|
Blog do Wechat | Merlin HugeCTR 分级参数服务器系列之三: 集成到TensorFlow | Novembro de 2022 | Kingsley Liu | 中文 |
Devblog da NVIDIA | Escalando a inferência do sistema de recomendação com o servidor de parâmetros hierárquicos Merlin | Agosto de 2022 | Shashank Verma, Wenwen Gao, Yingcan Wei, Matthias Langer, Jerry Shi, Fan Yu, Kingsley Liu, Minseok Lee | Inglês/中文 |
Devblog da NVIDIA | Kit de operação esparsa Merlin HugeCTR | Junho de 2022 | Kunlun Li | 中文 |
Devblog da NVIDIA | Kit de operação esparsa Merlin HugeCTR | Março de 2022 | Gemas Guo, Jianbing Dong | 中文 |
Blog do Wechat | Merlin HugeCTR | Março de 2022 | Yingcan Wei, Matthias Langer, Jerry Shi | 中文 |
Blog do Wechat | Merlin HugeCTR 级参数服务器系列之一 | Janeiro de 2022 | Yingcan Wei, Jerry Shi | 中文 |
Devblog da NVIDIA | Acelerando a incorporação com o plug-in de incorporação HugeCTR TensorFlow | Setembro de 2021 | Vinh Nguyen, Ann Spencer, Joey Wang e Jianbing Dong | Inglês |
médio.com | Otimizando a plataforma de aprendizado de máquina da Meituan: uma entrevista com Jun Huang | Setembro de 2021 | Sheng Luo e Benedikt Schifferer | Inglês |
médio.com | Liderando design e desenvolvimento do sistema de recomendação de publicidade na Tencent: uma entrevista com Xiangting Kong | Setembro de 2021 | Xiangting Kong, Ann Spencer | Inglês |
Devblog da NVIDIA | 扩展和加速大型深度学习推荐系统 – HugeCTR 系列第 1 部分 | Junho de 2021 | Minseok Lee | 中文 |
Devblog da NVIDIA | Usando Merlin HugeCTR e API Python | Junho de 2021 | Vinh Nguyen | 中文 |
médio.com | Treinamento de grandes modelos de recomendação de aprendizado profundo com APIs Python do Merlin HugeCTR - Série HugeCTR Parte 2 | Maio de 2021 | Minseok Lee, Joey Wang, Vinh Nguyen e Ashish Sardana | Inglês |
médio.com | Dimensionando e acelerando grandes sistemas de recomendação de aprendizado profundo - Série HugeCTR Parte 1 | Maio de 2021 | Minseok Lee | Inglês |
IRS 2020 | Merlin: uma estrutura de recomendação acelerada por GPU | agosto de 2020 | Até mesmo Oldridge etc. | Inglês |
Devblog da NVIDIA | Apresentando NVIDIA Merlin HugeCTR: uma estrutura de treinamento dedicada a sistemas de recomendação | Julho de 2020 | Minseok Lee e Joey Wang | Inglês |