昇腾社区首页
中文
注册

set_label代码插入说明

set_label API介绍

  • 函数原型
    set_label(data_src, data_id, data_val, tensor_path)
  • 功能说明

    用于在模型PTA侧代码中打标签,记录待比对数据的来源、id、值以及路径。

  • 参数说明

    参数名

    含义

    是否必填

    使用说明

    data_src

    数据来源

    数据类型:str,可选值:acl、pta。acl表示加速库的数据,pta表示PyTorch Ascend的数据,即基准数据。

    data_id

    数据的id

    数据类型:str,通过接口gen_id()生成,id一致的数据表示成对比较的数据。

    data_val

    数据的值

    数据类型: torch.Tensor。当data_src是pta时,这个值是必填的。当data_src是acl时,若是high-level比对,需要必填。若是low-level比对,不需要填。

    tensor_path

    加速库侧数据dump的路径

    数据类型:str,当data_src是acl时,进行low-level比对时,需要提供加速库侧dump的operation或kernel的数据路径。

  • 返回值

gen_id API介绍

  • 函数原型
    gen_id()
  • 功能说明

    根据时间戳生成数据的id。

  • 返回值

    data_id,返回类型:str。

set_task_id API介绍

  • 函数原型
    set_task_id()
  • 功能说明

    用于设置加速库侧dump的数据目录,建议在每轮对话开始前调用下,可以进行多轮对话的精度比对。

  • 返回值

精度比对命令行介绍

msit llm compare xx_args

可选参数如下:

表1 参数说明

参数名

含义

--exec

执行命令,用于拉起大模型推理脚本。建议使用bash xx.sh args或者python3 xx.py的方式拉起。

使用说明

chatglm-6b为例,介绍下如何使用精度比对功能。

  1. 设置task_id。
    在每轮对话开始前设置task_id,修改“main_performance.py”
    from msquickcmp.pta_acl_cmp.compare import set_task_id     
    while True:         
        set_task_id()         
        query = input("\n用户:")         
        if query.strip() == "stop":             
            break         
        if query.strip() == "clear":             
            history = []
  2. 在推理脚本中打标签。

    “patches/models/modeling_chatglm_model.py”为例,该脚本是model粒度的替换。

    • high-level比对,比对model的输出与pta对应的model的输出的精度,找到相应的代码段,添加以下代码:
      from msquickcmp.pta_acl_cmp.compare import set_label, gen_id 
      data_id = gen_id() 
      set_label("pta", data_id, hidden_states) 
      set_label("acl", data_id, acl_model_out[0])
  3. 执行比对命令。
    安装加速库的指导文档下载编译好加速库代码,进入“example/chatglm6b”目录,执行比对命令:
    MSQUICKCMP_PATH=`python3 -c 'import msquickcmp; print(msquickcmp.__path__[0])'`
    # 需要dump加速库low-level数据时使用
    export LD_PRELOAD=$MSQUICKCMP_PATH/libsavetensor.so:$LD_PRELOAD 
    export ATB_SAVE_TENSOR=1 # 打开加速库dump开关,0为关闭dump功能(默认),1为开启;
    export ATB_SAVE_TENSOR_RANGE=0,1000 # 加速库接口dump数据轮数;
    export ATB_SAVE_TENSOR_IDS= # 加速库dump数据runner白名单,如20_2_3,21
    msit llm compare --exec "bash run_performance.sh patches/models/modeling_chatglm_model.py"
    • 在进行low-level比对时,需要先执行PTA model的推理,再执行加速库的推理,即set_label("acl", data_id, tensor_path)需要在加速库侧推理前执行。
    • low-level比对的同时,需要设置high-level比对。
  4. 结果分析。
    • 生成的csv报告如下:
      图1 比对结果
    • csv各列名称解释如下:
      表2 字段说明

      字段

      含义

      data_id

      数据的ID。

      pta_data_path

      PTA数据的dump路径。

      pta_dtype

      PTA数据的类型。

      pta_shape

      PTA数据的Shape。

      pta_max_value

      PTA数据的最大值。

      pta_min_value

      PTA数据的最小值。

      pta_mean_value

      PTA数据的平均值。

      acl_data_path

      acl数据的dump路径。

      acl_dtype

      acl数据的类型。

      acl_shape

      acl数据的Shape。

      acl_max_value

      acl数据的最大值。

      acl_min_value

      acl数据的最小值。

      acl_mean_value

      acl数据的平均值。

      cmp_flag

      是否进行比较。

      cosine_similarity

      PTA与acl数据的余弦相似度值。

      max_relative_error

      PTA与acl数据的最大相对误差。

      mean_relative_error

      PTA与acl数据的绝对相对误差。

      relative_euclidean_distance

      PTA与acl数据的相对欧式距离。

      cmp_fail_reason

      比对失败的原因。

    • 比对算法解释如下:
      表3 比对算法

      比对算法名称

      说明

      cosine_similarity

      进行余弦相似度算法比对出来的结果。取值范围为[-1,1],比对的结果如果越接近1,表示两者的值越相近,越接近-1意味着两者的值越相反。

      max_relative_error

      表示最大相对误差。取值范围为[0, +∞),值越接近于0,表明越相近,值越大,表明差距越大。

      mean_relative_error

      表示平均相对误差。取值范围为[0, +∞),值越接近于0,表明越相近,值越大,表明差距越大。

      relative_euclidean_distance

      进行欧氏相对距离算法比对出来的结果。取值范围为[0, +∞),值越接近于0,表明越相近,值越大,表明差距越大。