CAModel性能仿真

功能介绍

算子在仿真器上使用CAModel模式拉起msprof op simulator进行性能仿真,msprof op simulator可通过MindStudio Insight展示指令流水图和算子代码热点图,协助用户定位算子内存、算子代码以及算子指令的异常,实现全方位的算子调优。msprof op simulator具体使用情况请参见工具使用的msprof op simulator。

开启CAModel后,调测工具不会再进行精度比对。

使用方法(命令行)

  1. 完成环境搭建,并准备好输入/标杆数据文件。
  2. 执行如下命令进行CAModel性能仿真,仅提供关键参数项示例,其他参数请参考Simulator仿真参数按需设置。

    ascendebug kernel --backend simulator --json-file ${op_config_json_file} --repo-type ${repo_type} --chip-version ${chip_version} --core-type ${core_type} --install-path ${cann_install_path} --work-dir ${work_dir} --block-num 1 --timeout 1200 ... {其他参数}

    一般情况下,CAModel仿真时运行比较慢,--timeout一般设置为1200秒,--block-num一般设置为1,用户需按实际情况设置。

  3. 查看性能仿真结果,详细说明参见产物说明

使用方法(API)

  1. 完成环境搭建,并准备好输入/标杆数据文件。

    核函数直调工程场景下,需提前配置好核函数源码信息OpKernelInfo

  2. 构建算子信息。调用DebugOp类里input系列接口(如tensor_input、custom_input等),设置算子的输入、输出、属性值等信息。
  3. 创建调试对象并初始化工作空间。调用create_op_executor接口,创建调试对象op_executor,用户可传入${work_dir}参数手动设置工作空间。
  4. (可选)参考Tiling调测功能 > 使用方法(API)章节,调用Tiling调测接口生成Tiling Info文件。

    本步骤仅适用于没有Tiling Info文件的场景,需调用Tiling调测API生成Tiling Info。

  5. 调用NPU编译接口,进行算子源码编译,生成kernel.o文件。

    1. 通过CompileNpuOptions设置NPU编译相关的功能,如内存检测功能。
    2. 根据不同场景调用对应的NPU编译接口。

  6. 调用CAModel运行接口,在仿真器上运行核函数,生成算子流水图。

    1. 通过RunSimuOptions设置仿真运行相关的功能,并通过NpuCompileInfo设置NPU编译属性。
    2. 调用run_camodel接口。

  7. 查看性能仿真结果,详细说明参见产物说明

产物说明

无论是命令行方式或API方式,CAModel仿真结果存放在${root}/${work_dir}/simulator路径下,其中${root}表示当前操作路径,${work_dir}表示调测工作空间,默认为/debug_workspace/${op_type}目录,${op_type}为算子名。目录结构示例如下:

目前拉起msprof op simulator进行性能仿真仅支持单算子场景,msprof op simulator产物说明详见工具使用中的msprof op simulator。

├ ${op_type}                   // 算子名
├── simulator
│   ├── build               // 存放NPU编译生成的中间文件
│       ├── launch_args.so
│   ├── output             // 存放NPU编译运行的输出文件
│       ├── y.bin          // 运行输出原始数据
│   ├── src                // 存放NPU编译生成的临时代码文件
│       ├── _gen_args_${op_type}.cpp
│   ├── OPPROF_{timestamp}_XXX
│       ├── dump
         └── simulator
            ├── core0.veccore0       // 按照core*.veccore*或core*.cubecore*目录存放各核的数据文件
            │   ├── core0.veccore0_code_exe.csv
            │   ├── core0.veccore0_instr_exe.csv
            │   └── trace.json     // 该核的仿真指令流水图文件
            ├── core0.veccore1
            │   ├── core0.veccore1_code_exe.csv
            │   ├── core0.veccore1_instr_exe.csv
            │   └── trace.json
            ├── core1.veccore0
            │   ├── core1.veccore0_code_exe.csv
            │   ├── core1.veccore0_instr_exe.csv
            │   └── trace.json
            ├── ... 
            ├── visualize_data.bin 
            └── trace.json      // 全部核的仿真指令流水图文件