Merlin HugeCTR v3.5 发布说明
2022-04-17 15:26
Merlin HugeCTR(以下简称 HugeCTR)是 GPU 加速的推荐程序框架,旨在在多个 GPU 和节点之间分配训练并估计点击率(Click-through rate)。
此次 v3.5 更新涉及的模块主要为:
HugeCTR 分级参数服务器
(https://github.com/NVIDIA-Merlin/HugeCTR/blob/master/docs/hugectr_parameter_server.md)
HugeCTR Sparse Operation Kit
(https://github.com/NVIDIA-Merlin/HugeCTR/tree/master/sparse_operation_kit)
HugeCTR Python API
(https://github.com/NVIDIA-Merlin/HugeCTR/blob/master/docs/python_interface.md)
相关介绍:
HugeCTR 分级参数服务器系列之一
HugeCTR 分级参数服务器系列之二
HugeCTR SOK 系列之一
V3.5 版本新增内容
HugeCTR 分级参数服务器(以下简称 HPS)已被单独封装和导出为库:
我们封装了 HPS 的相关接口并将其作为独立库提供。此外,我们提供 HPS Python API 并通过 Jupyter nontebook 演示其用法。更多信息请参考分层参数服务器文档(https://nvidia-
merlin.github.io/HugeCTR/master/hugectr_parameter_server.html)和 HPS 演示
(https://github.com/NVIDIA-Merlin/HugeCTR/blob/master/notebooks/hps_demo.ipynb)。
新增了 HPS Triton 后端
HPS 后端是一个用于嵌入向量在大规模嵌入表上查找的框架,旨在通过将嵌入表和嵌入缓存与深度推荐模型的端到端推理管道。更多信息请参考分层参数服务器
(https://github.com/triton-inference-server/hugectr_backend/tree/main/samples )。
SOK 已在 pypi 上发布
(https://pypi.org/project/merlin-sok/):
用户可以通过 `pip install merlin-sok` 安装 SOK。
联合损失函数和多任务训练支持:
我们现已在训练中支持联合损失,以便用户可以使用多个标签和不同权重的任务进行训练。API 扩展允许用户定义多个标签、损失层和相应的权重。用户可以根据需要在训练迭代之间更改权重。添加了 MMoE 示例以显示用法
(https://github.com/NVIDIA-Merlin/HugeCTR/tree/master/samples/mmoe)
HugeCTR 网页版文档:
现在用户可以访问网页版文档了
(https://nvidia-merlin.github.io/HugeCTR/master/)。
ONNX 转换器优化:
我们启用将MultiCrossEntropyLoss 和 CrossEntropyLoss 层转换为 ONNX 以支持多标签推理。更多信息请参考 HugeCTR to ONNX Converter
(https://github.com/NVIDIA-Merlin/HugeCTR/tree/master/onnx_converter)。
HPS 性能优化:
在 HPS 中使用更好的方法来确定数据库后端中的分区号。
HDFS python API 优化:
简化 DataSourceParams 以便用户在真正需要之前无需提供所有路径。现在用户只需在创建求解器时传递一次 DataSourceParams。后续的路径将根据 DataSourceParams 设置自动判断本地路径或 HDFS 路径。
错误修复:
HugeCTR 输入层现在可以接受维度大于等于 1000 的稠密部分了。
已知问题
HugeCTR 使用 NCCL 在 rank 之间共享数据,并且 NCCL 可能需要共享系统内存用于 IPC 和固定(页面锁定)系统内存资源。在容器内使用 NCCL 时,建议您通过发出以下命令 (-shm-size=1g -ulimit memlock=-1) 来增加这些资源。
另见 NCCL 的 已知问题
https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/troubleshooting.html#sharing-data 。还有 GitHub 问题
https://github.com/NVIDIA-Merlin/HugeCTR/issues/243。
目前即使目标 Kafka broker 无响应,KafkaProducers 启动也会成功。为了避免与来自 Kafka 的流模型更新相关的数据丢失,您必须确保有足够数量的 Kafka brokers 启动、正常工作并且可以从运行 HugeCTR 的节点访问。
文件列表中的数据文件数量应不小于数据读取器的数量。否则,不同的 worker 将被映射到同一个文件,导致数据加载不会按预期进行。
联合损失训练暂不支持对每个损失层使用不同的正则化器。
联合损失训练暂不不支持动态损失权重。