Files
YG_FT/docs/模型评测功能总结.md
wuyongtao 0c39f2f5b9 feat: 模型评测端到端闭环 — EvalRunner引擎 + 算力节点Job执行 + 结果回写
算力节点 (compute):
- 新建 eval_runner.py: 评测执行引擎,作为subprocess运行
  - 加载模型 + JSONL数据集 + 逐样本推理
  - BLEU/ROUGE/Cosine基础指标计算
  - LLM Judge评分(OpenAI兼容API调用)
  - 结果写入eval_results.json
- adapter.py: build_command新增engine=eval分支
- main.py: 新增/json模块导入,新增/compute/files/read端点,eval job校验

后端:
- platform.py: 重写startEval提交eval job到算力节点
  - 支持models表和trained_models表查找
  - 已合并模型不传adapter路径
- platform_store.py: 新增update_eval_task/running_eval_tasks/apply_eval_job_result
- sync.py: poller新增eval job同步,异步读取eval_results.json回写结果

前端:
- EvalCreateView/DimensionCreateView: eval模型过滤扩展(API类型+api_url)
- EvalCreateView: GPU过滤在线节点空闲GPU
- EvalTaskSetupStep: GPU value从数组index改为gpu.id
- BasicMetricSetupStep: ROUGE方法名修正(rouge_1→rouge1)
- EvalView: 新增5秒轮询刷新

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-28 19:34:41 +08:00

7.0 KiB
Raw Blame History

模型评测功能总结

本项目(基于 LLaMA-Factory 的微调训练平台)包含 4 套相对独立 的模型评测能力,分别面向不同的使用场景:

能力 入口/目录 评测类型 打分方式
1. 学术 Benchmark 评测 llamafactory/eval/ 选择题式基准(类 MMLU/C-Eval 选项匹配 + few-shot
2. 评估工作台 backend/app/api/v1/eval/ 生成式问答(指令跟随) BLEU / ROUGE / ExactMatch + 可选 LLM 评审
3. 平台评估系统 backend/app/api/v1/evaluation/ 基于评估数据集的问答 判卷模型judge model打分05 分)
4. 训练时验证评估 backend/app/services/task_runner.py 训练验证集 loss 指标

下面分别说明。


1. 学术 Benchmark 评测LLaMA-Factory 原生)

面向标准学术选择题基准(如 MMLU、C-Eval 等),复用 LLaMA-Factory 原生的评测框架。

核心文件

  • llamafactory/eval/evaluator.pyEvaluator 类 + run_eval() 入口
  • llamafactory/eval/template.py:评测 prompt 模板(中/英,含 few-shot 示例构建)
  • llamafactory/hparams/evaluation_args.pyEvaluationArguments 配置类

工作流程

  1. taskbenchmark 名称加载数据集按科目subject拆分。
  2. 每个样本构造 few-shot 提示词(n_shot 控制示例数,由 lang 决定中/英模板),将题干与候选选项拼入 prompt。
  3. 调用模型推理得到预测,与标准答案比对,统计每个科目及整体的 accuracy
  4. 结果写入 save_dir,打印各科目与平均准确率。

关键参数(EvaluationArguments

  • task:基准数据集名
  • batch_size / n_shot / lang / save_dir / seed
  • model_name_or_pathtemplatetrust_remote_code 等模型相关参数

该能力属于框架底层,本平台前端未直接提供操作入口,主要通过配置文件/脚本调用。


2. 评估工作台(生成式评测 + 指标计算)

后端路由位于 backend/app/api/v1/eval/__init__.py,前端称为「评估工作台」。适用于评测模型的指令跟随与生成质量,并支持 LLM 作为裁判LLM-as-a-Judge

API 端点

  • GET /evaluation/tasks:列出评测任务(frontend/src/api/evaluation.ts:listTasks
  • POST /evaluation/run:提交一次评测(runEval
  • GET /evaluation/report/{task_id}:拉取评测报告(getReport
  • DELETE /evaluation/tasks/{task_id}:删除任务(deleteTask

评测流程(run_eval

  1. 通过 LLaMA-Factory 数据管道get_dataset) 加载数据集,支持 subset 与抽样(eval_sample)。
  2. 原生 transformers 加载模型在本地做生成推理(单进程顺序生成,便于展示样本)。
  3. 计算客观指标(compute_score
    • BLEUsacrebleu
    • ROUGE-1 / ROUGE-2 / ROUGE-Lrouge-score
    • Exact Match
  4. 可选 LLM 评审judge当配置了 judge_model / judge_api_base / judge_api_key 时,调用 OpenAI 兼容接口对每条样本打分10 分制),并输出 4 个维度与理由:
    • 核心事实正确性 factual
    • 信息完整性 completeness
    • 无幻觉 no_hallucination
    • 格式合规性 format
    • 综合分 score + reason
  5. 任务状态持久化在后端 eval_tasks.json(支持 running/completed/failed/stopped前端轮询进度。

前端页面

  • frontend/src/views/evaluation/EvaluateTask.vue:任务列表、创建评测对话框(选模型、数据集、指标、可选 judge 配置)
  • frontend/src/views/evaluation/EvaluateReport.vue报告页展示综合得分、BLEU、ROUGE-L、各维度指标及「参考答案 vs 模型预测 vs LLM 评审」对比样例

3. 平台评估系统(基于评估数据集 + 判卷模型)

后端路由位于 backend/app/api/v1/evaluation/__init__.py,是平台业务层自研的评测体系。通过「评估数据集」组织题目,可一次性对 多个被测模型 + 指定判卷模型 进行批量评分。

核心概念(数据模型 backend/app/models/models.py

  • EvalDatasetmodels.py:131):评估数据集,从项目问答对(Question/Chunk)中按 question_typemixed/fact/reasoning选题构建状态 pending/running/completed/failed
  • EvalResultmodels.py:147):单条评测结果,含 judge_score05 分)、is_correcttrue/false/partialfeedbackexpected_answer 等。
  • Taskmodels.py:184):后台任务,task_type="model-evaluation",记录进度与 model_info(存放平均分等汇总)。

评测流程(process_evaluation_taskbackend/app/services/task_processor.py:336 起)

  1. 加载评估数据集关联的题目,可选带入 chunk 上下文RAG 场景)。
  2. 对每道题,先用 build_eval_prompt 组合「上下文 + 题目 + 参考答案」,调用 判卷模型call_modeltemperature=0.3)生成评分。
  3. parse_eval_result 解析出 score(05)、is_correctfeedback,写入 EvalResult
  4. 逐题提交进度(completed_count / progress),支持中途 stopped
  5. 汇总:avg_score = 总分/有效数 × 20(换算百分制),avg_score_5 = 总分/有效数5 分制),存入 task.model_info。判定规则:得分 ≥3 视为正确

特点

  • 判卷与被测模型解耦被测模型给出答案判卷模型judge独立评分降低自评偏差。
  • 支持失败隔离:单题异常写入 evaluation_status: failed 记录而不中断整体任务。

4. 训练时验证评估

在微调训练任务执行期间,由 backend/app/services/task_runner.pydo_eval 触发:

  • 在训练过程中对验证集validation set计算 eval_loss,用于监控过拟合。
  • 结果回填到 Taskloss_info / detail,前端绘制 loss 曲线。
  • 属于训练配套的轻量评估,不参与上述 13 的业务评测。

附属:前端评测相关页面

文件 作用
frontend/src/views/evaluation/EvaluateTask.vue 评估工作台:任务列表 + 创建评测
frontend/src/views/evaluation/EvaluateReport.vue 评估报告:指标卡 + 维度标签 + 对比样例
frontend/src/api/evaluation.ts 评估工作台接口封装
平台评估系统入口 评估数据集管理 + 评估任务model-evaluation创建与结果查看

小结

  • 想要学术榜单式准确率 → 用能力 1LLaMA-Factory eval/)。
  • 想要开放式生成质量BLEU/ROUGE + LLM 评审) → 用能力 2评估工作台 /evaluation/run)。
  • 想要基于自有问答数据、用判卷模型批量打分 → 用能力 3平台评估系统 model-evaluation 任务)。
  • 训练过程监控 → 能力 4do_eval 验证集 loss

三种业务评测1/2/3相互独立可并存于同一平台数据模型EvalDataset/EvalResult/Task)主要服务于能力 3而能力 2 使用独立的 eval_tasks.json 文件持久化。