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 HugeCTR |
Yingcan Wei, Matthias Langer, Fan Yu, Minseok Lee, Jie Liu, Ji Shi 및 Zehuan Wang , "대규모 심층 추천 모델을 위한 GPU 전문 추론 매개변수 서버", 추천 시스템에 관한 제16차 ACM 컨퍼런스 진행, 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 및 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 추천 프레임워크에 광고 시스템을 배포한 방법을 알아보세요. | 2021년 4월 | 샹팅 콩, 조이 왕 | 영어 |
GTC 2021년 봄 | Merlin HugeCTR: 성능 최적화에 대한 심층 분석 | 2021년 4월 | 이민석 | 영어 |
GTC 2021년 봄 | TensorFlow와 HugeCTR 임베딩 통합 | 2021년 4월 | 동 지안빙 | 영어 |
GTC 중국 2020 | MERLIN HUGECTR : 深入研究性能优化 | 2020년 10월 | 이민석 | 영어 |
GTC 중국 2020 | 性能提升 7倍 + 的高性能 GPU 广告推荐加速系统的落地实现 | 2020년 10월 | 샹팅콩 | 중국어 |
GTC 중국 2020 | 使用 GPU 임베딩 캐시 加速 CTR 推理过程 | 2020년 10월 | 판 유 | 중국어 |
GTC 중국 2020 | 将 HUGECTR 임베딩 集成于 TENSORFLOW | 2020년 10월 | 동 지안빙 | 중국어 |
GTC 2020 봄 | HugeCTR: 고성능 클릭률 추정 교육 | 2020년 3월 | 이민석, 조이 왕 | 영어 |
GTC 중국 2019 | HUGECTR: GPU 加速的推荐系统训练 | 2019년 10월 | 조이 왕 | 중국어 |
컨퍼런스 / 웹사이트 | 제목 | 날짜 | 저자 | 언어 |
---|---|---|---|---|
위챗 블로그 | Merlin HugeCTR 分级参数服务器系列之三:集成到TensorFlow | 2022년 11월 | 킹슬리 리우 | 중국어 |
엔비디아 개발 블로그 | Merlin 계층적 매개변수 서버/使用을 사용한 확장 추천 시스템 추론 Merlin 分层参数服务器扩展推荐系统推리 | 2022년 8월 | Shashank Verma, Wenwen Gao, Yingcan Wei, Matthias Langer, Jerry Shi, Fan Yu, Kingsley Liu, 이민석 | 영어/중국어 |
엔비디아 개발 블로그 | Merlin HugeCTR Sparse Operation Kit 系列之two | 2022년 6월 | 리쿤룬 | 중국어 |
엔비디아 개발 블로그 | Merlin HugeCTR 희소 연산 키트 系列之一 | 2022년 3월 | 보석 구오, Jianbing Dong | 중국어 |
위챗 블로그 | Merlin HugeCTR 分级参数服务器系列之two | 2022년 3월 | 잉칸 웨이, 마티아스 랑거, 제리 시 | 중국어 |
위챗 블로그 | Merlin HugeCTR 分级参数服务器系列之一 | 2022년 1월 | 잉칸 웨이, 제리 시 | 중국어 |
엔비디아 개발 블로그 | HugeCTR TensorFlow Embedding 플러그인으로 임베딩 가속화 | 2021년 9월 | Vinh Nguyen, Ann Spencer, Joey Wang, Jianbing Dong | 영어 |
Medium.com | Meituan의 기계 학습 플랫폼 최적화: Jun Huang과의 인터뷰 | 2021년 9월 | 루오 성(Sheng Luo)과 베네딕트 쉬퍼러(Benedikt Schifferer) | 영어 |
Medium.com | Tencent의 광고 추천 시스템 설계 및 개발 주도: Xiangting Kong과의 인터뷰 | 2021년 9월 | 시앙팅 콩, 앤 스펜서 | 영어 |
엔비디아 개발 블로그 | 扩展과加速大型深系统 – HugeCTR 系列第 1부분 | 2021년 6월 | 이민석 | 중국어 |
엔비디아 개발 블로그 | Merlin HugeCTR의 Python API를 사용하여 대학의 Python API를 사용하세요 – HugeCTR 系列第 2 부분 | 2021년 6월 | 빈 응우옌 | 중국어 |
Medium.com | Merlin HugeCTR의 Python API를 사용하여 대규모 딥 러닝 추천 모델 훈련 — HugeCTR 시리즈 2부 | 2021년 5월 | 이민석, Joey Wang, Vinh Nguyen, Ashish Sardana | 영어 |
Medium.com | 대규모 딥 러닝 추천 시스템 확장 및 가속화 — HugeCTR 시리즈 1부 | 2021년 5월 | 이민석 | 영어 |
국세청 2020 | Merlin: GPU 가속 권장 프레임워크 | 2020년 8월 | 올드리지 등도 마찬가지다. | 영어 |
엔비디아 개발 블로그 | NVIDIA Merlin HugeCTR 소개: 추천 시스템 전용 교육 프레임워크 | 2020년 7월 | 이민석과 조이 왕 | 영어 |