Files
YG_FT/docs/模型评测优化设计方案.md
wuyongtao 6f0e82f351 feat: 平台治理与权限体系完善,存储进度/GPU预留/审批中心与日志整合
- 平台治理: 租户用户权限层次、资源ACL、审批中心与审批模板、访问申请
- 存储: MinIO 存储进度迁移、对象存储安全加固与测试
- 计算: GPU 资源预留、compute 轮询与同步增强
- 权限: permission v2 迁移、权限安全验收测试
- 日志: 后端运行日志中文说明、操作日志整合
- 数据处理/评测: 数据转换与模型评测优化

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 09:49:48 +08:00

8.0 KiB
Raw Blame History

模型评测优化设计方案

1. 现状检查

当前模型评测菜单已经具备以下基础能力:

  • 创建评测任务:选择训练模型、评测数据集、算力节点和 GPU。
  • 任务调度:后端将模型、适配器、数据集准备到目标算力节点,再提交 Compute API 任务。
  • 模型推理Compute Agent 使用 LLaMA-Factory 推理会话逐条生成回答。
  • 结果落库:任务完成后读取 eval_results.json,写入任务详情、样本结果和指标摘要。
  • 报告归档:评测输出目录可以归档到 MinIO并通过报告接口下载。
  • 前端详情:显示综合分、通过率、样本结果、指标摘要,并对运行中的任务进行轮询。

当前缺陷主要集中在评分和进度链路:

  1. 创建页面的 BLEU、ROUGE、余弦指标默认全部关闭未配置 LLM 评委时,样本没有确定性评分,容易得到 0 分。
  2. BLEU、ROUGE、余弦、LLM Judge 的返回范围和含义不统一百分制、0-1、小量程评分混在一起。
  3. 评测模型地址直接拼接 /v1/chat/completions,当地址已经包含 /v1 时会出现 /v1/v1
  4. LLM Judge 只解析少量文本格式,无法可靠解析 JSON、Markdown JSON 或 0-1 综合评价。
  5. ROUGE 对中文没有采用 nlp-eval-demo 的字符级中文分词策略,中文短文本容易得到失真的结果。
  6. 后端只在 Compute 任务完成后读取结果文件,运行时没有样本完成数、当前阶段和中间指标。
  7. 前端没有雷达图,用户无法直观看到 BLEU、ROUGE、语义相似度、精确匹配和 LLM Judge 等维度。

2. 目标

建立一条可解释、可持续轮询、兼容旧任务的评测闭环:

创建任务 -> 资源准备 -> 模型加载 -> 样本推理 -> 逐样本评分
       -> 中间进度文件 -> 后端同步 -> 页面进度与雷达图
       -> 完成报告 -> MinIO 归档 -> 详情与下载

目标结果:

  • 所有最终展示分数统一为 0-100避免不同指标之间直接相加造成误解。
  • 没有 LLM 评委时,仍然使用确定性指标生成样本得分和综合分,不再因为“未配置评委”自动归零。
  • 有 LLM 评委时,保留原有自定义评分区间,同时将其归一化到 0-100 展示。
  • 每个评测任务都能看到阶段、总样本数、已完成样本数、百分比和当前指标状态。
  • 详情页展示指标雷达图;指标不可用时显示原因,不把“依赖未安装”伪装成 0 分。
  • 不新增必需数据库表,继续利用 eval_tasks.payload 保存评测结果和进度,兼容现有数据库及离线初始化 SQL。

3. 评分设计

3.1 指标契约

Compute Agent 内部统一使用以下结构:

{
  "enabled": true,
  "available": true,
  "score": 82.5,
  "max_score": 100,
  "unit": "percent",
  "sample_count": 3,
  "error": ""
}

score 永远是 0-100。指标不可用时 available=falsescore 可以为 null同时保留 error。旧报告中只有 score 的结构继续兼容,后端读取时按旧结构补齐默认字段。

3.2 确定性指标

参考 nlp-eval-demo 的实现,支持:

  • BLEUsacrebleu结果由 0-100 转换为百分制。
  • ROUGE-1、ROUGE-2、ROUGE-L中文按字符切分英文按词切分使用 F1 均值并转换为百分制。
  • 余弦相似度TF-IDF 余弦相似度,转换为百分制。
  • 精确匹配:标准化空白和大小写后完全一致,百分制。
  • 文本相似度SequenceMatcher作为无外部模型时的稳定兜底指标。
  • BERTScore仅在 bert_score 和模型可用时启用;下载/加载失败只标记不可用,不阻断整个评测任务。

精确匹配和文本相似度始终计算。用户在创建页面选择的 BLEU、ROUGE、余弦作为额外指标如果没有选择额外指标也用“文本相似度 + ROUGE-L可用时”生成确定性综合分。

3.3 无 LLM 评委时的样本分数

对每条样本使用可用确定性指标的平均值作为样本百分制得分:

sample_score = mean(exact_match, text_similarity, rougeL, cosine, bleu, bertscore)

其中未启用或不可用的指标不参与平均。样本通过阈值默认 60 分;如果旧维度配置的 pass_threshold <= score_max,先按旧量程换算为百分制。

3.4 LLM Judge

  • 兼容 OpenAI Chat Completions 接口。
  • 自动规范化 api_url,避免重复 /v1
  • 优先解析 JSON 的 score综合评价overall_scoredimensions 字段,再解析 Markdown/自然语言中的评分。
  • 支持 0-1、0-5、0-100 三种返回量程;最终统一转换为 0-100。
  • API 调用失败时记录样本失败原因,不把失败当作正常 0 分;如果所有样本都调用失败,任务状态仍可完成但报告会明确提示评委不可用。

4. 进度设计

Compute Agent 在评测输出目录写入两个文件:

  • eval_progress.json:轻量进度文件,每完成一条样本更新一次。
  • eval_results.json:运行中写入部分结果,完成后写入完整报告。

进度结构:

{
  "status": "running",
  "stage": "inference",
  "total": 20,
  "completed": 7,
  "percentage": 35,
  "current_index": 8,
  "message": "正在生成第 8 条样本",
  "updated_at": "2026-08-20T00:00:00Z"
}

后端详情接口每次轮询 Compute Agent

  1. 任务运行中读取 eval_progress.json,写入 eval_tasks.payload.progress_detail
  2. 读取到部分 eval_results.json 时同步已完成样本和基础指标,页面可以边运行边展示。
  3. Compute 任务完成后读取完整报告,再执行 MinIO 归档。
  4. Compute Agent 暂时不可达时保留最后一次进度,不因为一次轮询失败把评测任务误判为失败。

5. 前端设计

  • 列表页增加进度列:运行中显示 已完成/总数 和百分比,完成后显示最终分数。
  • 详情页增加当前阶段、进度消息和进度条。
  • 详情页增加“指标雷达图”,雷达轴来自可用的 dimension_summary 指标,最大值统一 100。
  • 指标卡同时显示分数、通过率、样本数和不可用原因。
  • 样本结果在运行中支持逐步出现,保留现有搜索、筛选和分页。
  • 不改变已有任务创建、删除、报告下载和权限校验流程。

6. 数据库与兼容性

本次不新增数据库表和必需字段。评测结果继续存放在 eval_tasks.payload JSON 中,新增键包括:

  • progress_detail
  • basic_metrics 的统一指标对象
  • metric_summary_version
  • 样本的 raw_scoreraw_max_scorescoremax_score

旧任务兼容规则:缺少进度时由 progress 和样本数量推导;旧的量程评分按 score/max_score 转换为百分制;没有基础指标时显示“历史任务未保存指标明细”。因此无需修改 000_full_init.sql

7. 实施步骤

  1. 重构 Compute Agent 评测指标、中文 ROUGE、LLM Judge 解析、评分归一化和中间结果写入。
  2. 增加 Compute Agent 进度文件读取能力,后端同步运行中进度和部分结果。
  3. 扩展后端评测任务结果兼容、失败信息和进度返回。
  4. 扩展前端类型、列表进度列、详情进度区和指标雷达图。
  5. 增加单元测试、前端构建测试和接口/运行时冒烟验证。
  6. 同步前后端、算力服务到 docker/offline/src,确认初始化 SQL 无需变更。

8. 验收标准

  • 使用仅包含 instruction/output 的小型 JSONL 数据集,未配置 LLM Judge 时综合分不再固定为 0。
  • 中文答案能得到可解释的 ROUGE-1/2/L 分数。
  • LLM Judge 的地址为 https://host/v1 时请求路径仍正确。
  • 评测运行期间能看到 completed/total 和百分比变化。
  • 完成后详情页存在至少 3 个可用指标时显示雷达图,指标少于 3 个时显示明细降级视图。
  • 失败、依赖缺失、空答案等情况能在报告中区分,不以正常 0 分掩盖原因。
  • 现有权限、GPU 预约、MinIO 归档、报告下载和旧任务查看不受影响。