RecSDK-Torch 自定义算子说明

在推荐训练中,存在部分算子无NPU实现,或已有NPU实现但性能较差,不能满足推荐训练需求。RecSDK提供了自定义算子用于支持或加速推荐模型NPU训练。其中部分自定义算子已绑定到开源API(将开源API的backend实现转发到NPU) ,导入RecSDK软件包后,可直接通过开源API调用到自定义算子。其余算子则需通过PTA层注册的mxrec模块进行调用。详情请参考各算子目录下的README文件。

说明:本说明文档只针对Torch框架下适配的推荐算子

算子文件结构

├── ascendc_op
    ├──ai_core_op   # 算子功能实现
    ├──build        # 算子编译
├── framework
    ├──torch_plugin # 算子适配层实现
├── test            # 算子测试用例
├── third_party     # 第三方依赖库
    ├── catlass        # CATLASS源码目录

Ascend C参考设计

更多详情可以参考CANN官方的Ascend C算子开发手册Ascend C算子开发

版本配套说明

当前支持两种软件版本配套:PyTorch 2.6.0和PyTorch2.7.1。调用算子前需完成配套软件的安装和所需算子的安装。详细配套关系如下:

配套版本 PyTorch torch-npu torchrec fbgemm_gpu hybrid_torchrec
配套版本1 2.6.0 2.6.0 1.1.0+npu 1.1.0 1.1.0
配套版本2 2.7.1 2.7.1 1.2.0+npu 1.2.0 1.2.0

后续说明以PyTorch 2.6.0配套版本为例进行说明。

单算子使用说明

算子编译

进入指定算子的功能实现目录(ascendc_op/ai_core_op/目录下),执行指令对算子进行编译和部署,默认编译安装Atlas A2训练系列产品AI Core类型。

git submodule update --init --recursive #部分算子存在三方库依赖,需要初始化submodule
bash run.sh

若指定 AI Core 类型编译:

bash run.sh --ai-core ai_core-<soc_version>

AI处理器的型号<soc_version>请通过如下方式获取:

  • 在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,获取Chip Name信息。实际配置值为AscendChip Name,例如Chip Name取值为xxxyy,实际配置值为Ascendxxxyy

基于同系列的AI处理器型号创建的算子工程,其基础功能(基于该工程进行算子开发、编译和部署)通用。

注:需先在环境中设置CANN相关环境变量,再执行算子编译和安装指令。使用默认路径安装CANN时设置环境变量指令如下:

source /usr/local/Ascend/ascend-toolkit/set_env.sh

算子适配层编译

单算子编译

进入算子适配层(framework/torch_plugin/torch_library/目录下),并进入到指定的算子目录。执行算子适配层编译。

bash build_ops.sh

执行完在当前build目录生成 xxx.so文件,调用算子时执行以下命令进行加载。

import torch
torch.ops.load_library("path/to/build/xxx.so")  #.so文件的绝对路径

多算子编译

进入算子适配层目录RecSDK/cust_op/framework/torch_plugin/torch_library/common下,执行如下命令编译。

bash build_ops.sh

编译完成后,会在common/build目录下生成libfbgemm_npu_api.so,并同时在python默认的site-packages路径下存放编译好的libfbgemm_npu_api.so
该so包含RecSDK/cust_op/framework/torch_plugin/torch_library/目录下所有算子的适配层。

加载so:

import sysconfig
import torch
torch.ops.load_library(f"{sysconfig.get_path('purelib')}/libfbgemm_npu_api.so")

算子测试用例

完成算子及其算子适配层准备后,可通过算子用例验证。进入指定算子的测试用例目录(cust_op/test/目录下/torch),执行如下命令运行测试用例:

python3 -m pytest -x your_script.py

算子介绍

各算子实现的详细介绍见具体算子目录中readme说明。

须知:自定义算子为高性能计算,用户调用自定义算子时需自行确保输入的参数满足算子约束条件、参数类型、参数shape等要求,否则可能出现数组越界,显存不够等问题导致算子执行失败。

FAQs

Could NOT find Python3 (missing: Python3_INCLUDE_DIRS Python3_LIBARIES)

若编译时报错:Could NOT find Python3 (missing: Python3_INCLUDE_DIRS Python3_LIBARIES)

需检查python3的软连接是否正确创建。未创建时,可参考如下命令创建:

ln -s /usr/local/python3.11.0/bin/python3 /usr/bin/python3