从0%到100%:我是如何通过数据量优化解决AddKernelInvocationNeo AI Core占用率问题的

举报
yd_226494384 发表于 2025/09/02 21:41:27 2025/09/02
【摘要】 在学习Ascend C算子开发进阶课程跟随老师执行AddKernelInvocationNeo算子案例时,通过npu-smi info watch查看AI Core使用率时,发现一直为0,因此不能确认算子是否在AI Core上运行成功。在论坛搜索之后,猜测可能原因为数据量太小(8*2048),在AI Core上执行较快,因此无法有效采样到AI Core使用率。通过增加数据率的方式,可以将AI...

在学习Ascend C算子开发进阶课程跟随老师执行AddKernelInvocationNeo算子案例时,通过npu-smi info watch查看AI Core使用率时,发现一直为0,因此不能确认算子是否在AI Core上运行成功。在论坛搜索之后,猜测可能原因为数据量太小(8*2048),在AI Core上执行较快,因此无法有效采样到AI Core使用率。通过增加数据率的方式,可以将AI Core使用率成功提升到100%,在此记录以下具体方法。

1. main.cpp中第22-23行修改为如下

 

size_t inputByteSize = 8 * 204800000 * sizeof(uint16_t);

size_t outputByteSize = 8 * 204800000 * sizeof(uint16_t);

1. add_custom.cpp最开始部分修改为

 

constexpr int32_t TOTAL_LENGTH = 8 * 204800000;                            // total length of data

constexpr int32_t USE_CORE_NUM = 8;                                   // num of core used

constexpr int32_t BLOCK_LENGTH = TOTAL_LENGTH / USE_CORE_NUM;         // length computed of each core

constexpr int32_t TILE_LENGTH = 128; // separate to 2 parts, due to double buffer

constexpr int32_t BUFFER_NUM = 2;                                     // tensor num for each queue

constexpr int32_t TILE_NUM = BLOCK_LENGTH / TILE_LENGTH / BUFFER_NUM;  

1. scripts/gen_data.py修改为

 

input_x = np.random.uniform(1, 100, [8, 204800000]).astype(np.float16)

    input_y = np.random.uniform(1, 100, [8, 204800000]).astype(np.float16)

修改完以上3处后重新执行bash run.sh -r npu -v Ascend310B1,然后另起窗口使用npu-smi info watch查看,可以发现AI Core使用率已经达到100%,如下图所示

图片1.png

 

从上图中可以明显看到,在数据搬入阶段,Control CPU使用率加大,计算阶段,AI Core使用率达到100%,数据搬出阶段,Control CPU使用率加大。

值得注意的是,加大为上面的数据量后执行, 内存占用会显著增加到96%,然后会报write file failed的问题,磁盘上会留下2GB的文件。

总之,通过这次实验,验证了NPU执行是没有问题,且学到了npu-smi info watch命令,很有收获。

 

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。