添加自定义 aclnn 算子¶
本文档介绍如何向 vllm-ascend 添加自定义 aclnn 算子。
自定义 aclnn 算子在 vllm-ascend 中如何工作?¶
自定义 aclnn 算子在 vllm-ascend 构建过程中被编译并安装到 vllm_ascend/cann_ops_custom 目录。随后,这些 aclnn 算子被绑定到 torch.ops._C_ascend 模块,使用户能够在 vllm-ascend 的 Python 代码中调用它们。
要启用自定义算子,请使用以下代码:
如何添加自定义 aclnn 算子?¶
- 在
csrc目录下创建一个新的算子文件夹。 - 创建
op_host和op_kernel目录,分别存放主机端和内核端源代码。 - 在
csrc/build_aclnn.sh中为支持的SOC添加构建选项。注意,多个算子应使用;分隔,即CUSTOM_OPS="op1;op2;op3"。 - 在
csrc/torch_binding.cpp中将aclnn算子绑定到 torch.ops._C_ascend 模块。 - 在
csrc/torch_binding_meta.cpp中为算子编写元实现,以便将其捕获到aclgraph中。
如果新增的算子参与 csrc/cmake/func.cmake 中带缓存的生成式内核构建,请确认其编译器可见的源码、生成产物与共享输入、构建配方以及工具链环境都已在缓存标识契约中体现。当修改其中任一输入或命令时,应在同一次变更中同步更新对应的缓存标识参数;否则旧的编译动作可能会被错误地复用。
成功构建 vllm-ascend 后,即可在 Python 代码中调用自定义 aclnn 算子。