下载
中文
注册

算子特性建模

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的顺序通路搬运即可。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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,则开启随路转换,调取相关实测数据。

    1
    2
    3
    4
    5
    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命中率。

    1
    2
    3
    with Chip("Ascendxxxyy") as chip:
        config = {"cache_hit_ratio": 0.6}
        chip.set_cache_hit_ratio(config)
    
  • 支持tensor拆分使用
    msKPP工具中,Tensor拆分是指将一个大的Tensor用切片的手段生成新的小Tensor,例如:
    1
    2
    3
    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文件