EvalScope 服务部署#
简介#
EvalScope 服务模式提供了基于 HTTP API 的评测和压测能力,旨在解决以下场景的需求:
远程调用: 支持通过网络远程调用评测功能,无需在本地配置复杂的评测环境
服务集成: 方便将评测能力集成到现有的工作流、CI/CD 流程或自动化测试系统中
多用户协作: 支持多个用户或系统同时调用评测服务,提高资源利用率
统一管理: 集中管理评测资源和配置,便于维护和监控
灵活部署: 可以部署在专用服务器或容器环境中,与业务系统解耦
Flask 服务封装了 EvalScope 的核心评测(eval)和压测(perf)功能,通过标准的 RESTful API 对外提供服务,使得评测能力可以像其他微服务一样被调用和集成。
功能特性#
安装环境#
完整安装(推荐)#
pip install evalscope[service]
开发环境安装#
# Clone仓库
git clone https://github.com/modelscope/evalscope.git
cd evalscope
# 安装包含service的开发版本
pip install -e '.[service]'
启动服务#
命令行启动#
# 使用默认配置 (host: 0.0.0.0, port: 9000)
evalscope service
# 自定义主机和端口
evalscope service --host 127.0.0.1 --port 9000
# 启用调试模式
evalscope service --debug
Python代码启动#
from evalscope.service import run_service
# 启动服务
run_service(host='0.0.0.0', port=9000, debug=False)
API端点#
1. 健康检查#
GET /health
响应示例:
{
"status": "ok",
"service": "evalscope",
"timestamp": "2025-12-04T10:00:00"
}
2. 模型评测#
POST /api/v1/eval
请求体示例:
{
"model": "qwen-plus",
"api_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key": "your-api-key",
"datasets": ["gsm8k", "iquiz"],
"limit": 10,
"generation_config": {
"temperature": 0.0,
"max_tokens": 2048
}
}
必需参数:
model: 模型名称datasets: 数据集列表api_url: API端点URL (OpenAI兼容)
可选参数:
api_key: API密钥 (默认: "EMPTY")limit: 评测样本数量限制eval_batch_size: 批处理大小 (默认: 1)generation_config: 生成配置temperature: 温度参数 (默认: 0.0)max_tokens: 最大生成token数 (默认: 2048)top_p: nucleus采样参数top_k: top-k采样参数
work_dir: 输出目录debug: 调试模式seed: 随机种子 (默认: 42)
参见
具体参数说明请参考:评测参数文档
响应示例:
{
"status": "success",
"message": "Evaluation completed",
"result": {"...": "..."},
"output_dir": "/path/to/outputs/20251204_100000"
}
3. 性能压测#
POST /api/v1/perf
请求体示例:
{
"model": "qwen-plus",
"url": "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
"api": "openai",
"api_key": "your-api-key",
"number": 100,
"parallel": 10,
"dataset": "openqa",
"max_tokens": 2048,
"temperature": 0.0
}
必需参数:
model: 模型名称url: API端点完整URL
可选参数:
api: API类型 (openai/dashscope/anthropic/gemini, 默认: "openai")api_key: API密钥number: 请求总数 (默认: 1000)parallel: 并发数 (默认: 1)rate: 每秒请求数限制 (默认: -1, 不限制)dataset: 数据集名称 (默认: "openqa")max_tokens: 最大生成token数 (默认: 2048)temperature: 温度参数 (默认: 0.0)stream: 是否使用流式输出 (默认: true)debug: 调试模式
参见
具体参数说明请参考:性能压测参数文档
响应示例:
{
"status": "success",
"message": "Performance test completed",
"output_dir": "/path/to/outputs",
"results": {
"parallel_10_number_100": {
"metrics": {"...": "..."},
"percentiles": {"...": "..."}
}
}
}
使用示例#
使用curl测试评测端点#
curl -X POST http://localhost:9000/api/v1/eval \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"api_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key": "your-api-key",
"datasets": ["gsm8k"],
"limit": 5
}'
使用curl测试压测端点#
curl -X POST http://localhost:9000/api/v1/perf \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"url": "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
"api": "openai",
"number": 50,
"parallel": 5
}'
使用Python requests#
import requests
# 评测请求
eval_response = requests.post(
'http://localhost:9000/api/v1/eval',
json={
'model': 'qwen-plus',
'api_url': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
'api_key': 'your-api-key',
'datasets': ['gsm8k', 'iquiz'],
'limit': 10,
'generation_config': {
'temperature': 0.0,
'max_tokens': 2048
}
}
)
print(eval_response.json())
# 压测请求
perf_response = requests.post(
'http://localhost:9000/api/v1/perf',
json={
'model': 'qwen-plus',
'url': 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',
'api': 'openai',
'number': 100,
'parallel': 10,
'dataset': 'openqa'
}
)
print(perf_response.json())
注意事项#
仅支持OpenAI API兼容模型: 此服务专为OpenAI API兼容的模型设计
长时间运行的任务: 评测和压测任务可能需要较长时间,建议客户端设置合适的HTTP超时时间,因为API调用是同步的,会阻塞直到任务完成。
输出目录: 评测结果会保存在配置的
work_dir中,默认为outputs/错误处理: 服务会返回详细的错误信息和堆栈跟踪(在debug模式下)
资源管理: 压测时注意并发数设置,避免过载服务器
错误码#
400: 请求参数错误404: 端点不存在500: 服务器内部错误
示例场景#
场景1: 快速评测Qwen模型#
curl -X POST http://localhost:9000/api/v1/eval \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"api_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key": "sk-...",
"datasets": ["gsm8k"],
"limit": 100
}'
场景2: 压测本地部署的模型#
curl -X POST http://localhost:9000/api/v1/perf \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5",
"url": "http://localhost:8000/v1/chat/completions",
"api": "openai",
"number": 1000,
"parallel": 20,
"max_tokens": 2048
}'
场景3: 多数据集评测#
curl -X POST http://localhost:9000/api/v1/eval \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"api_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"datasets": ["gsm8k", "iquiz", "ceval"],
"limit": 50,
"eval_batch_size": 4
}'