跳转至

伪量化精度测试工具

Precision Tool

简介

Precision Tool为伪量化精度测试工具,在torch_npu路线下进行精度测试。

使用前准备

1.CANN包安装: 安装开发运行环境的昇腾 AI 推理相关驱动、固件、CANN 包,参照 昇腾文档 2.设置 Python 环境变量

# work_dir 为项目工作目录,即 msmodelslim 项目所在的根目录路径
# 例如:如果项目路径为 /home/user/projects/msit/msmodelslim,则 work_dir 应为 /home/user/projects
export PYTHONPATH=${work_dir}/msmodelslim:$PYTHONPATH

(可选)如果需要使用NPU多卡并行进行精度测试,需要关闭NPU虚拟内存,设置使用的卡:

export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False #关闭NPU虚拟内存
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 #指定使用的NPU卡

3.编写测试脚本,示例:

from transformers import AutoModel, AutoTokenizer, AutoModelForCausalLM
from precision_tool import PrecisionTest
import torch

if __name__ == '__main__':
    model_path = "meta-llama/Llama-2-7b-chat-hf"
    model = AutoModelForCausalLM.from_pretrained(
        model_path, 
        torch_dtype=torch.float16, 
        device_map="auto", 
        use_safetensors=True, 
        local_files_only=True
        ).eval()
    tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
    precision_test = PrecisionTest(model, tokenizer, "truthfulqa", 1, "npu")
    precision_test.test()

功能介绍

接口介绍

实例创建接口

def __init__(self, model, tokenizer, dataset, batch_size, hardware_type,
             tokenizer_return_type_id=False, shot=5):
    """
    @param model:
        llm to run the test, should be an instance of transformers.PreTrainedModel
    @param dataset:
        dataset to test precision
    @param batch_size:
        batch_size to run inference
    @param hardware_type:
        currently only npu is supported
    @param tokenizer_return_type_id:
        tokenizer return token type id
    @param shot:
        shot to test precision
    """

其中

  • model: 待测试模型,需支持使用 Transformers 库进行加载
  • tokenizer: 与 model 配套的 tokenizer
  • dataset: 待测试数据集,当前支持 BoolQ、HumanEval、MMLU、TruthfulQA
  • hardware_type: 当前支持传入"npu"
  • tokenizer_return_type_id: 当输入 Bert 类型接口时需要传入 True,具体可以根据接口运行的反馈来确定
  • shot: 精度测试时使用的shot值,当前只对MMLU数据集生效

测试结果接口

def test(self):

使用方法

1.下载数据集,并修改成如下的样式

|-- dataset
    |-- boolq
    |   `-- dev.jsonl
    |-- mmlu
    |   |-- possibly_contaminated_urls.txt
    |   |-- dev
    |   |-- test
    |   `-- val
    |-- truthfulqa
    |   `-- TruthfulQA.csv
    |-- humaneval
    |   `-- human-eval-v2-20210705.jsonl

请保持文件夹名称与结构一致
数据集下载链接:

https://storage.cloud.google.com/boolq/dev.jsonl
http://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/humaneval.zip
http://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/mmlu.zip
https://github.com/sylinrl/TruthfulQA/blob/main/data/v0/TruthfulQA.csv

2.将数据集放到与 precision_tool.py 同一个路径下,如图所示:
精度测试数据集目录示意图
3.如果测试 HumanEval,则需要安装 https://github.com/openai/human-eval