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

OA数据集的平均SequenceLen较长,总量超过三千条,在模型体量大(65B及以上)而服务化配置的MaxBatchSize较小时,运行完成整个数据集耗时较久,可能需要数个小时。
数据集获取
- 数据集获取路径必须通过镜像包安装MindIE,具体安装方式请参见《MindIE安装指南》中的“安装MindIE > 方式一:镜像部署方式”章节。
- MindIE安装完成后,可以从/usr/local/Ascend/atb-models/tests/modeltest/README_NEW.md获取如下数据集:
- BoolQ
- HumanEval
- HumanEval_X
- GSM8K
- LongBench
- MMLU
- NeedleBench
- VideoBench
- Vocalsound
- TextVQA
- TruthfulQA
- OA数据集需要从官方链接获取,获取方式如下:
- 单击链接获取OA数据集。
- (可选)当输入参数中的--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格式。
父主题: 附录