RecSys-Example: HSTU Model Training and Inference Best Practice

Junjie Zhang, Junyi Qiu, NVIDIA DevTech Engineer | 2025.05.30

目录

推荐系统趋势与挑战

向生成式和序列化模型 HSTU 发展

  1. 自 Transformer 及其变体问世以来,它们已被实验性地应用于推荐系统。HSTU 是当前最先进的实现。
  2. 推荐系统的框架从 TensorFlow 迁移到 PyTorch,这是受到了大语言模型(LLM)巨大成功的启发。
  3. 伴随着模型和框架的迁移,也带来了硬件和软件方面的挑战:
    1. Embedding 的基数从数十亿增长到数万亿,对内存和动态哈希提出了要求。相关解决方案为 TorchRec::dynamicemb
    2. 日益增长的计算需求:现在也可以将 Scaling-Law 应用于推荐系统领域。Megatron-Core / KVCache 可用于定制化的推荐系统。但目前还没有高效的并行实现来处理推荐系统中的定制化需求。
Page 3: 展示了深度学习模型的计算需求随时间变化的图表,以及DLRM-DCNv2与HSTU训练的计算任务分解饼图。
Page 3: 展示了深度学习模型的计算需求随时间变化的图表,以及DLRM-DCNv2与HSTU训练的计算任务分解饼图。

上图展示了深度学习模型所需的训练算力逐年增长的趋势,以及 DLRM-DCNv2 与 HSTU 训练任务的算力分解对比。在 HSTU 中,Embedding 操作(Embedding Op)和通信(Comm)占据了显著的计算比例。

RecSys-Example 代码库介绍

代码库地址: https://github.com/NVIDIA/recsys-examples

Page 4: RecSys Example (HSTU,...) 的软件栈图。
图1展示了软件栈图,所有组件均为开源(在 NVIDIA 下)。该栈包括上层的 RecSys Example,中间的 PyTorch ops 模块(如 TorchRec, HSTU MHA, Megatron-Core, KVCache),以及底层的 CUDA 核(如 FBGEMM_GPU, CUTLASS, NKV, TE, TRT)。

RecSys-Examples 中的 HSTU 训练实践

稀疏部分 (Sparse)

TorchRec

Page 6: TorchRec EBC/EC 组件图。
Page 6: TorchRec EBC/EC 组件图。

DynamicEmb (动态 Embedding)

Page 7: DynamicEmb 与 TorchRec 静态 embedding 的功能对比表格及性能加速比图。
Page 7: DynamicEmb 与 TorchRec 静态 embedding 的功能对比表格及性能加速比图。

上图右侧的性能对比显示,相较于 TDE(TorchRec Dynamic Embedding),DynamicEmb 实现了超过20倍的加速。

DynamicEmb 内部机制

Page 8: DynamicEmb 分片方案示意图。
Page 8: DynamicEmb 分片方案示意图。

上图展示了 DynamicEmb 的分片方案,其中大的 Embedding 表(键在 int64_t 空间)通过哈希函数(Hash(key % #GPUs))分布到不同 GPU 的 HBM 和主机内存中。

稠密部分 (Dense)

优化的 HSTU 核

Page 9: HSTU attention 模块的计算流程图。
Page 9: HSTU attention 模块的计算流程图。

核融合 (Kernel Fusion)

Page 10: 可融合模式的前向传播和反向传播示意图。
Page 10: 可融合模式的前向传播和反向传播示意图。

来自 Megatron-Core 的并行化

Page 11: HSTU 结构与 Transformer 的对比,模型统计数据比较以及模型并行应用表。
Page 11: HSTU 结构与 Transformer 的对比,模型统计数据比较以及模型并行应用表。

上图展示了 HSTU 与 Transformer 结构的对比,以及与 Transformer¹³ 在相同超参数下的模型统计比较,显示 HSTU 的峰值内存是其 1.62x。表格总结了各种并行维度在 HSTU 中的实用性和可用性。

激活值卸载 (Activation Offloading) (WIP)

Page 12: HSTU 层前向/后向数据流与激活卸载示意图。
Page 12: HSTU 层前向/后向数据流与激活卸载示意图。

上图详细描绘了激活卸载时的数据流,包括主计算流 (MAIN stream),设备到主机的数据传输流 (D2H stream),以及主机到设备的数据传输流 (H2D stream)。

总结:端到端性能

下表为测试用的超参数:

item value
#Embeddings 50M
Embedding dim 256
Batchsize 32
Sequence length 4096
#heads 4
Dim per head 256
#layers 8
Page 13: 在单个 DGX-A100 或 DGX-H100 上 HSTU 训练的性能改进图。
Page 13: 在单个 DGX-A100 或 DGX-H100 上 HSTU 训练的性能改进图。

上图展示了在 DGX-A100 和 DGX-H100 上的性能加速比。与基线相比,使用 +cutlass+fusion 优化后,DGX-A100 实现了 2.49x 的加速,DGX-H100 实现了 2.02x 的加速。

RecSys-Examples 中的 HSTU 推理实践

KV 数据重用

Page 15: RecSys-Example 中 HSTU 推理组件的参考设计图。
Page 15: RecSys-Example 中 HSTU 推理组件的参考设计图。

上图展示了 HSTU 推理组件的参考设计。数据从 Streaming Dataset 流入,经过 Data Processor 处理后进入 HSTU 模型。模型内部,KV Cache Manager (包含 GPU 和 Host 两级) 与 HSTU Operators 及 Embedding 模块交互,以实现高效的 KV 数据重用。

KV Cache

HSTU KV Cache 特性

GPU KV Cache 与 主机 KV 存储对比

特性 GPU KV Cache 主机 KV 存储
描述 缓存新的增量历史 token,以支持灵活的添加/追加、驱逐和卸载。 存储所有用户的用户特征 token过去看过的历史 token
存储 GPU 内存 CPU 节点上的主机内存和/或磁盘。
大小 每 GPU 数十 GB,总量为数 TB 到数十 TB。 总量为数 TB 到数 PB。
布局 分页表 (Paged Table) 由底层实现决定。
操作 添加(或追加) / 查找 / 驱逐 / 卸载 / 上载 添加(或追加) / 查找
Page 16
Page 16

卸载 (Offloading) 与重计算

KV Cache 数据在 GPU 和主机之间的卸载(offload)与上载(onload)流程图。
KV Cache 数据在 GPU 和主机之间的卸载(offload)与上载(onload)流程图。

GPU KV Cache

分页布局 (Paged Layout) & 分页 HSTU 注意力 (Paged HSTU Attention)

HSTU GPU KV Cache 的分页布局与注意力机制图示。左侧展示了上下文(用户特征、历史、目标)的注意力计算,中间展示了到分页的逻辑映射,右侧是 GPU KV Cache 的物理分页存储以及用于访问的元数据结构。
HSTU GPU KV Cache 的分页布局与注意力机制图示。左侧展示了上下文(用户特征、历史、目标)的注意力计算,中间展示了到分页的逻辑映射,右侧是 GPU KV Cache 的物理分页存储以及用于访问的元数据结构。

上图展示了如何将用户的上下文信息(如用户特征、历史记录)映射到 GPU KV Cache 中的物理页面。通过一个索引表(按 User Id 查找),系统可以定位到该用户数据所在的具体页面索引。批量处理的元数据(如kv_page_indices, kv_page_indptr)被用于在核函数(kernel)中高效地访问这些 KV 数据。

工作流

HSTU 推理利用 KV Cache 的工作流如下:

  1. DataProcessor:生成 BatchedRequest,合并具有相同 user_id 的序列。
  2. GPU KV Cache Manager:为历史 token 分配新的块(可能伴随驱逐操作),从主机 KV 存储中查找数据,并启动到 GPU 的数据传输。
  3. Resource Manager:返回分配的缓存信息。
  4. Host KV Storage Manager:将新的历史 token 复制到 GPU KV Cache。
  5. 系统等待从主机 KV 存储的数据传输完成。
  6. HSTUModel:为新的历史 token 和候选物品计算注意力输出。
  7. 推理完成后,当达到卸载块大小时,将 GPU 缓存中的 KV 数据卸载到主机存储。
利用 KV Cache 的 HSTU 推理工作流图。
利用 KV Cache 的 HSTU 推理工作流图。

推理性能

在合成数据集和 Kuairand 27K 数据集上的结果

展示 HSTU 推理性能的图表。上图比较了在合成数据集上使用和不使用 KV Cache 的单层延迟。下图展示了在 Kuairand 27k 数据集上,不同缓存大小时的推理加速比和 KV 缓存命中率。
展示 HSTU 推理性能的图表。上图比较了在合成数据集上使用和不使用 KV Cache 的单层延迟。下图展示了在 Kuairand 27k 数据集上,不同缓存大小时的推理加速比和 KV 缓存命中率。

RecSys-Example 正在进行的工作

RecSys-Example 正在进行的工作列表以及一个二维码,邀请用户尝试示例并提交问题。
RecSys-Example 正在进行的工作列表以及一个二维码,邀请用户尝试示例并提交问题。