从0%到100%:我是如何通过数据量优化解决AddKernelInvocationNeo AI Core占用率问题的
在学习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%,如下图所示

从上图中可以明显看到,在数据搬入阶段,Control CPU使用率加大,计算阶段,AI Core使用率达到100%,数据搬出阶段,Control CPU使用率加大。
值得注意的是,加大为上面的数据量后执行, 内存占用会显著增加到96%,然后会报write file failed的问题,磁盘上会留下2GB的文件。
总之,通过这次实验,验证了NPU执行是没有问题,且学到了npu-smi info watch命令,很有收获。
- 点赞
- 收藏
- 关注作者
评论(0)