创建一个LessEqual算子,对标torch.le
https://pytorch.org/docs/1.5.0/torch.html?highlight=torch%20le#torch.le
下载mindstudio免安装版本
https://www.hiascend.com/software/mindstudio/download
clone canndev

cd ~
git clone https://gitee.com/ascend_wuyongkang/canndev.git
cd canndev
./build.sh --aicpu -u -j100

报错
CMake 3.14 or higher is required. You are running version 3.10.2

sudo apt remove --purge cmake
hash -r
sudo snap install cmake --classiccmake --version

export ASCEND_CUSTOM_PATH=$HOME/Ascend/ascend-toolkit/latest

重新执行./build.sh --aicpu -u -j100
find …/…/…/ -name “*”

算子还是太难了。
那我们先参考这个做个单算子调用
https://gitee.com/ascend/samples/wikis/%E8%AE%AD%E7%BB%83%E8%90%A5/CANN%E8%AE%AD%E7%BB%83%E8%90%A5–%E5%8D%95%E7%AE%97%E5%AD%90%E8%B0%83%E7%94%A8

单算子调用

conv2d算子验证
https://gitee.com/ascend/samples/tree/master/cplusplus/level1_single_api/4_op_dev/2_verify_op/acl_execute_conv2d

cd samples/cplusplus/level1_single_api/4_op_dev/2_verify_op/acl_execute_conv2d
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub
#用于设置python3.7.5库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个python3版本,则指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH
cd run/out/
atc --singleop=test_data/config/conv2d_tik_op.json --soc_version=Ascend310 --output=op_models

然后就报错了

EZ3003: No supported Ops kernel and engine are found for [Conv2DTik], optype [Conv2DTik].

查了一圈,没查到,只能暂且先放弃了,走下一步

前面跳过了一步,没有acl文件,猜想是不是因为aclLite没有初始化编译?

cd ${HOME}/samples/cplusplus/common/acllite
make
make install

貌似还真是第一次编译,不然不会这么大串信息

最后还是失败了,那我没办法了。

然后我们屡败屡战,看下面这个高清图像修复,用到了matmul_27648.json算子
https://gitee.com/ascend/samples/tree/master/python/level2_simple_inference/6_other/imageinpainting_hifill

首先看版本,我们的是符合要求的

安装第三方依赖
https://gitee.com/ascend/samples/tree/master/python/environment


这个算子又转换成功了

与官方文档不太一样,这里可以直接python3.7.5

效果很不错,真的很高清,不过这个算法是怎么识别到右上角是主角,然后留下他的呢
回到前面的问题,
是不是算子名字变了,但是文档还没改呢?

cd samples/cplusplus/level1_single_api/4_op_dev/2_verify_op/acl_execute_conv2d
cd run/out/cp test_data/config/conv2d_tik_op.json  test_data/config/Conv2D.json
vi test_data/config/Conv2D.jsonatc --singleop=test_data/config/Conv2D.json --soc_version=Ascend310 --output=op_models

终于成功了

但是前面那个问题还是没有解决


参考:https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/msug/msug_000215.html

使用AICPU算子开发开发方式实现LessEqual算子,对标torch.le

torch.le:https://pytorch.org/docs/stable/generated/torch.le.html
算子原型定义

/*** Copyright (C)  2020. Huawei Technologies Co., Ltd. All rights reserved.* This program is free software; you can redistribute it and/or modify* it under the terms of the Apache License Version 2.0.You may not use this file except in compliance with the License.* This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* Apache License for more details at* http://www.apache.org/licenses/LICENSE-2.0** @file add_dsl.h** @brief** @version 1.0**/#ifndef GE_OPS_OP_PROTO_ADDDSL_H_
#define GE_OPS_OP_PROTO_ADDDSL_H_
#include "graph/operator_reg.h"
namespace ge {REG_OP(AddDsl).INPUT(x1, TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16, DT_INT16,DT_INT8, DT_UINT8, DT_DOUBLE, DT_COMPLEX128,DT_COMPLEX64, DT_STRING})).INPUT(x2,TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16, DT_INT16,DT_INT8, DT_UINT8, DT_DOUBLE, DT_COMPLEX128,DT_COMPLEX64, DT_STRING})).OUTPUT(y,TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16, DT_INT16,DT_INT8, DT_UINT8, DT_DOUBLE, DT_COMPLEX128,DT_COMPLEX64, DT_STRING})).OP_END_FACTORY_REG(AddDsl)
}#endif //GE_OPS_OP_PROTO_ADDDSL_H_

lessequal.cc实现

/*** Copyright (C)  2020. Huawei Technologies Co., Ltd. All rights reserved.* This program is free software; you can redistribute it and/or modify* it under the terms of the Apache License Version 2.0.You may not use this file except in compliance with the License.* This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* Apache License for more details at* http://www.apache.org/licenses/LICENSE-2.0** @file add_dsl.h** @brief** @version 1.0**/#ifndef GE_OPS_OP_PROTO_ADDDSL_H_
#define GE_OPS_OP_PROTO_ADDDSL_H_
#include "graph/operator_reg.h"
namespace ge {REG_OP(AddDsl).INPUT(x1, TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16, DT_INT16,DT_INT8, DT_UINT8, DT_DOUBLE, DT_COMPLEX128,DT_COMPLEX64, DT_STRING})).INPUT(x2,TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16, DT_INT16,DT_INT8, DT_UINT8, DT_DOUBLE, DT_COMPLEX128,DT_COMPLEX64, DT_STRING})).OUTPUT(y,TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16, DT_INT16,DT_INT8, DT_UINT8, DT_DOUBLE, DT_COMPLEX128,DT_COMPLEX64, DT_STRING})).OP_END_FACTORY_REG(AddDsl)
}#endif //GE_OPS_OP_PROTO_ADDDSL_H_

算子代码实现

cpukernel/impl/lessequal_kernel.h
cpukernel/impl/lessequal_kernel.cc

算子信息库定义

cpukernel/op_info_cfg/aicpu_kernel/reshape_cust.ini

算子适配插件实现

framework/tf_plugin/tensorflow_lessequal_plugin.cc

UT测试

这里遇到了一个问题,就是按照文档来做,右键没有找到New Cases > AI CPU UT Case

但是就算没有自动生成模板,我们也可以自己写下:
testcases/ut/aicpu_test/lessequal/test_lessequal_impl.cc
testcases/ut/aicpu_test/lessequal/test_lessequal_proto.cc

算子工程编译

连接远程云服务器成功后,进行编译
旧版本需要在130行往后添加代码,我们这次新版本就不用

单独打开算子工程文件夹,
然后进行编译


我在ascendtoolkit的安装路径是/home/HwHiAiUser/Ascend/ascend-toolkit,因此配置环境变量

ASCEND_OPP_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/opp;
TOOLCHAIN_DIR=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc;
ASCEND_TENSOR_COMPILER_INCLUDE=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/include;
ASCEND_AICPU_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/latest


貌似我在中文路径下,这就不太行,那么我们改到I盘根目录。

这样就大题实现了算子功能了

【CANN训练营】CANN:AICPU算子开发相关推荐

  1. MindSpore框架AICPU算子开发全流程

    视频案例,可以查看哔哩哔哩MindSpore框架AICPU算子演示视频 一.MindSpore AI算子介绍 1.1 MindSpore框架介绍 MindSpore是华为公司推出的新一代深度学习框架, ...

  2. 【2023 · CANN训练营第一季】——Ascend C算子开发入门——第一次课

    前言:昇腾AI处理器的算子开发增加了一种新的方式,称之为TIK2,正式名称是Ascend C算子开发.不同于采用Python的DSL和TIK方式,Ascend C使用C/C++作为前端语言的算子开发工 ...

  3. CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_算子开发(二)

    1.作业算子要求 2.检查版本对应关系 在Mindstudio软件包下载界面可以检查安装的mindstudio版本和cann版本是否一致,如果不一致可能会导致后面算子工程创建出错. 这里我用的Mind ...

  4. CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_UT测试(三)

    UT测试: UT测试是为了测试算子代码的正确性和不同场景下的覆盖率的测试,UT测试在硬件CPU上执行,MindStudio提供了gtest框架方便进行UT测试. 参考:https://www.hias ...

  5. CANN AICPU算子耗时分析及优化探索

    摘要:本文以GreaterEqual作为测试算子,该算子计算逻辑较为简单(output = input1 >= input2),旨在尽可能降低计算耗时,使得算子耗时尽可能以数据操作和算子调度作为 ...

  6. 华为CANN训练营_昇腾AI入门课笔记

    本章学习目标 1.了解CANN在昇腾AI全栈架构中的位置和作用. 2.了解基于CANN的应用开发编程框架.基本概念 本章学习内容 1.昇腾AI全栈架构 1.1芯片层:算力基础(小芯片集成在其他芯片中) ...

  7. 【2023·CANN训练营第一季】昇腾AI入门课(TensorFlow)学习总结

    最近AI可是非常火爆,ChatGPT成为互联网领域最大的风口,带来了各个行业的焦点,也产生了很多场景的AI应用,这将改变人与工具的交互方式,为我们生活提供更便捷的服务.        此次正好报名参加 ...

  8. 【2023 · CANN训练营第一季】晟腾AI入门课(TensorFlow)第一章 晟腾AI基础知识介绍

    本章学习目标 了解CANN在晟腾AI全栈架构中的位置和作用. 了解基于CANN的应用开发编程框架.基本概念. 晟腾AI全栈架构 晟腾AI全栈可以分差四个大部分: 应用使能层面,此层面通常包含用于部署模 ...

  9. 【CANN训练营】新手班结业考核

    CANN训练营第二季官网链接,可以报名和申请资源,申请完资源,开通弹性云服务器,使用华为给准备好的环境,就可以上手实验和完成考核了 作业一:Caffe ResNet-50网络实现图片分类 题目:下载基 ...

最新文章

  1. 让Windows 2000/XP系统自动登陆
  2. 《Cocos2d 跨平台游戏开发指南(第2版)》一1.9 添加动作到精灵
  3. mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇
  4. spring boot 限制初始值大小及参数中文详解
  5. instanceof关键字
  6. jboss url路径_在JBoss的服务器端正确解码URL参数
  7. jq监听子元素被点击_vue开发app点击字母展示地区列表(兄弟组件之间联动)
  8. java中date加1s_是否有一个java库将描述时间度量(例如“1d 1m 1s”)的字符串转换为毫秒?...
  9. SVN卸载,修复,等问题:依赖服务或组无法启动.(0x8007042c)解决之一
  10. android注册文件打开,Android项目实战系列—基于博学谷(三)注册与登录模块
  11. 瑞幸咖啡股价再大涨超36% 目前总市值约13.87亿美元
  12. 第七届蓝桥杯大赛个人赛省赛(软件类)真题4
  13. 磁共振成像(MRI)影像心脏组织分割
  14. vgc机器人编程1到13题_工业机器人编程与实操期末试题
  15. Android上传图片的方式
  16. Mysql比较运算符实战
  17. WPF中资源字典引用出错
  18. Unity3D - 使用天空盒子(Using Skyboxes)
  19. 中小型水库雨水情测报平台有哪些功能?水库雨水情数据孪生安全监测系统
  20. 疯狂python讲义豆瓣评分_书榜 | 计算机书籍(9.9-9.15)销售排行榜

热门文章

  1. Fast and Accurate Detection of Unknown Tags for RFID Systems – Hash Collisions are Desirable 理解+笔记
  2. python谁是卧底游戏流程图_好玩的聚会游戏“谁是卧底”游戏规则
  3. Creating Add-in Hooks (C#)
  4. 华为IAD设备命令配置IP地址
  5. Xiaohe-LeetCode 100 Same Tree
  6. 四川多多开店:拼多多上面的东西是正品吗
  7. 得推校园O2O系统为校园创业提供技术支持
  8. 4bpp Framebuffer 输出成 png
  9. ubuntu下面玩街机+北通野牛手柄
  10. 【物联网服务NodeJs-5天学习】第四天存储篇③ ——基于物联网的WiFi自动打卡考勤系统,升级存储为mysql,提醒功能改为QQ