昇腾社区首页
中文
注册

数据集使用

以下是MindIE Benchmark工具用于性能测试的常见数据集,在此提供两个脚本用于加载词表文件,将数据集转换为tokenid。

约束

数据集文件大小最大为1GB。

OA数据集的平均SequenceLen较长,总量超过三千条,在模型体量大(65B及以上)而服务化配置的MaxBatchSize较小时,运行完成整个数据集耗时较久,可能需要数个小时。

数据集获取

  1. 数据集获取路径必须通过镜像包安装MindIE,具体安装方式请参见《MindIE安装指南》中的“安装MindIE > 方式一:镜像部署方式”章节
  2. MindIE安装完成后,可以从/usr/local/Ascend/atb-models/tests/modeltest/README_NEW.md获取如下数据集:
    • BoolQ
    • HumanEval
    • HumanEval_X
    • GSM8K
    • LongBench
    • MMLU
    • NeedleBench
    • VideoBench
    • Vocalsound
    • TextVQA
    • TruthfulQA
  3. OA数据集需要从官方链接获取,获取方式如下:
    1. 单击链接获取OA数据集。
    2. (可选)当输入参数中的--TaskKind参数配置为stream_token时需要将OA数据集的内容转换为tokenid。

      以convert2tokenid.py命名为例,创建.py文件,拷贝如下示例代码,执行.py文件进行转换:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      import csv
      from pathlib import Path
      import pyarrow.parquet as pq
      import glob, os
      from transformers import AutoTokenizer
      def read_oa(dataset_path, tokenizer_model):
          out_list = []
          for file_path in glob.glob((Path(dataset_path) / "*.parquet").as_posix()):
              file_name = file_path.split("/")[-1].split("-")[0]
              data_dict = pq.read_table(file_path).to_pandas()
              data_dict = data_dict[data_dict['lang'] == 'zh']
              ques_list = data_dict['text'].to_list()
              for ques in ques_list:
                  tokens = tokenizer_model.encode(ques)    # 使用tokenizer_model.encode进行加密
                  if len(tokens) <= 2048:
                      out_list.append(tokens)
                  else:
                      out_list.append(tokens[0:2048])
          return out_list
      def save_csv(file_path, out_tokens_list):
          with open(file_path, 'w', newline='') as csvfile:
              csv_writer = csv.writer(csvfile)
              for row in out_tokens_list:
                  csv_writer.writerow(row)
      if __name__ == '__main__':
          tokenizer_path = "/data/models/baichuan2-7b"
          oa_dir = "/home/xxx/oasst1"
          save_path = "oa_tokens.csv"
          tokenizer_model = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, use_fast=True, local_files_only=True)
          tokens_lists = read_oa(oa_dir, tokenizer_model)
          save_csv(save_path, tokens_lists)
      

      其中:

      • tokenizer_path为词表文件路径,通常模型权重路径。
      • oa_dir为OA数据集路径。
      • save_path为转换后OA tokenid数据集输出路径,csv格式。

GSM8K数据集转tokenids

(可选)当输入参数中的--TaskKind参数配置为stream_token时需要将GSM8K数据集的内容转换为tokenid。

以convert2tokenid.py命名为例,创建.py文件,拷贝如下示例代码,执行.py文件进行转换:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
import pandas as pd
from transformers import AutoTokenizer

tokenizer_path = "/home/weight/llama2-70b"
gsm8k_path = "/data/xxx/gsm8k.jsonl"
save_path = "token_gsm8k.csv"
tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=True, use_fast=True, local_files_only=True)

def gen_requests_from_trace(trace_file):
    len = 0
    with open(save_path, "w") as f:
        df = pd.read_json(trace_file, lines=True)    # 使用pandas读取json文件
        for i, row in df.iterrows():
            ques = row["question"]
            token = tokenizer([ques], return_tensors="np")    # 使用tokenizer转换字符串为tokenid
            token: np.ndarray = token["input_ids"].astype(np.int64)
            np.savetxt(f, token, fmt="%d", delimiter=",")    # 用numpy保存到csv中
            len+=token.shape[-1]
    print(len / 1319)

if __name__ == '__main__':
    gen_requests_from_trace(gsm8k_path)

其中:

  • tokenizer_path为词表文件路径,通常模型权重路径。
  • gsm8k_path为GSM8K数据集路径。
  • save_path为转换后GSM8K tokenid数据集输出路径,csv格式。