精度调试
大模型精度推理工具提供对大模型推理的数据落盘(dump)以及精度比对(compare)等功能,用于帮助开发者快速定位推理开发过程中的精度问题,发现根因,提升开发效率。
dump工具提供加速库模型推理过程中产生的中间数据的dump能力,落盘的数据用于进行后续的精度比对。
compare工具具有一键式精度比对功能,支持快速实现推理场景的整网精度比对。
前提条件
模型dump
- 设置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
- 模型dump。
- 量化模型dump。
- 执行以下命令,确认量化模型是否可以推理。
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)
- 执行以下命令,对量化模型进行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
- 量化模型dump成功后,落盘数据目录结构如下。
- {quant_dump_path}/ # 数据保存路径 - msit_dump_{timestamp}/ # 数据落盘时间戳目录 - layer/ # 网络结构子目录 - model/ # 模型信息目录 - tensors/ # tensor子目录
- 执行以下命令,确认量化模型是否可以推理。
- 浮点模型dump。
- 执行以下命令,确认浮点模型是否可以推理。
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)
- 执行浮点模型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}
- 浮点模型dump成功后,会在float_dump文件夹下生成msit_dump_{timestamp}文件夹,落盘数据目录结构如下。
- {float_dump_path}/ # 数据保存路径 - msit_dump_{timestamp}/ # 数据落盘时间戳目录 - layer/ # 网络结构子目录 - model/ # 模型信息目录 - tensors/ # tensor子目录
- 执行以下命令,确认浮点模型是否可以推理。
- 量化模型dump。
精度比对
- 执行以下命令,对量化模型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所示。
- 精度比对回显信息如下,比对结果文件中的参数说明可参见精度比对结果参数说明,做进一步分析。
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