AI开发平台MODELARTS-AI CPU问题定位处理:IndexPut算子替换

时间:2024-04-30 18:09:26

IndexPut算子替换

在tensor类型的赋值和切片操作时,会使用IndexPut算子执行,一般都在AICPU上执行,可以转换为等价的tensor操作转换到CUBE单元上执行。例如:

masked_input[input_mask] = 01 

建议替换为:

masked_input *= ~input_mask 1 

此处是将IndexPut的masked_input是float类型的tensor数据,input_mask是和masked_input shape 一致的bool类型tensor或者01矩阵。由于是赋0操作,所以先对input_mask 取反后再进行乘法操作。

以赋0操作为例,在shape = (512, 32, 64) 类型float32 数据上测试,替换前耗时: 9.639978408813477 ms,替换之后耗时为 0.1747608184814453 ms

Profiling分析算子下发发现,替换前:总体耗时在9.902ms,Host下发到device侧执行5个算子,其中aclnnIndexPutImpl_IndexPut_IndexPut是执行在 AICPU上。

图3 替换前

替换后:总体耗时226.131us。下发三个执行算子,均执行在AI CORE上。

图4 替换后
support.huaweicloud.com/bestpractice-modelarts/modelarts_10_2517.html