115 lines
4.4 KiB
Markdown
115 lines
4.4 KiB
Markdown
# 大模型速度测试助手 (Ollama 版)
|
||
|
||
一个用于测试**本地 Ollama 大模型**响应速度的工具,提供 Web 界面,可测量
|
||
**TTFT(首 Token 延迟)、Prefill 时间、解码速度(tokens/s)、端到端延迟**等真实推理指标。
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
llm_speed_test_app/
|
||
├── run.py # 启动入口
|
||
├── requirements.txt # Python 依赖
|
||
├── backend/ # 后端(Python)
|
||
│ ├── config.py # 配置(Ollama 地址、模型、端口)
|
||
│ ├── ollama_client.py # Ollama API 客户端(流式调用 + 指标测量)
|
||
│ ├── engine.py # 测试引擎(编排用例、统计、落盘)
|
||
│ ├── report.py # HTML 报告生成
|
||
│ ├── server.py # HTTP 服务器(API + 前端静态托管)
|
||
│ ├── stats.py # 统计计算(均值/标准差/百分位)
|
||
│ └── test_cases/ # 7 个测试用例(真实调用 Ollama)
|
||
│ ├── base.py
|
||
│ ├── case_01_generation.py 纯文本生成基准
|
||
│ ├── case_02_simple_tool.py 简单工具调用延迟
|
||
│ ├── case_03_file_analysis.py 文件读取+分析
|
||
│ ├── case_04_parallel_tool.py 并行工具调用
|
||
│ ├── case_05_long_context.py 长上下文处理
|
||
│ ├── case_06_reasoning.py 复杂推理任务
|
||
│ └── case_07_multiturn.py 多轮对话累积
|
||
├── frontend/ # 前端(静态页面)
|
||
│ ├── index.html
|
||
│ ├── css/style.css
|
||
│ └── js/app.js
|
||
├── results/ # 测试结果 JSON(运行时自动创建)
|
||
└── report/ # HTML 报告(运行时自动创建)
|
||
```
|
||
|
||
## 环境要求
|
||
|
||
- Python 3.8+
|
||
- [Ollama](https://ollama.com/) 已安装并启动
|
||
- 已拉取至少一个模型,例如:`ollama pull gemma2:2b`
|
||
|
||
## 快速开始
|
||
|
||
```bash
|
||
# 1. 启动 Ollama(如未启动)
|
||
ollama serve
|
||
# 或直接运行 ollama(Windows 桌面版一般自启)
|
||
|
||
# 2. 拉取模型(任选其一,或使用已拉取的模型)
|
||
ollama pull deepseek-r1:latest # 约 5GB,轻量
|
||
|
||
# 3. 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 4. 启动应用
|
||
python run.py
|
||
```
|
||
|
||
然后浏览器打开 **http://localhost:8000**。
|
||
|
||
> 注意:如果前端下拉框显示"未找到已拉取的模型",请确认 Ollama 服务已启动,
|
||
> 刷新页面即可重新加载模型列表。
|
||
|
||
## 使用说明
|
||
|
||
1. 选择测试用例("推荐组合"勾选快速用例,耗时用例用于压力测试)
|
||
2. 选择模型(自动从本地 Ollama 拉取已安装模型)
|
||
3. 设置重复次数
|
||
4. 点击"开始测试",观察实时进度
|
||
5. 测试完成后自动展示:推理核心指标、延迟对比图表、详细数据表
|
||
6. 可导出 CSV / JSON,或打开完整 HTML 报告
|
||
|
||
## 测试用例说明
|
||
|
||
| 用例 | 难度 | 说明 |
|
||
|---|---|---|
|
||
| 纯文本生成基准 | 简单 | 基础生成速度基准测试 |
|
||
| 简单工具调用延迟 | 简单 | 结构化工具输出的调用延迟 |
|
||
| 文件读取+分析 | 中等 | 文件读取与分析完整链路 |
|
||
| 并行工具调用 | 中等 | 串行 vs 并行请求的加速比 |
|
||
| 长上下文处理 | 耗时 | 500~4000 token 下 prefill 延迟变化 |
|
||
| 复杂推理任务 | 耗时 | 不同推理复杂度的延迟对比 |
|
||
| 多轮对话累积 | 耗时 | 上下文累积对延迟的影响 |
|
||
|
||
## 测量指标说明
|
||
|
||
| 指标 | 来源 |
|
||
|---|---|
|
||
| TTFT (首 Token 延迟) | 发起请求到首个生成 token 返回的时间 |
|
||
| Prefill Time | Ollama 返回的 `prompt_eval_duration`(prompt 预填充耗时) |
|
||
| Decode Speed | `eval_count / eval_duration`(生成速度 tokens/s) |
|
||
| E2E | 请求到完整回复的总耗时 |
|
||
|
||
## 配置(可选)
|
||
|
||
通过环境变量覆盖默认配置:
|
||
|
||
| 变量 | 默认值 | 说明 |
|
||
|---|---|---|
|
||
| `OLLAMA_BASE_URL` | `http://localhost:11434` | Ollama 服务地址 |
|
||
| `DEFAULT_MODEL` | `qwen3.6:35b-a3b` | 默认模型 |
|
||
| `SPEED_TEST_PORT` | `8000` | Web 服务端口 |
|
||
|
||
## API 一览
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|---|---|---|
|
||
| GET | `/api/models` | 本地已拉取的模型列表 |
|
||
| GET | `/api/cases` | 用例注册表 |
|
||
| POST | `/api/run` | 开始测试(后台线程执行),body: `{cases, repeats, model, skip_heavy}` |
|
||
| GET | `/api/status` | 当前运行进度 |
|
||
| POST | `/api/stop` | 停止当前测试 |
|
||
| GET | `/api/results/latest.json` | 最近一次测试结果 |
|
||
| GET | `/report.html` | 完整 HTML 报告 |
|