昇腾社区首页
中文
注册
开发者
下载

自定义算子

在推荐训练中,存在部分算子无NPU实现,或已有NPU实现但性能较差,不能满足推荐训练需求。Rec SDK Torch提供了以下表1 自定义算子列表,用于支持/加速推荐模型NPU训练。

其中,部分自定义算子已绑定到开源API(将开源API的backend实现转发到NPU),在导入Rec SDK Torch软件包后,可直接通过开源API调用到自定义算子。其余算子则需通过PTA层注册的mxrec模块进行调用。详情可参考Rec SDK Torch代码库中RecSDK/cust_op/ascendc_op/ai_core_op/路径下各算子目录下的README文件。

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

表1 自定义算子列表

算子名称

对应开源API

是否支持通过开源API调用

功能介绍

asynchronous_complete_cumsum

torch.ops.fbgemm.asynchronous_complete_cumsum

实现对输入offset的累加功能。

dense_to_jagged

torch.ops.fbgemm.dense_to_jagged

实现将padded dense tensor转为jagged tensor的功能。

gather_for_rank1

torch.index_select

实现input参数shape为1时的index_select功能。该算子为特殊shape优化。

index_select_for_rank1_backward

torch.index_select

gather_for_rank1的反向算子。

hstu_dense_forward

-

推荐场景下使用hstu算子实现注意力机制。该算子为hstu算子的前向算子。

hstu算子包含前向和反向,且已绑定到Autograd。

hstu_dense_backward

-

hstu算子的反向算子。

hstu_dense_forward_fuxi

-

基于hstu前向算子实现适配fuxi-alpha模型。

hstu_dense_backward_fuxi

-

基于hstu反向算子实现适配fuxi-alpha模型。

jagged_to_padded_dense

torch.ops.fbgemm.jagged_to_padded_dense

实现将jagged tensor转为padded dense tensor的功能。该算子与dense_to_jagged算子互为前反向算子,且已绑定Autograd。

permute_1D_sparse_data

torch.ops.fbgemm.permute_1D_sparse_data

实现对1D稀疏数据转置。该算子无单独目录,为调用2D实现。该实现方式与FBGEMM相同。

调用该算子时,可参考fbgemm接口文档。

permute2d_sparse_data

torch.ops.fbgemm.permute_2D_sparse_data

实现对2D稀疏数据转置。

relative_attn_bias_pos

-

带pos参数的relative_attn_bias融合算子。

relative_attn_bias_time

-

带time参数的relative_attn_bias融合算子。

relative_attn_bias_backward

-

relative_attn_bias的反向算子。

split_embedding_codegen_lookup_adagrad_function

fbgemm_gpu.split_table_batched_embeddings_ops_training.SplitTableBatchedEmbeddingBagsCodegen

实现FBGEMM库中SplitTableBatchedEmbeddingBagsCodegen查表的前向功能。

backward_codegen_adagrad_unweighted_exact

fbgemm_gpu.split_table_batched_embeddings_ops_training.SplitTableBatchedEmbeddingBagsCodegen

实现FBGEMM库中SplitTableBatchedEmbeddingBagsCodegen查表的反向更新功能。不同优化器采用不同的更新算法。

disetangle_attention

-

实现DeBERTa模型中的disetangle_attention,解耦注意力的功能。

表格中仅列举ai_core_op路径下PyTroch场景的自定义算子。