📌 目录


1. 为什么微调前要先做评估?

LLM 微调流程常见如下:

任务设定 → 数据准备 → 模型选择 → 微调 → 评估

但真正高效的实践顺序应当是:

任务设定 → 评估机制建立 → 数据准备 → 微调

原因是:

  • ✅ 帮助理解任务目标;
  • ✅ 指导选择合适模型;
  • ✅ 避免“调了半天不知道变好没”。

2. 微调任务如何选择?

技术学习方向:

选择容易评估的任务,如:

  • 数学客观题(GSM8k)
  • 翻译
  • 关键词提取等

项目实战方向:

选择评估成本可控、有现成数据或可收集的数据集,如:

  • 医疗 QA
  • 编程助手
  • 法律问答

🔑 核心判断标准:任务是否可评估/易评估


3. 如何选择评估数据?

技术学习:

  • 推荐使用开放数据集:GSM8k、ARC、HellaSwag、BoolQ

项目开发:

  • 根据业务领域构建数据,或复用已有标注数据集

4. 评估 LLM 在 GSM8k 等任务上的方法

评估流程包括:

  • 明确任务目标(分类 / 生成)

  • 选择合适指标:

    • 分类:准确率 / 精度 / 召回
    • 生成:exact match、BLEU
    • QA类:F1 / EM

例如在 GSM8k 上:

lm_eval --model hf \
 --model_args pretrained=Qwen/Qwen2.5-7B-Instruct \
 --tasks gsm8k_cot \
 --device cuda:0 \
 --batch_size 4

5. 有没有工具能帮我们评估?

✅ 有!推荐使用:

lm-evaluation-harness(简称 lm-eval)
GitHub 地址:https://github.com/EleutherAI/lm-evaluation-harness

特点:

  • 支持 Huggingface / OpenAI / Anthropic 等模型
  • 支持 LoRA、delta weights、量化推理
  • 提供 60+ benchmark 任务支持

6. 如何安装 lm-eval 工具?

✅ 方法一(推荐,支持自定义 task):

git clone --depth 1 https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .

✅ 方法二(使用标准 task):

pip install lm-eval

7. 如何快速评估模型性能?

示例:

lm_eval --model hf \
 --model_args pretrained=Qwen/Qwen2.5-7B-Instruct,dtype=bfloat16 \
 --tasks gsm8k_cot \
 --log_samples --output_path results \
 --device cuda:0 --batch_size 4

参数解释:

  • --model hf 使用 Huggingface 模型
  • --log_samples 保存预测详情
  • --output_path 结果输出路径

8. 支持哪些模型类型?

模型类型 支持与否 示例参数
Huggingface 模型 ✅ 支持 --model hf
OpenAI GPT ✅ 支持 --model openai-completions
vLLM / 本地 API ✅ 支持 --model local-completions
delta weights ✅ 支持 delta=xxx
LoRA 微调模型 ✅ 支持 peft=xxx

9. 是否支持 LoRA 等微调模型?

支持使用 Peft 库加载 LoRA / QLoRA 模型:

lm_eval --model hf \
 --model_args pretrained=gpt-j-6b,peft=nomic-ai/gpt4all-j-lora,load_in_4bit=True \
 --tasks arc_easy,piqa,boolq \
 --device cuda:0

10. 是否支持评估 OpenAI 等闭源模型?

支持,需要配置 API Key:

export OPENAI_API_KEY=YOUR_KEY
lm_eval --model openai-completions \
 --model_args model=gpt-4 \
 --tasks lambada_openai,hellaswag

11. 是否支持本地部署的 API 模型?

支持,例如 Ollama / FastChat 提供的本地服务:

lm_eval --model local-completions --tasks gsm8k \
 --model_args model=facebook/opt-125m,base_url=http://localhost:8000/v1/completions

12. 是否支持 delta weights 模型?

支持,指定基础模型 + delta 模型路径:

lm_eval --model hf \
 --model_args pretrained=Ejafa/llama_7B,delta=lmsys/vicuna-7b-delta-v1.1 \
 --tasks hellaswag

📌 delta weights 是微调权重差异文件,需要和基础模型合并才能推理。


13. 是否支持量化模型?

支持 GPTQ、GGUF 等格式:

GGUF 示例(llama.cpp)

python3 -m llama_cpp.server --model llama-model.gguf
lm_eval --model gguf --model_args base_url=http://localhost:8000 --tasks gsm8k

GPTQ 示例:

lm_eval --model hf \
 --model_args pretrained=model-path,gptqmodel=True \
 --tasks hellaswag

14. 支持哪些评估任务与评估方式?

支持超过 60 个 benchmark,包含多个子任务:

  • 数据路径:lm_eval/tasks
  • 任务示例:GSM8k、ARC、BoolQ、HellaSwag

评估方式支持:

  • exact_match
  • BLEU
  • accuracy
  • self-consistency 等

15. 如何自定义评估任务?

任务配置示例(以 GSM8k 为例):

task: gsm8k
dataset_path: gsm8k
doc_to_text: "Question: {{question}}\nAnswer:"
doc_to_target: "{{answer}}"
metric_list:
  - metric: exact_match
    aggregation: mean

参考文档:


16. 如何使用多 GPU 进行评估?

✅ 数据并行(加速推理):

accelerate launch -m lm_eval --model hf \
 --tasks arc_easy \
 --batch_size 16

✅ 模型并行(切分模型到多卡):

lm_eval --model hf \
 --tasks arc_easy \
 --model_args parallelize=True \
 --batch_size 16

📎 小结

能力 是否支持
Huggingface 模型
OpenAI API
LoRA 微调模型
delta weights
本地 API 服务
量化模型(GGUF/GPTQ)
多GPU/模型并行
自定义任务/评估方式

📚 参考资料

Logo

更多推荐