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 |
在三类下游任务上的评测结果如下:
