作者:昇腾实战派
知识地图https://blog.csdn.net/Lumos_Lovegood/article/details/161455142

一、概述

生成式推荐(Generative Recommendation, GR)作为新一代推荐技术范式,突破了传统协同过滤、深度学习推荐模型的特征交互局限,通过生成式建模实现用户长序列兴趣的精准捕捉,已成为搜广推领域的核心技术方向。
DynamicEmb 作为昇腾 RecSDK 推荐开发套件基于开源项目TorchRec以及Nvidia DynamicEmb 开发的动态嵌入表方案,专为推荐场景海量稀疏特征训练设计,提供大规模分布式稀疏表、增量特征准入淘汰以及基于昇腾平台HierarchicalKV-ascend(HKV)高性能key-value存储加速库实现的动态稀疏表算子能力,适配昇腾 NPU 硬件架构。为生成式推荐在昇腾平台的落地提供实践参考。
本文基于DynamicEmb框架,完成recsys-gr模型的端到端迁移适配与单卡跑通,并使用NPU的HSTU融合算子来实现了性能优化。

二、环境版本与依赖清单

本文以Ascend950PR芯片平台为算力设备,主要软件配套及对应版本号如下:

python PyTorch torch_npu torchrec fbgemm_gpu
3.11 2.7.1 2.7.1 1.2.0+npu 1.2.0

DynamicEmb 框架参考链接:https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v2/dynamic_emb
recsys-gr模型的开源参考链接为 https://github.com/NVIDIA/recsys-examples/tree/main/examples,克隆源码并固定版本为: v25.09。
参考 https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v2/torchrec_npu/README.md 安装torchrec_npu。
参考 https://gitcode.com/Ascend/MindSpeed/tree/core_r0.14.0下载指定版本的MindSpeed (core_r0.14.0) 和 Megatron-LM (core_v0.14.0)。

三、环境搭建准备

3.1 运行镜像搭建与容器启动

参考 https://gitcode.com/Ascend/RecSDK/blob/develop/docs/zh/torch/build_torch_rec_v2_images/README.md,使用Dockfile文件构建Pytorch基础镜像,避免基础环境依赖冲突。
基于镜像启动容器,完成NPU设备挂载,环境配置与资源分配。

container_name=$1
image_name=$2
docker run \
-it \
--name "${container_name}" \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--shm-size="300g" \
-v /etc/localtime:/etc/localtime \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /home/:/home/ \
"${image_name}" \
/bin/bash

根据实际容器环境设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/driver/bin/setenv.bash
export ASCEND_CANN_PACKAGE_PATH=/usr/local/Ascend/ascend-toolkit/latest
export ASCEND_HOME_PATH=/usr/local/Ascend/ascend-toolkit/latest
export LD_LIBRARY_PATH=/usr/local/python3.11.0/lib/python3.11/site-packages:$LD_LIBRARY_PATH

3.2 样例准备

3.2.1 运行目录准备
git clone https://gitcode.com/Ascend/RecSDK -b develop_examples_and_tools
cd RecSDK//torch_rec_v2_examples/gr
3.2.2 安装gin-config
pip3 install gin-config
3.2.3 模型源码适配

进入当前目录,下载开源代码并切换至v25.09版本,使用patch文件对模型进行适配修改。

git clone https://github.com/NVIDIA/recsys-examples.git
cd recsys-examples && git checkout v25.09
cp -f ../gr_npu.patch ./ && git apply gr_npu.patch
3.2.4 下载分布式训练依赖的 MindSpeed 与 Megatron-LM 框架

下载指定版本的MindSpeed (core_r0.14.0) 和 Megatron-LM (core_v0.14.0),将其放置在当前目录的Mindspeed文件夹和Megatron-LM文件夹中。

-- gr
   |-- Mindspeed
   |-- Megatron-LM
   |-- recsys-examples
3.2.5 数据集准备

参考 https://github.com/NVIDIA/recsys-examples/blob/v25.09/examples/hstu/README.md#dataset-preprocessing 准备数据集。本样例采用ml-20m公开数据集作为基准测试集。

-- tmp_data
   |-- ml-20m

将tmp_data放置在recsys-examples/examples/hstu路径下

3.2.6 模型运行脚本

将运行脚本run.sh拷贝至hstu目录

cp ../run.sh ./examples/hstu/
cd ./examples/hstu

修改run.sh的MEGATRON_DIR和MINDSPEED_DIR为实际路径,修改WORLD_SIZE和ASCEND_RT_VISIBLE_DEVICE为实际使用卡数和卡号

环境变量NPU_PROFILE控制是否开启profiling,默认为0。

3.3 DynamicEmb及算子编译安装

3.3.1 安装 RecSDK NPU 自定义算子

参考 https://gitcode.com/Ascend/RecSDK/blob/develop/cust_op/ascendc_op/ai_core_op/asynchronous_complete_cumsum/c310/README.md 编译安装 c310分支的RecSDK NPU算子及算子适配层。
recsys-gr 模型迁移适配所需自定义算子有asynchronous_complete_cumsum、dense_to_jagged、jagged_to_padded_dense、hstu_dense_forward、hstu_dense_backward、invert_permute及permute2d_sparse_data。
模型将自动使用NPU融合算子进行性能优化,提升训练效率。

3.3.2 DynamicEmb编译安装

下载RecSDK以及作为submodule的HierarchicalKV-ascend并进行编译安装

git clone --recursive https://gitcode.com/Ascend/RecSDK.git

DynamicEmb源码安装编译参考 https://gitcode.com/Ascend/RecSDK/blob/develop/training/torch_rec_v2/dynamic_emb/README.md

四、模型验证运行

进入recsys-examples/examples/hstu,运行脚本

bash run.sh

在这里插入图片描述

模型训练完成后,系统将输出训练日志和评估指标。对比评估AUC与GPU复现结果相比,符合精度要求。

五、常见问题及解决方案

5.1 模型适配问题

问题:模型源码适配失败,patch应用不成功
解决方案​:

  • 确认 recsys-examples版本应为v25.09
  • 检查文件路径是否正确,patch应放置的路径为/recsys-examples文件夹下

5.2 数据集问题

问题:模型无法找到数据集
解决方案​:

  • 确认数据集已正确放置在recsys-examples/examples/hstu/tmp_data/ml-20m
  • 确认数据集已经按要求经过预处理

5.3 算子编译及安装问题

问题:RecSDK NPU自定义算子编译失败或DynamicEmb软件包编译安装失败
解决方案​:

  • 确认已正确安装CANN Toolkit和相关依赖
  • 正确设置ASCEND_CANN_PACKAGE_PATH、ASCEND_HOME_PATH以及python site-packages路径

六、总结

本文阐述了基于昇腾 RecSDK DynamicEmb 框架的 GR 生成式推荐模型适配实践,验证了DynamicEmb框架在生成式推荐场景的适配性。

参考资料:
TorchRec介绍: https://pytorch.org/torchrec

TorchRec开源项目:https://github.com/pytorch/torchrec

recsys-examples开源项目:https://github.com/NVIDIA/recsys-examples

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐