加速计算

HugeCTR v3.6 & v3.7 发布说明

Merlin HugeCTR(以下简称 HugeCTR)是 GPU 加速的推荐程序框架,旨在在多个 GPU 和节点之间分配训练并估计点击率(Click-through rate)。

V3.6 版本新增内容

  1. Concat 层现已支持 3D 输入张量:

在之前的版本中,Concat 层只能处理 2D 输入张量。现在输入可以是 3D 并且可以沿轴 1 和轴 2 连接。 

  1. Parquet 数据读取器现已支持读取稠密特征中的列表:

在以前的版本中,HugeCTR 假设每个稠密特征只有一个值,并且数据类型必须是 float32,也就是是一种标量类型。而现在用户可以将 float32 或者[float32]用于稠密特征,这意味着每个稠密特征可以有多个值。

  1. 在 Merlin 容器中重新启用 HDFS:

Merlin 容器中的 HDFS 支持现在是一个可选依赖项。有关详细信息,请参阅核心功能文档中的 HDFS 支持部分。(https://nvidia-merlin.github.io/HugeCTR/v3.6/hugectr_core_features.html#hdfs-support)

  1. 评估指标中增加 AUC 评估:

以前版本的 HugeCTR 仅针对二进制分类的情况计算 AUC。在这个版本中,我们支持多标签分类的 AUC。我们使用 sklearn 的 AUC 实现作为参考(https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html)。我们实现了未加权的宏观平均策略,这是 sklearn 中的默认策略。用户可以更改输入层的“label_dim”参数以启用多标签分类,我们的实现将在该场景中计算多标签 AUC。

  1. 日志输出格式升级:

我们已将默认日志输出格式升级为毫秒级。

  1. 文档更新:
    1. 发布说明现已添加到网络文档中,可通过以下链接访问(https://nvidia-merlin.github.io/HugeCTR/master/release_notes.html)。
    2. HPS(分级参数服务器)配置手册

我们为 HPS 添加了一个配置手册(https://nvidia-merlin.github.io/HugeCTR/master/hugectr_parameter_server.html#configuration-book) 。这本配置手册总结了 Python API 和 JSON 格式的所有参数及其用法。

  1. 与使用多模态数据相关的示例笔记本在标题多模态示例笔记本下的导航中重新排布(https://nvidia-merlin.github.io/HugeCTR/master/notebooks/multi-modal -data/index.html),旨在提供更好的阅读体验。
  2. 我们更清楚地描述了SOK 提供的功能以及介绍了如何使用它们。

V3.7 版本新增内容:

  1. 第三代 Embedding 开发者预览:

在这个版本中,我们引入了第三代 Embedding 的开发者预览版本,与先前的 Embedding 相比,第三代 Embedding 主要有三个变化。首先,它允许用户融合具有不同 Embedding 向量大小的 Embedding Table,从而提高了灵活性和性能。其次,它现在支持 concat combiner ,以及在同一个 Embedding Table 上的不同 slot 来进行查找。最后,Embedding Collection 的引入有力地支持了自定义 Embedding Table 的放置,包括数据并行和模型并行。通过提供一个 JSON 文件,您可以根据您的指定配置更改 Embedding Table 的放置策略。更详细的使用方法,清查阅实例 https://github.com/NVIDIA-Merlin/HugeCTR/tree/v3.7/test/embedding_collection_test 下的 dlrm_train.py 脚本。

  1. 分级参数服务器性能改进:
    1. Kafka:模型参数现在以节省带宽的多路复用数据格式存储在 Kafka 中,这种数据格式极大地提高了吞吐量。在我们的测试中,每个 Kafka Broker 的传输速度高达 1.1 Gbps。
    2. HashMap 后端:并行和单线程的 hashmap 实现已被新的统一实现取代。这个新的实现使用了一种新的基于内存池的分配方法,它极大地提高了插入性能,而不会降低召回性能。与之前的实现相比,大批量插入操作的速度提高了 4 倍。
    3. 压缩的日志:用户可以在 Triton 服务启动时配置多级日志输出,从而提高在线推理的吞吐量。
    4. 简化配置:HugeCTR 后端将推理参数服务器相关配置(ps.json)和 Triton 配置(config.pbtxt)完全解耦,避免了 Triton 中的重复配置。
    5. Embedding 更新的冻结功能:HugeCTR 后端已经支持通过 Triton 的模型控制接口只更新模型的密集部分,从而避免 Embedding 的在重复在线更新。
  1. 离线推理可用性的增强

线程池的大小现在可以配置了,这对于研究异步更新场景中的 Embedding Cache 性能十分有用。更多信息,请参阅分层参数服务器配置https://nvidia-merlin.github.io/HugeCTR/master/hugectr_parameter_server.html#configuration

  1. 数据生成器性能提升

现在可以指定 `num_threads` 参数以并行化 `Norm` 数据集生成。

  1. 评估指标改进
  2. 多节点环境中的 AverageLoss 性能提升
  3. AUC 性能优化和更安全的内存管理
  4. NDCG 和 SMAPE
  1. 使用 Parquet 数据集的 Embedding Training Cache(ETC) 演示

现在我们提供了一个 keyset 提取脚本以生成 Parquet 数据集的 keyset文件。并且为用户提供了一个使用 ETC 模式训练 Parquet 数据集的端到端演示:https://github.com/NVIDIA-Merlin/HugeCTR/blob/master/notebooks/embedding_training_cache_example.ipynb

  1. 文档更新:HugeCTR 分层参数服务器数据库后端 https://nvidia-merlin.github.io/HugeCTR/master/hugectr_parameter_server.html 的文档详细信息已更新,以保持一致性和清晰性。
  1. 修复的问题
  2. 在使用 Parquet 数据类型时,如果指定了 `slot_size_array`,则不再需要指定 `workspace_size_per_gpu_in_mb`了。
  3. 如果您从头开始构建和安装 HugeCTR,您可以指定 `CMAKE_INSTALL_PREFIX` 变量来指定 HugeCTR 的安装目录。
  4. 解决了使用大量 GPU 进行 SOK 训练时 sok.init()的挂起问题:https://github.com/NVIDIA-Merlin/HugeCTR/issues/261

https://github.com/NVIDIA-Merlin/HugeCTR/issues/302。

已知问题:

以下是目前 HugeCTR 存在的已知问题,我们将在之后的版本中尽快修复。

  • 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 的节点访问。
  • 文件列表中的数据文件数量应不小于数据读取器的数量。否则,不同的 data reader worker 将被映射到同一个文件,导致数据加载不会按预期进行。
  • 正则化器暂时不支持联合损失训练。
  • 用于 HugeCTR 训练样本的 Criteo 1TB Click Logs 数据集目前不可用。在它再次可下载之前,您可以基于我们的合成数据集生成器运行这些示例。有关详细信息,请参阅 https://nvidia-merlin.github.io/HugeCTR/master/hugectr_user_guide.html#generating-synthetic-data-and-benchmarks
  • 目前的数据生成器在生成 Parquet 数据集时会产生不一致的文件名,这会将导致使用合成的 Parquet 数据时报错。

标签