算力节点 (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>
7.0 KiB
7.0 KiB
模型评测功能总结
本项目(基于 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)打分(0–5 分) |
| 4. 训练时验证评估 | backend/app/services/task_runner.py |
训练验证集 | loss 指标 |
下面分别说明。
1. 学术 Benchmark 评测(LLaMA-Factory 原生)
面向标准学术选择题基准(如 MMLU、C-Eval 等),复用 LLaMA-Factory 原生的评测框架。
核心文件
llamafactory/eval/evaluator.py:Evaluator类 +run_eval()入口llamafactory/eval/template.py:评测 prompt 模板(中/英,含 few-shot 示例构建)llamafactory/hparams/evaluation_args.py:EvaluationArguments配置类
工作流程
- 按
task(benchmark 名称)加载数据集,按科目(subject)拆分。 - 每个样本构造 few-shot 提示词(
n_shot控制示例数,由lang决定中/英模板),将题干与候选选项拼入 prompt。 - 调用模型推理得到预测,与标准答案比对,统计每个科目及整体的
accuracy。 - 结果写入
save_dir,打印各科目与平均准确率。
关键参数(EvaluationArguments)
task:基准数据集名batch_size/n_shot/lang/save_dir/seedmodel_name_or_path、template、trust_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)
- 通过 LLaMA-Factory 数据管道(
get_dataset) 加载数据集,支持subset与抽样(eval_sample)。 - 用 原生 transformers 加载模型在本地做生成推理(单进程顺序生成,便于展示样本)。
- 计算客观指标(
compute_score):BLEU(sacrebleu)ROUGE-1 / ROUGE-2 / ROUGE-L(rouge-score)Exact Match
- 可选 LLM 评审(judge):当配置了
judge_model/judge_api_base/judge_api_key时,调用 OpenAI 兼容接口对每条样本打分(10 分制),并输出 4 个维度与理由:- 核心事实正确性
factual - 信息完整性
completeness - 无幻觉
no_hallucination - 格式合规性
format - 综合分
score+reason
- 核心事实正确性
- 任务状态持久化在后端
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)
EvalDataset(models.py:131):评估数据集,从项目问答对(Question/Chunk)中按question_type(mixed/fact/reasoning)选题构建,状态pending/running/completed/failed。EvalResult(models.py:147):单条评测结果,含judge_score(0–5 分)、is_correct(true/false/partial)、feedback、expected_answer等。Task(models.py:184):后台任务,task_type="model-evaluation",记录进度与model_info(存放平均分等汇总)。
评测流程(process_evaluation_task,backend/app/services/task_processor.py:336 起)
- 加载评估数据集关联的题目,可选带入
chunk上下文(RAG 场景)。 - 对每道题,先用
build_eval_prompt组合「上下文 + 题目 + 参考答案」,调用 判卷模型(call_model,temperature=0.3)生成评分。 parse_eval_result解析出score(0–5)、is_correct、feedback,写入EvalResult。- 逐题提交进度(
completed_count/progress),支持中途stopped。 - 汇总:
avg_score = 总分/有效数 × 20(换算百分制),avg_score_5 = 总分/有效数(5 分制),存入task.model_info。判定规则:得分 ≥3 视为正确。
特点
- 判卷与被测模型解耦:被测模型给出答案,判卷模型(judge)独立评分,降低自评偏差。
- 支持失败隔离:单题异常写入
evaluation_status: failed记录而不中断整体任务。
4. 训练时验证评估
在微调训练任务执行期间,由 backend/app/services/task_runner.py 的 do_eval 触发:
- 在训练过程中对验证集(validation set)计算
eval_loss,用于监控过拟合。 - 结果回填到
Task的loss_info/detail,前端绘制 loss 曲线。 - 属于训练配套的轻量评估,不参与上述 1–3 的业务评测。
附属:前端评测相关页面
| 文件 | 作用 |
|---|---|
frontend/src/views/evaluation/EvaluateTask.vue |
评估工作台:任务列表 + 创建评测 |
frontend/src/views/evaluation/EvaluateReport.vue |
评估报告:指标卡 + 维度标签 + 对比样例 |
frontend/src/api/evaluation.ts |
评估工作台接口封装 |
| 平台评估系统入口 | 评估数据集管理 + 评估任务(model-evaluation)创建与结果查看 |
小结
- 想要学术榜单式准确率 → 用能力 1(LLaMA-Factory
eval/)。 - 想要开放式生成质量(BLEU/ROUGE + LLM 评审) → 用能力 2(评估工作台
/evaluation/run)。 - 想要基于自有问答数据、用判卷模型批量打分 → 用能力 3(平台评估系统
model-evaluation任务)。 - 训练过程监控 → 能力 4(
do_eval验证集 loss)。
三种业务评测(1/2/3)相互独立,可并存于同一平台;数据模型(EvalDataset/EvalResult/Task)主要服务于能力 3,而能力 2 使用独立的 eval_tasks.json 文件持久化。