昇腾社区首页
中文
注册

精度比对案例

关于TorchAir图模式下FX图和GE图数据dump、compare等操作的详细介绍,可单击Link访问Ascend/msit仓获取。

假设有一个PyTorch模型,在图模式下出现了精度异常。为了确定问题来源,需要比对图模式与Eager模式下模型精度差异。具体的操作步骤如下:

  1. 环境准备,参考安装完成torch_npu安装和依赖的软件安装。
  2. 安装msit工具包里llm组件(大模型推理精度工具)。
    1. 首先安装msit工具。
      这里以源码安装为例,详细的安装过程和全量命令介绍请参考Link
      git clone https://gitee.com/ascend/msit.git
      cd msit/msit
      pip install .
    2. 下载llm组件包。
      使用msit download下载命令,--dest表示存放的指定目录。
      msit download llm --dest ${llm_dir}
    3. 安装llm组件包。

      使用msit install安装命令,--find-links表示待安装的文件目录。

      msit install llm --find-links ${llm_dir}
    4. 检查是否安装成功。
      使用msit check命令检查安装结果,日志会提示“mist-llm”安装成功。
      msit check all
  3. 获取图模式下Ascend IR图dump数据。

    以如下脚本为例,在torch.compile入图处使用msit提供的get_ge_dump_config接口获取Ascend IR图数据。

    # 导入torch_npu和工具等
    import torch, torch_npu, torchair 
    from msit_llm.dump import torchair_dump  
    
    # 定义模型Model
    class Model(torch.nn.Module):
        def __init__(self):
            super().__init__()
        def forward(self, x, y):
            ......
    model = Model().npu()
    # 配置获取Ascend IR图dump的config
    config = torchair_dump.get_ge_dump_config(dump_path=${ge_dump_path})  
    ......
    # Graph模式下torch.compile 
    npu_backend = torchair.get_npu_backend(compiler_config=config) 
    model = torch.compile(model, backend=npu_backend, dynamic=True) 
    ......

    配置后执行推理脚本,会在dump_path指定目录下生成dump数据,目录样式如下:

    |--${ge_dump_path}
       |--dump_${timestamp}
         |--${op_dump_timestamp}   // 图模式下dump的算子输入/输出信息文件夹,以时间戳命名
         |--dynamo_original_graph_${graph_id}_rank_${rank_id}_pid_${pid}_ts_${timestamp}.txt    // 图模式下dump的原始图结构
         |--dynamo_optimized_graph__${graph_id}_rank_{rank_id}_pid_{pid}_ts_{timestamp}.txt     // 图模式下dump的优化后图结构

    dump的数据包括两部分,一部分是“图模式下dump的算子输入/输出信息”,文件介绍可参考算子输入输出dump功能(图模式)中“产物说明”;另一部分是“图模式下dump的图结构信息”,文件介绍可参考图结构dump功能中“产物说明”。

  4. 获取Eager模式下FX图dump数据。

    以如下脚本为例,在torch.compile入图处使用msit提供的get_fx_dump_config接口获取FX图数据。

    import torch, torch_npu, torchair 
    from msit_llm.dump import torchair_dump  
    
    # 定义模型Model
    class Model(torch.nn.Module):
        def __init__(self):
            super().__init__()
        def forward(self, x, y):
            ......
    model = Model().npu()
    # 配置获取FX图dump的config
    config = torchair_dump.get_fx_dump_config()  
    ......
    # Eager模式下torch.compile
    npu_backend = torchair.get_npu_backend(compiler_config=config) 
    model = torch.compile(model, backend=npu_backend, dynamic=True) 
    ......

    配置后执行推理脚本,一般会在当前路径下data_dump/${token_id}/gm_${time stamp}_dump(老版本中路径可能为gm_${timestamp}_dump)目录生成dump数据,其中${token_id}从1开始,相对于GE模式是从0开始的,比对时会将FX模式的${token_id}减1。产物是npy格式,文件名和内容介绍可参考算子输入输出dump功能(Eager模式)中“产物说明”。

  5. 通过llm组件提供的精度比对能力,比对两种模式下的模型精度。

    使用如下命令,请确保当前用户已拥有目标文件的读、写权限。

    msit llm compare --my-path ${ge_dump_path}/dump_${timestamp} --golden-path ${fx_dump_path}
    • ${ge_dump_path}:图模式下Ascend IR图dump数据路径,即get_ge_dump_config接口dump_path参数指定路径下${ge_dump_path}/dump_${timestamp}目录。
    • ${timestamp}:图模式下dump对应的时间戳。
    • ${fx_dump_path}:Eager模式下FX dump数据路径,即get_fx_dump_config接口默认路径下data_dump目录。

    执行命令后,会出现类似的回显信息,精度比对结果文件中的参数说明请参见精度比对结果参数说明,以便做进一步分析。

    1
    2
    3
    4
    msit_llm_logger - INFO - Comparing GE with FX
    msit_llm_logger - INFO - All token ids in my_dump_data: dict_keys([0])
    ......
    msit_llm_logger - INFO - Saved comparing results: ./msit_cmp_report_${timestamp}.csv