python -m torch.distributed.launch $DISTRIBUTED_ARGS evaluation.py \ --task-data-path $DATA_PATH\ --task $TASK \ --seq-length 2048 \ --max-new-tokens 1 \ --max-position-embeddings 2048 \ --tensor-model-parallel-size 2 \ --pipeline-model-parallel-size 4 \ --num-layers 32 \ --hidden-size 4096 \ --ffn-hidden-size 11008 \ --load ${CHECKPOINT} \ --num-attention-heads 32 \ --tokenizer-type PretrainedFromHF \ --tokenizer-name-or-path $VOCAB_FILE \ --tokenizer-not-use-fast \ --fp16 \ --micro-batch-size 1 \ --seed 42 | tee logs/train.log
主要关注的参数:
AscendSpeed新增评估模块,支持业界主流模型的下游任务和评测数据集,并支持下游任务和数据集可扩展,依赖于在线推理模块的接口。
“在tasks/evaluation”目录下提供eval_api接口与eval_impl调用文件。针对不同下游任务数据集提供不同的评估类,并调用对应的评估接口。
在eval_impl目录中,每一个.py文件对应一个数据集的评估,其中gsm8k、mmlu、ceval数据集需要做fewshot,因此在同目录的fewshot_template文件夹中提供了数据集的fewshot模板,运行的时候会读取拼接。
class BoolqEval(DatasetEval): def __init__(self, test_dir, instruction_template="{passage}\nQuestion: {question}?\nAnswer:"): self.test_dir = test_dir self.instruction_template = instruction_template class CEvalExam(DatasetEval): def __init__(self, test_dir, instruction_template="{fewshot_template}\n\n问:{question}\n答:"): self.test_dir = test_dir self.instruction_template = instruction_template class Gsm8kEval(DatasetEval): def __init__(self, test_dir, instruction_template="{fewshot_template}\n\n{question}", output_template=r'The answer is (.*?) .'): self.test_dir = test_dir self.instruction_template = instruction_template self.output_template = output_template class MmluEval(DatasetEval): def __init__(self, test_dir, instruction_template="{few_shot_examples}\n\n" "{question}\nAnswer:", output_template1=r".*(?P<answer>[A|B|C|D])\..*", output_template2=r"(?P<answer>[A|B|C|D])"): self.test_dir = test_dir self.instruction_template = instruction_template self.output_template = [output_template1, output_template2]
任务初始化定义传入参数说明:
if rank == 0: logging.info("Boolq dataset acc = %d/%d=%e", acc_n, len(boolq_question_list), acc_n / len(boolq_question_list)) total_n += len(boolq_question_list) total_acc_n += acc_n answer_result['Boolq_dataset'] = subject_result score_datas.append(['Boolq_dataset', len(boolq_question_list), acc_n / len(boolq_question_list)])
具体需要输入数据对应加载路径,instruction模板,配置输出模板的文件会进行初始化。
下游任务 |
数据集名称 |
答案类型 |
评测模型 |
---|---|---|---|
Common Sense Reasoning |
BoolQ (Clark et al., 2019) |
T or F |
LLAMA |
Mathematical reasoning |
GSM8K |
Unique answer |
LLAMA |
Massive Multitask Language Understanding |
MMLU |
Multiple choices |
LLAMA、LLAMA2、baichuan |
在三类下游任务上的评测结果如下: