hiyouga / LLaMA-Factory

Unify Efficient Fine-Tuning of 100+ LLMs
Apache License 2.0
25.52k stars 3.16k forks source link

glm系列模型做eval时应该将template参数设为什么 #4598

Closed DaozeZhang closed 5 days ago

DaozeZhang commented 5 days ago

Reminder

System Info

Reproduction

我尝试了使用chatglm3-6b模型和glm-4-9b模型进行微调。根据readme,微调时显然要将template设置为chatglm3glm4,这是没问题的。 我注意到readme里还有一句话:

对于所有“基座”(Base)模型,template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Instruct/Chat)模型请务必使用对应的模板。 请务必在训练和推理时采用完全一致的模板。

因此起初我在做eval时都是将template参数设为与微调时一样的。这样得到的结果比公开测评结果要差很多,大约20%,所以是有问题的。 之后我注意到有人对llama2问了类似的问题,你给出的回复是应该用vanillahttps://github.com/hiyouga/LLaMA-Factory/issues/1232#issuecomment-1772803262 ) 我感到困惑,因为readme里从来没有提过vanilla,只是提过default, alpaca, vicuna

之后我尝试在eval glm-4-9b 时,把default传入,这样得到的结果与公开测评基本一致。

所以我想问问,chatglm3-6b模型和glm-4-9b模型在eval时到底应该给template传入什么?都是传default吗?这样是不是违背了训练与推理时采用完全一致模板的要求?有没有相关文档能讲清楚本项目的各个传入参数是什么意思?非常感谢!

Expected behavior

有没有相关文档能讲清楚本项目的各个传入参数是什么意思,这样对于理解比较有帮助,非常感谢

Others

No response

hiyouga commented 5 days ago

template: fewshot

DaozeZhang commented 5 days ago

template: fewshot

非常感谢您! 我想再确认一下,所以如果llamafactory-cli train就是传入chatglm3或者glm4,如果llamafactory-cli eval就是传入fewshot,如果llamafactory-cli export仍保持传入chatglm3或glm4。是这样吗?

hiyouga commented 5 days ago

只有 eval 传入的是 fewshot,其他依旧保持 readme 的说法

DaozeZhang commented 5 days ago

只有 eval 传入的是 fewshot,其他依旧保持 readme 的说法

非常感谢您!我按您说的用glm-4-9b在mmlu上eval,效果与公开结果基本一致。 但我chatglm3-6b在mmlu上eval时仍显著低于公开结果。命令如下:

CUDA_VISIBLE_DEVICES=4,5 llamafactory-cli eval \
    --model_name_or_path /data/pretrain_models/chatglm3-6b \
    --template fewshot \
    --task mmlu \
    --split test \
    --lang en \
    --n_shot 5 \
    --save_dir /data/zdz/LLM/LLaMA-Factory_eval/chatglm3-6b_ori_mmlu \
    --batch_size 32 

得到的结果是

        Average: 51.06
           STEM: 44.57
Social Sciences: 60.06
     Humanities: 45.57
          Other: 56.54

这个51.06明显低于公开结果: image

请问可能是什么原因呢?是传入参数哪里没写对吗

hiyouga commented 5 days ago

评测方法不一样