CANN/ops-cv快速入门指南
快速入门基于ops-cv仓【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv使用须知本指南旨在帮助您快速上手CANN和ops-cv算子仓的使用。为方便您快速了解算子开发全流程以AddExample算子为实践对象算子源码位于ops-cv/examples/add_example操作流程如下前提条件参考项目README完成环境准备和源码下载此处不再赘述。快速入门场景推荐WebIDE或Docker部署操作简单。说明WebIDE或Docker环境默认提供最新商发版CANN包如需体验master分支最新能力可手动搭建环境。编译运行编译自定义算子包并安装实现快速调用算子。算子开发通过修改现有算子Kernel体验开发、编译、验证的完整闭环。算子调试掌握算子打印和性能采集方法。算子验证学习如何修改算子example样例以验证算子在不同输入下的功能正确性。一、编译运行本阶段目的是快速体验项目标准流程验证环境能否成功进行算子源码编译、打包、安装和运行。1. 进入项目源码WebIDE环境默认提供最新商发版CANN包配套的项目源码进入源码目录${gitCode_id}替换为开发者个人gitCode账号。cd /mnt/workspace/gitCode/${gitCode_id}/ops-cv非WebIDE环境根据release仓库源码与CANN版本配套关系执行如下命令下载源码${tag_version}替换为目标分支标签例如9.0.0。git clone -b ${tag_version} https://gitcode.com/cann/ops-cv.git cd ops-cv说明如需切换源码分支版本请参考如下指导。在源码目录执行git branch查询当前源码版本。在源码目录执行git checkout ${tag_version}切换到目标分支源码注意满足源码与CANN版本配套关系。若源码已存在执行git pull拉取最新源码。2. 编译AddExample算子编译指定的算子通用编译命令格式bash build.sh --pkg --soc芯片版本 --ops算子名。以AddExample算子为例编译命令如下bash build.sh --pkg --soc${soc_version} --opsadd_example -j16${soc_version}设置方法如下访问CANN下载中心根据页面提示复制硬件查询命令在当前环境中执行返回芯片ID信息再回填到官网按Enter键获取产品名产品名对应的${soc_version}取值如下请按实际场景传参。Atlas A2 训练系列产品/Atlas A2 推理系列产品取值为ascend910bAtlas A3 训练系列产品/Atlas A3 推理系列产品取值为ascend910_93Atlas 350 加速卡取值为ascend950若提示如下信息说明编译成功。Self-extractable archive cann-ops-cv-custom_linux-${arch}.run successfully created.编译成功后run包存放于项目根目录的build_out目录下。3. 安装AddExample算子包./build_out/cann-ops-cv-*linux*.runAddExample安装在${ASCEND_HOME_PATH}/opp/vendors路径中${ASCEND_HOME_PATH}表示CANN软件安装目录。4. 配置环境变量将自定义算子包的路径加入环境变量确保运行时能够找到。export LD_LIBRARY_PATH${ASCEND_HOME_PATH}/opp/vendors/custom_cv/op_api/lib:${LD_LIBRARY_PATH}5. 快速验证运行算子样例通用的运行命令格式bash build.sh --run_example 算子名 运行模式 包模式。以AddExample为例其提供了简单算子样例add_example/examples/test_aclnn_add_example.cpp运行该样例验证算子功能是否正常。bash build.sh --run_example add_example eager cust --vendor_namecustom预期输出打印算子AddExample的加法计算结果表明算子已成功部署并正确执行。add_example first input[0] is: 1.000000, second input[0] is: 1.000000, result[0] is: 2.000000 add_example first input[1] is: 1.000000, second input[1] is: 1.000000, result[1] is: 2.000000 add_example first input[2] is: 1.000000, second input[2] is: 1.000000, result[2] is: 2.000000 add_example first input[3] is: 1.000000, second input[3] is: 1.000000, result[3] is: 2.000000 add_example first input[4] is: 1.000000, second input[4] is: 1.000000, result[4] is: 2.000000 add_example first input[5] is: 1.000000, second input[5] is: 1.000000, result[5] is: 2.000000 add_example first input[6] is: 1.000000, second input[6] is: 1.000000, result[6] is: 2.000000 add_example first input[7] is: 1.000000, second input[7] is: 1.000000, result[7] is: 2.000000 ...二、算子开发本阶段目的是对已成功运行的AddExample算子尝试修改核函数代码。1. 修改Kernel实现找到AddExample算子的核心kernel实现文件ops-cv/examples/add_example/op_kernel/add_example.h尝试将算子中的Add操作改为Mul操作__aicore__ inline void AddExampleT::Compute(int64_t currentNum) { AscendC::LocalTensorT xLocal inputQueueX.DeQueT(); AscendC::LocalTensorT yLocal inputQueueY.DeQueT(); AscendC::LocalTensorT zLocal outputQueueZ.AllocTensorT(); AscendC::Add(zLocal, xLocal, yLocal, currentNum); outputQueueZ.EnQueT(zLocal); inputQueueX.FreeTensor(xLocal); inputQueueY.FreeTensor(yLocal); }2. 编译与验证重复编译运行章节中的步骤重新编译先回到项目根目录编译命令如下bash build.sh --pkg --socascend910b --opsadd_example -j16重新安装./build_out/cann-ops-cv-*linux*.run重新验证bash build.sh --run_example add_example eager cust --vendor_namecustom成功标志输出结果变成乘法结果。add_example first input[0] is: 1.000000, second input[0] is: 1.000000, result[0] is: 1.000000 add_example first input[1] is: 1.000000, second input[1] is: 1.000000, result[1] is: 1.000000 add_example first input[2] is: 1.000000, second input[2] is: 1.000000, result[2] is: 1.000000 add_example first input[3] is: 1.000000, second input[3] is: 1.000000, result[3] is: 1.000000 add_example first input[4] is: 1.000000, second input[4] is: 1.000000, result[4] is: 1.000000 add_example first input[5] is: 1.000000, second input[5] is: 1.000000, result[5] is: 1.000000 add_example first input[6] is: 1.000000, second input[6] is: 1.000000, result[6] is: 1.000000 add_example first input[7] is: 1.000000, second input[7] is: 1.000000, result[7] is: 1.000000 ...三、算子调试本阶段以AddExample为例在算子中添加打印并采集算子性能数据以便后续问题分析定位。1. 打印算子如果出现执行失败、精度异常等问题添加打印进行问题分析和定位。请在examples/add_example/op_kernel/add_example.h中进行代码修改。printf该接口支持打印Scalar类型数据如整数、字符型、布尔型等详细介绍请参见《Ascend C API》中算子调测API printf。blockLength_ (remainderLength tilingData-blockFactor) ? tilingData-blockFactor : remainderLength; ubLength_ tilingData-ubFactor; // 打印当前核计算Block长度 AscendC::PRINTF(Tiling blockLength is %llu\n, blockLength_);DumpTensor该接口支持Dump指定Tensor的内容同时支持打印自定义附加信息比如当前行号等详细介绍请参见《Ascend C API》中“算子调测API DumpTensor”。AscendC::LocalTensorT xLocal inputQueueX.DeQueT(); AscendC::LocalTensorT yLocal inputQueueY.DeQueT(); AscendC::LocalTensorT zLocal outputQueueZ.AllocTensorT(); AscendC::Add(zLocal, xLocal, yLocal, currentNum); AscendC::DumpTensor(zLocal, 0, 128); outputQueueZ.EnQueT(zLocal);2. 性能采集当算子功能验证正确后可通过msprof工具采集算子性能数据。生成可执行文件调用AddExample算子的example样例生成可执行文件test_aclnn_add_example该文件位于项目ops-cv/build目录。bash build.sh --run_example add_example eager cust --vendor_namecustom采集性能数据进入AddExample算子可执行文件目录ops-cv/build/执行如下命令msprof --application./test_aclnn_add_example采集结果在项目ops-cv/build/目录msprof命令执行完后会自动解析并导出性能数据结果文件详细内容请参见msprof。四、算子验证本阶段通过修改AddExample算子example样例中的输入数据验证该算子在多种场景下的功能正确性。1. 修改测试输入找到并编辑AddExample的ops-cv/examples/add_example/examples/test_aclnn_add_example.cpp修改输入张量的形状和数值。修改输入/输出数据修改输入、输出的shape信息以及初始化数据构造相应的输入、输出tensor。int main() { // ... 初始化代码 ... // ① 修改selfX的输入 // 修改前shape {32, 4, 4, 4}, 数值全为1 // 修改后将输入shape改为 {8, 8, 8, 8}并填充不同的测试数据 std::vectorint64_t selfXShape {8, 8, 8, 8}; std::vectorfloat selfXHostData(4096); // 4096 8 * 8 * 8 *8 // 可使用循环填充更有区分度的数据例如递增序列 for (int i 0; i 4096; i) { selfXHostData[i] static_castfloat(i % 10); // 填充0-9的循环值 } // ② 参考selfX同理修改selfY、selfZ的输入 // ... 后续执行代码 ... }2. 重新编译并验证由于只修改了example测试代码无需重新编译算子包。重新执行验证命令bash build.sh --run_example add_example eager cust --vendor_namecustom观察算子输出结果是否符合预期。结语体验完上述流程您已基本完成算子开发过程如果您想进一步贡献新算子或学习更多高阶开发、调试等技能请访问本项目README学习进阶教程和贡献指南等。【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考