昇腾社区首页
中文
注册

精度调试

大模型精度推理工具提供对大模型推理的数据落盘(dump)以及精度比对(compare)等功能,用于帮助开发者快速定位推理开发过程中的精度问题,发现根因,提升开发效率。

dump工具提供加速库模型推理过程中产生的中间数据的dump能力,落盘的数据用于进行后续的精度比对。

compare工具具有一键式精度比对功能,支持快速实现推理场景的整网精度比对。

前提条件

  • 已参见模型量化章节完成模型量化。
  • 已参见模型量化章节的1准备好浮点模型。
  • 已安装大模型推理精度工具(Large Language Model Debug Tool),请参考大模型推理精度工具进行安装。

模型dump

  1. 设置CANN、加速库和模型仓的环境变量。
    # 配置CANN环境,默认安装在/usr/local目录下
    source /usr/local/Ascend/ascend-toolkit/set_env.sh
    # 配置加速库环境
    source /usr/local/Ascend/nnal/atb/set_env.sh
    # 配置模型仓环境变量
    source /usr/local/Ascend/MindIE-LLM/set_env.sh
  2. 模型dump。
    • 量化模型dump。
      1. 执行以下命令,确认量化模型是否可以推理。
        bash ${ATB_SPEED_HOME_PATH}/examples/models/llama3/run_pa.sh ${save_directory} ${max_output_length}

        其中ATB_SPEED_HOME_PATH的默认路径为/usr/local/Ascend/atb-models,在source模型仓中set_env.sh脚本时已配置;max_output_length为对话测试中最大输出token数。

        回显信息有如下内容,说明量化模型可以进行推理。

        Question[0]: What's deep learning?
        Answer[0]:  Deep learning is a subset of machine learning that uses artificial neural networks to analyze data. It's called
        Generate[0] token num: (0, 20)
      2. 执行以下命令,对量化模型进行dump,结果保存至用户指定dump数据的输出路径。命令中的参数说明请参见表1。此处以指定dump第二个token为例。如果需要了解更多的参数信息,请参见加速库模型数据 dump
        msit llm dump --exec "bash ${ATB_SPEED_HOME_PATH}/examples/models/llama3/run_pa.sh ${save_directory} ${max_output_length}" --type model tensor -er 2,2 -o ${quant_dump_path}
        表1 dump参数说明

        参数

        说明

        使用示例

        --exec

        指定包含ATB的程序执行命令。

        命令中不支持重定向字符,如果需要重定向输出,建议将执行命令写入shell脚本,然后启动shell脚本。

        --exec "bash run.sh patches/models"

        --type

        dump类型,默认为['tensor', 'model']。

        常用可选项如下:

        • model:模型拓扑信息(默认),当dump model的时候,layer会跟着model一起dump下来
        • layer:Operation维度拓扑信息
        • tensor:tensor数据(默认)

        --type layer tensor

        -er

        指定dump的token轮次范围,区间左右全闭,可以支持多个区间序列,默认为第0次。

        请确保输入多区间时的总输入长度不超过500个字符。

        -er 2,2

        -er 3,5,7,7:代表区间[3,5],[7,7],也就是第3,4,5,7次token

        -o

        指定dump数据的输出目录,默认为./。

        -o /home/projects/output

      3. 量化模型dump成功后,落盘数据目录结构如下。
        - {quant_dump_path}/ # 数据保存路径
          - msit_dump_{timestamp}/ # 数据落盘时间戳目录
                - layer/ # 网络结构子目录
                - model/ # 模型信息目录
                - tensors/ # tensor子目录
    • 浮点模型dump。
      1. 执行以下命令,确认浮点模型是否可以推理。
        bash ${ATB_SPEED_HOME_PATH}/examples/models/llama3/run_pa.sh --model_path ${model_path} ${max_output_length}

        回显信息有如下内容,说明浮点模型可以进行推理。

        Question[0]: What's deep learning?
        Answer[0]:  Deep learning is a subset of machine learning that uses artificial neural networks to analyze data. It's called
        Generate[0] token num: (0, 20)
      2. 执行浮点模型dump,结果保存至用户指定dump数据的输出路径。命令中的参数说明请参见表1

        此处以指定dump第二个token为例。

        msit llm dump --exec "bash ${ATB_SPEED_HOME_PATH}/examples/models/llama3/run_pa.sh --model_path ${model_path} ${max_output_length}" --type model tensor -er 2,2 -o ${float_dump_path}
      3. 浮点模型dump成功后,会在float_dump文件夹下生成msit_dump_{timestamp}文件夹,落盘数据目录结构如下。
        - {float_dump_path}/ # 数据保存路径
          - msit_dump_{timestamp}/ # 数据落盘时间戳目录
                - layer/ # 网络结构子目录
                - model/ # 模型信息目录
                - tensors/ # tensor子目录

精度比对

  1. 执行以下命令,对量化模型dump后的结果文件和浮点模型dump后的结果文件进行精度比对。
    msit llm compare -gp 
    {float_dump_path}/msit_dump_{timestamp}/tensors/{device_id}_{process_id}/2/
    -mp {quant_dump_path}/msit_dump_{timestamp}/tensors/{device_id}_{process_id}/2/ -o ${compare_result_dir}

    命令中参数解释如表2所示。

    表2 compare参数解释

    参数

    说明

    -gp

    用于指定标杆数据路径的参数,即浮点模型dump数据所在目录。

    -mp

    用于指定待比较的数据路径的参数,即量化模型dump数据所在目录。

    -o

    用于指定比对结果保存路径。

  2. 精度比对回显信息如下,比对结果文件中的参数说明可参见精度比对结果参数说明,做进一步分析。
    msit_llm_logger - INFO - golden_layer_type: Prefill_layer
    msit_llm_logger - INFO - my_layer_type: Prefill_layer
    msit_llm_logger - INFO - golden_layer_type: Decoder_layer
    msit_llm_logger - INFO - my_layer_type: Decoder_layer
    msit_llm_logger - INFO - Saved comparing results: ./msit_cmp_report_{timestamp}.csv