CANN/ops-blas快速入门指南
快速入门基于ops-blas仓【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas使用须知本指南旨在帮助您快速上手CANN和ops-blas算子仓的使用。为方便快速了解算子开发全流程将以Copy算子为实践对象其源文件位于ops-blas/blas/copy具体操作流程如下环境部署完成软件包安装和源码下载此处不再赘述。快速入门场景下推荐WebIDE或Docker环境安装操作简单。说明当前WebIDE或Docker环境默认最新商发版CANN包如需体验master分支最新能力可手动安装CANN包注意软件与源码版本配套。编译运行编译自定义算子包并安装实现快速调用算子。算子开发通过修改现有算子Kernel体验开发、编译、验证的完整闭环。算子调试掌握算子打印和性能采集方法。一、编译运行本阶段目的是快速体验项目标准流程验证环境能否成功进行算子源码编译、打包、安装和运行。1. 编译Copy算子环境准备好后注意软件与源码版本配套进入环境并访问项目源码根目录编译指定算子。通用编译命令格式bash build.sh --pkg --soc芯片版本 --ops算子名。以Copy算子为例编译命令如下bash build.sh --pkg --socascend950 --opsscopy若提示如下信息说明编译成功。Self-extractable archive cann-ops-blas_${cann_version}_linux-${arch}.run successfully created.编译成功后run包存放于项目根目录的build_out目录下。2. 安装Copy算子包./build_out/cann-${soc_name}-ops-blas_${version}_linux-${arch}.run3. 快速验证运行算子样例通用的运行命令格式bash build.sh --soc芯片版本 --ops算子名 --run。以Copy为例其提供了简单算子样例test/scopy/scopy_test.cpp运行该样例验证算子功能是否正常。bash build.sh --pkg --socascend950 --opsscopy --run预期输出打印算子Copy的计算结果表明算子已成功部署并正确执行。Running scopy_test... Output: 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 ... Golden: 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 ... [Success] Case accuracy is verification passed.二、算子开发本阶段目的是对已成功运行的Copy算子尝试修改核函数代码。1. 修改Kernel实现找到Copy算子的核心kernel实现文件blas/copy/scopy_kernel.cpp尝试修改算子中的DataCopy操作template typename T __aicore__ inline void CopyAIVT::SingleIteration(uint32_t curOffset, uint32_t dataCount) { LocalTensorT inLocal inQueue.AllocTensorT(); DataCopy(inLocal, inGM[curOffset], dataCount); inQueue.EnQueT(inLocal); int32_t eventIDMTE2ToMTE3 static_castint32_t(GetTPipePtr()-FetchEventID(AscendC::HardEvent::MTE2_MTE3)); AscendC::SetFlagAscendC::HardEvent::MTE2_MTE3(eventIDMTE2ToMTE3); AscendC::WaitFlagAscendC::HardEvent::MTE2_MTE3(eventIDMTE2ToMTE3); LocalTensorT outLocal inQueue.DeQueT(); // DataCopy(outGM[curOffset], outLocal, dataCount); // 补充相应的AIV计算操作 inQueue.FreeTensor(outLocal); int32_t eventIDMTE3ToMTE2 static_castint32_t(GetTPipePtr()-FetchEventID(AscendC::HardEvent::MTE3_MTE2)); AscendC::SetFlagAscendC::HardEvent::MTE3_MTE2(eventIDMTE3ToMTE2); AscendC::WaitFlagAscendC::HardEvent::MTE3_MTE2(eventIDMTE3ToMTE2); }2. 编译与验证重复编译运行章节中的步骤重新编译 先回到项目根目录编译命令如下bash build.sh --pkg --socascend950 --opsscopy重新安装./build_out/cann-*-ops-blas_*.run重新验证bash build.sh --socascend950 --opsscopy --run成功标志输出结果精度比对成功。Running scopy_test... Output: 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 ... Golden: 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 ... [Success] Case accuracy is verification passed.三、算子调试本阶段以Copy为例在算子中添加打印并采集算子性能数据以便后续问题分析定位。1. 打印算子如果出现执行失败、精度异常等问题添加打印进行问题分析和定位。请在blas/copy/scopy_kernel.cpp中进行代码修改。printf该接口支持打印Scalar类型数据如整数、字符型、布尔型等详细介绍请参见《Ascend C API》中“算子调测API printf”。blockLength_ (tilingData-totalLength AscendC::GetBlockNum() - 1) / AscendC::GetBlockNum(); tileNum_ tilingData-tileNum; tileLength_ ((blockLength_ tileNum_ - 1) / tileNum_ / BUFFER_NUM) ? ((blockLength_ tileNum_ - 1) / tileNum_ / BUFFER_NUM) : 1; // 打印当前核计算Block长度 AscendC::PRINTF(Tiling blockLength is %llu\n, blockLength_);DumpTensor该接口支持Dump指定Tensor的内容同时支持打印自定义附加信息比如当前行号等详细介绍请参见《Ascend C API》中“算子调测API DumpTensor”。AscendC::LocalTensorT zLocal outputQueueZ.DeQueT(); // 打印zLocal Tensor信息 DumpTensor(zLocal, 0, 128);2. 性能采集当算子功能验证正确后可通过msprof工具采集算子性能数据。生成可执行文件调用Copy算子的test样例生成可执行文件scopy_test该文件位于项目ops-blas/build/test/scopy目录。bash build.sh --socascend950 --opsscopy采集性能数据进入Copy算子可执行文件目录ops-blas/build/test/scopy执行如下命令msprof --application./scopy_test采集结果在项目ops-blas/build/test/scopy目录msprof命令执行完后会自动解析并导出性能数据结果文件详细内容请参见msprof。【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598409.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!