CANN/ATVOSS PyTorch扩展指南

CANN/ATVOSS PyTorch扩展指南 PyTorch 调用【免费下载链接】atvossATVOSSAscend C Templates for Vector Operator Subroutines是一套基于Ascend C开发的Vector算子库致力于为昇腾硬件上的Vector类融合算子提供极简、高效、高性能、高拓展的编程方式。项目地址: https://gitcode.com/cann/atvoss简介本文档演示如何基于ATVOSS与 PyTorch Extension 机制开发自定义 NPU 算子并将其无缝集成到 PyTorch API 中供用户直接调用。环境准备在开始之前请确保完成以下准备工作基础环境搭建请参考 环境部署指南 完成 Ascend CANN、驱动及开发工具链的安装。PyTorch 依赖安装兼容的 PyTorch 及 torch_npu 包版本要求如下torch 2.6.0对应版本的torch_npuATVOSS 安装进入 python_extension目录并完成安装cd examples/python_extension1. 安装 Python 依赖python3 -m pip install -r requirements.txt2. 构建 Wheel 包# -n: 使用当前环境非隔离构建 python3 -m build --wheel -n构建成功后Wheel 文件将生成在dist/目录下命名格式为ascend_ops-1.0.0-${python_version}-abi3-${arch}.whl其中${python_version}Python 版本标识如cp38表示 Python 3.8${arch}CPU 架构如x86_64或aarch643. 安装扩展包python3 -m pip install dist/*.whl --force-reinstall --no-deps说明--no-deps避免重复安装已满足的依赖--force-reinstall确保覆盖旧版本。4. 可选清理编译缓存若需重新构建请先清理历史编译产物python setup.py clean完成上述步骤后即可在 Python 中通过import ascend_ops调用 ATVOSS 提供的自定义 NPU 算子。当前已提供算子: torch.abs 。算子调用安装完成后您可以像使用普通PyTorch操作一样使用NPU算子以abs算子调用为例。import torch import torch_npu import ascend_ops a torch.randn(2, 3, dtypetorch.float32) a_npu a.npu() result_npu torch.ops.ascend_ops.abs(a_npu)开发指南新增一个算子为了实现一个新算子(如abs)您只需要提供一个C实现即可。首先您需要在csrc目录下使用算子名abs建立一个文件夹在此文件夹内使用你当前想要开发的soc名建立一个子文件夹ascend950。在soc目录下新建一个CMakeLists.txtadd_sources(--npu-archdav-3510)这里dav-3510为ascend950芯片对应的编译参数获取方法参考NpuArch说明和使用指导。在soc目录下新建一个abs.cpp(建议使用算子名为文件名)。这个文件包含了开发一个AI Core算子所需要的全部模块。算子Schema注册// Register the operators schema TORCH_LIBRARY_FRAGMENT(EXTENSION_MODULE_NAME, m) { m.def(abs(Tensor x) - Tensor); }算子Meta Function实现 注册// Meta function implementation of Abs torch::Tensor abs_meta(const torch::Tensor x) { auto y torch::empty_like(x); return y; } // Register the Meta implementation TORCH_LIBRARY_IMPL(EXTENSION_MODULE_NAME, Meta, m) { m.impl(abs, abs_meta); }算子Kernel实现 (Ascend C)template typename T struct AbsConfig { // 算子Kernel实现 };算子NPU调用实现 注册torch::Tensor abs_npu(const torch::Tensor x) { auto y abs_meta(x); uint32_t shape[2] {}; std::copy(x.sizes().begin(), x.sizes().end(), shape); Atvoss::Tensorfloat t1(x.data_ptrfloat(), shape); Atvoss::Tensorfloat t2(y.data_ptrfloat(), shape); auto arguments Atvoss::ArgumentsBuilder{} .inputOutput(t1, t2) .build(); using Config AbsConfigfloat; auto stream c10_npu::getCurrentNPUStream().stream(false); Config::DeviceOp deviceOp; deviceOp.Run(arguments, stream); return y; } // Register the NPU implementation TORCH_LIBRARY_IMPL(EXTENSION_MODULE_NAME, PrivateUse1, m) { m.impl(abs, abs_npu); }具体代码可以参考abs.cpp参考安装步骤章节重新构建Wheel包并安装。基于pytest测试算子API请参考test_abs.py的实现;【免费下载链接】atvossATVOSSAscend C Templates for Vector Operator Subroutines是一套基于Ascend C开发的Vector算子库致力于为昇腾硬件上的Vector类融合算子提供极简、高效、高性能、高拓展的编程方式。项目地址: https://gitcode.com/cann/atvoss创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考