Skip to content

Repository files navigation

Model Bench — local-first LLM evaluation workbench

把模型、数据集、提示模板、评测队列、结果对比与 AI 分析放进同一个本地工作台。

Version Python FastAPI React Inference Tests Local first License

核心能力 · 快速开始 · 使用流程 · 架构 · 隐私 · 开发


Model Bench 是一个面向单机研究者的开源模型基准评测工作台。它通过 React 网页统一管理 本地 Transformers、vLLM 和 OpenAI 兼容模型,支持可复现的数据映射、批量实验、持久队列、 逐样本结果、可视化对比,以及受严格只读工具约束的结果分析助手。

Note

当前版本面向单用户、本机或受信任局域网环境。服务默认只监听 127.0.0.1,不包含账号、 多租户和公网鉴权能力。

✨ 核心能力

模块 能力
模型接入 本地 Transformers、vLLM、多 GPU 张量并行、OpenAI 兼容 API
数据工作台 CSV、JSON、JSONL、Parquet;流式预览;字段发现与智能映射
非破坏性变换 select、rename、concat、constant、cast、filter、template;原文件保持不变
实验编排 模型 × 数据修订 × 评测模板批量组合,重复结果检测,配置快照可追溯
持久队列 严格串行、同模型复用、暂停/继续、人工调序、取消、失败批量重试
指标系统 Exact Match、Accuracy、Token F1、Choice Accuracy 等内置指标及 Python 插件
结果洞察 指标速览、模型/数据集筛选、高低排序、趋势、吞吐、Token、逐样本与 CSV 导出
AI 分析助手 自然语言检索、指标比较、错误样本分析、页面导航;固定只读工具白名单

为真实本地推理环境设计

  • 自动发现 NVIDIA GPU,并允许在实验级选择 GPU、dtype、上下文长度和显存利用率。
  • 队首连续且运行快照一致的任务复用同一次模型加载,减少批量评测的冷启动成本。
  • 自动检测多卡 P2P 能力;跨 NUMA、容器或无 NVLink 环境可回退到 NCCL socket 兼容传输。
  • 没有 CUDA Toolkit/nvcc 时自动避开需要即时编译的 FlashInfer 采样路径。
  • 运行、native library、vLLM 与 NCCL 输出统一写入对应运行的 run.log

🚀 快速开始

1. 初始化

需要 Linux、Python 3.12,以及 curltar 等基础命令。初始化脚本会安装 uv、项目 Python 依赖、开发依赖和项目内 Node.js 24,并自动创建本地加密密钥与 SQLite schema。

./scripts/bootstrap.sh

需要运行本地 Transformers 或 vLLM 模型时,再安装推理依赖:

./scripts/bootstrap.sh --inference

2. 启动开发服务

./scripts/dev.sh

3. 后台或生产运行

# 构建前端并由 FastAPI 托管
./scripts/start.sh

# 或使用持久 Screen 会话
./scripts/screen-start.sh
screen -r model-bench

进入 Screen 后按 Ctrl+A、再按 D 可退出界面并保持服务运行。停止服务:

./scripts/screen-stop.sh

Warning

./scripts/screen-start.sh --lan 会监听局域网地址。Model Bench 当前没有用户鉴权,请只在受信任 网络使用,或通过 SSH 隧道访问默认的本地监听地址。

🧭 使用流程

  1. 注册模型:填写本地权重目录,或配置 OpenAI 兼容 Base URL、模型名与 API Key。
  2. 导入数据集:上传单文件或注册服务器路径,预览字段并建立规范样本映射。
  3. 创建实验:选择模型、数据修订、系统评测模板、指标和生成参数。
  4. 观察队列:查看加载、进度、预计剩余时间、吞吐、Token 与运行日志。
  5. 比较结果:按运行、模型和数据集筛选,查看指标排序、趋势、吞吐和精确明细。
  6. 分析错误:进入逐样本页面,或让只读分析助手归纳代表性错误并定位证据样本。

系统评测模板

内置模板覆盖原始输入、选择题零样本/少样本/CoT、问答题直接回答与问答题 CoT。模板会随运行 保存不可变快照;重试旧运行时会刷新到当前模板版本,使修复前后的结果保持不同配置身份。

规范样本

数据修订最终映射为统一结构:

sample_id
prompt + optional system     或     messages
reference
choices
metadata

选择题推荐映射 prompt_fieldchoices_fieldreference_field,并使用 Choice Accuracy。 它可以解析单字母答案,也能从 Final answer: C 形式的 CoT 输出中提取最终选项。

🏗 架构

flowchart LR
    UI[React + Ant Design] -->|REST / SSE| API[FastAPI]
    API --> DB[(SQLite WAL)]
    API --> FILES[Uploads & Result Files]
    DB --> WORKER[Persistent Worker]
    WORKER --> RUNNER[Isolated Run Process]
    RUNNER --> HF[Transformers]
    RUNNER --> VLLM[vLLM]
    RUNNER --> REMOTE[OpenAI-compatible API]
    RUNNER --> ARTIFACTS[manifest · samples · metrics · log]
    UI --> ASSISTANT[Read-only Analysis Assistant]
    ASSISTANT --> DB
    ASSISTANT --> ARTIFACTS
Loading

API 控制进程与 worker 分离。worker 从 SQLite 持久队列领取任务,每组运行在独立子进程中执行; 异常退出后,未完成状态可以恢复或重试。数据库保存配置、状态与汇总,逐样本明细保存在文件中。

每条运行默认生成:

bench-data/results/<experiment-id>/<run-id>/
├── manifest.json
├── samples.jsonl
├── metrics.json
└── run.log

🔐 本地数据与隐私

Model Bench 采用 local-first 设计。以下内容默认只留在本机,并被 Git 忽略:

  • bench-data/:SQLite 数据库、运行结果、上传数据集与指标插件。
  • .env:自动生成的 Fernet 主密钥。
  • 已注册模型和数据集:系统只在 SQLite 中保存本地路径与配置,不复制外部权重或服务器文件。
  • 结果分析助手设置、对话历史和加密后的 API Key。
  • 常见本地模型、数据、结果、上传与 checkpoint 目录,以及模型权重文件。

API Key 使用 Fernet 加密后写入本地 SQLite,读取配置时不会返回明文。.env 中的主密钥与数据库 必须同时保护;任一文件都不应提交到公开仓库。

结果分析助手的“允许向外部 API 发送样本内容”开关默认开启。启用时,每轮最多发送 20 条代表 样本的提示、预测、参考答案与 metadata;关闭后只发送本地汇总。连接外部服务前请根据数据敏感性 检查此设置。

Caution

自定义 Python 指标被视为受信任代码。它会在独立进程中运行,但这不是安全沙箱;不要上传或运行 来历不明的插件。

⚙️ 常用配置

环境变量 默认值 说明
BENCH_DATA_DIR ./bench-data SQLite、上传、插件与结果根目录
BENCH_HOST 127.0.0.1 生产 API 监听地址
BENCH_PORT 8000 生产 API 端口
BENCH_MAX_UPLOAD_BYTES 2147483648 单文件上传大小上限
NCCL_COMPAT 自动检测 设为 1 可强制多卡兼容传输

🧪 开发与测试

.venv/bin/ruff check backend
.venv/bin/ruff format --check backend
.venv/bin/pytest -q
PATH="$PWD/.tools/node/bin:$PATH" npm test --prefix frontend
PATH="$PWD/.tools/node/bin:$PATH" npm run build --prefix frontend

GPU smoke test:

MODEL_PATH=/path/to/model BACKEND=transformers GPU_IDS=0 ./scripts/gpu-smoke.sh
MODEL_PATH=/path/to/model BACKEND=vllm GPU_IDS=0,1 ./scripts/gpu-smoke.sh

📌 当前边界

  • 单用户、单机或可信局域网部署。
  • 文本生成评测;支持单轮 prompt 和多轮 messages。
  • 单数据集建议控制在十万条以内,预览和运行采用流式读取。
  • 暂不支持多模态、Hugging Face Dataset ID、多文件关联和任意 Python 数据预处理。

如果你希望快速比较本地模型、提示策略与医学/通用文本数据集,同时保留可追溯的运行快照和 逐样本证据,Model Bench 可以直接作为实验控制台使用。

📄 许可证

本项目采用 Apache License 2.0

About

Local-first workbench for reproducible LLM evaluation

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages