需完成
使用前准备后可在任意目录下实现算子的DSL语言方案( Domain-Specific Language ,基于特性域语言),实现中包括如下注意事项:
- 实现模拟DSL算子前,需要导入Tensor、Chip以及算子实现所必要的指令(统一以小写命名)。
- 参照使用示例中的main.py脚本,以with语句开启算子实现代码的入口,“enable_trace”和“enable_metrics”两个接口可使能trace打点图和指令统计功能。
- 详细指令接口说明请参考mskpp对外接口使用说明。
具体操作
- 根据用户自己的算子逻辑方案实现算子功能函数,tiling策略的模拟体现在算子功能函数的for循环中,例如单核需要处理4096个数据,预期分8块数据分批处理,就需要for循环8次并每次创建一个大小为512个数据的GM的Tensor。
- main.py实现完成后,使用python执行该脚本即可,并在当前目录获取以下建模数据。
- 支持搬运通路建模(Atlas A2训练系列产品/Atlas 800I A2推理产品)
在
Atlas A2训练系列产品/Atlas 800I A2推理产品中,新增了L1到fixpipe buffer及L1到Bias table。前者是存在L0C_TO_OUT随路转换时存储量化转换的scale参数,后者是存一维的bias数据。在本工具中,只需按GM-L1-Bias table/FP的顺序通路搬运即可。
in_x = Tensor("GM", "FP16", [64], format="ND")
l1_x = Tensor("L1")
fp_x = Tensor("FB")
bt_x = Tensor("BT")
l1_x.load(in_x)
l1_x_to_fp = l1_x[0:32]
l1_x_to_bt = l1_x[32:64]
fp_x.load(l1_x_to_fp)
bt_x.load(l1_x_to_bt)
- 支持随路转换建模
在昇腾AI处理器的CUBE单元中,进行计算的数据格式需要是特殊的私有NZ格式。而通常在GM上的数据都是ND格式,因此在进行Cube运算时,需要将数据格式进行转换。在Atlas A2训练系列产品/Atlas 800I A2推理产品中,GM到CUBE相关的存储单元的搬运通路已具备ND转NZ的随路转换能力。
在mskpp工具中,若GM-L1且用户定义GM的tensor是ND,L1的tensor是NZ,或L0C-GM且用户定义L0C上的tensor是NZ,GM的tensor是ND,则开启随路转换,调取相关实测数据。
in_x = Tensor("GM", "FP16", [128, 256], format="ND")
l1_x1 = Tensor("L1", format="NZ")
l1_x2 = Tensor("L1", format="NZ")
l1_x1.load(in_x[128, 0:128])
l1_x2.load(in_x[128, 128:])
- 支持cache命中率建模
L2Cache是指部分GM空间与vectorcore和cubecore存在高带宽的搬运通路,当L2Cache命中率接近100%与L2Cache命中率接近0%时,带宽能有两倍以上的差距。mskpp工具目前支持用户手动调整L2Cache命中率。
with Chip("Ascendxxxyy") as chip:
config = {"cache_hit_ratio": 0.6}
chip.set_cache_hit_ratio(config)
- 支持tensor拆分使用
mskpp工具中,Tensor拆分是指将一个大的Tensor用切片的手段生成新的小Tensor,例如:
in_x = Tensor("GM", "FP16", [128, 256], format="ND")
in_x_1 = in_x[128, 0:128] # 大小1*128
in_x_2 = in_x[128, 64:] # 大小1*64
- 支持debug模式
该模式可使能用户初步定位DSL语言编码过程中哪个指令的出队入队存在问题,提升与工具开发共同定位的效率,使能方式如下:
with Chip("Ascendxxxyy", debug_mode=True) as chip:
- 支持pipe信息的理论值与msprof实测值比对
以
Ascend C算子为例,通过--application方式调用msprof,在OPPROF_
{timestamp}_XXX目录中输出PipeUtilization.csv文件,并在脚本中使能:
with Chip("Ascendxxxyy") as chip:
chip.enable_metrics()
chip.set_prof_summary_path("${INSTALL_DIR}/OPPROF_{timestamp}_XXX/PipeUtilization.csv")
生成的Pipe_statistic.csv文件包含
“ProfDuration(us)_0”和
“ProfRatio_0”两列,其中ProfDuration(us)_0列的取值和PipeUtilization.csv文件中对应的值一致,ProfRatio_0为实测值跟理论值的比值。 ProfRatio是实测值相对理论值的倍数,倍数越大,优化空间越大。
图1 Pipe_statistic.csv文件