算子特性建模
msKPP支持tensor拆分使用、debug模式和pipe信息的理论值与msprof实测值比对的功能,也支持对算子特性进行建模(搬运通路建模、随路转换建模和cache命中率建模),用户需根据实际需求进行选择,完成后可实现算子计算搬运规格分析、极限性能分析以及算子Tiling初步设计。
文档中的Ascendxxxyy需替换为实际使用的芯片类型。
- 支持搬运通路建模(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拆分使用
- 支持debug模式
- 支持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文件
父主题: 算子设计(msKPP)