VLLM/SGLang服务上线后,如何用lm_eval快速做个‘体检’?附完整API评测命令
VLLM/SGLang服务上线后如何用lm_eval快速做个‘体检’附完整API评测命令当你终于把大模型服务部署上线那种如释重负的感觉还没持续多久新的焦虑就来了——这个服务真的能稳定运行吗效果符合预期吗作为负责模型部署的工程师我深知这种忐忑。好在有lm_eval这样的工具能让我们像给模型做体检一样快速验证服务质量和效果。1. 为什么模型服务需要体检想象一下你刚部署了一个基于VLLM的Qwen-8B模型API服务端口开在8000。客户端调用看起来一切正常但你真的了解它的实际能力边界吗它能处理多少并发在不同类型任务上的表现如何这些问题的答案决定了这个服务能否真正投入生产环境。传统做法是手动测试几个样例但这既不系统也不全面。lm_eval的local-completions评测模式正是为解决这个问题而生。它能标准化评估使用学术界公认的评测集如MMLU进行系统测试压力测试通过调整并发数(num_concurrent)观察服务稳定性效果验证确保部署后的模型效果与预期一致提示模型服务上线前的评测应该像软件发布前的自动化测试一样成为标准流程2. 搭建评测环境评测前需要准备好环境。假设你已经通过VLLM或SGLang部署了模型服务比如在localhost:8000接下来需要安装评测工具# 安装lm_eval及其API评测依赖 pip install lm-eval[api]验证安装是否成功lm-eval --tasks list这个命令会列出所有支持的评测任务你应该能看到类似这样的输出节选mmlu hellaswag gsm8k ...3. 配置评测参数核心评测命令结构如下lm_eval \ --model local-completions \ --tasks [任务名] \ --batch_size [批次大小] \ --model_args [JSON格式参数]其中model_args是最关键的部分需要根据你的服务情况配置{ model: 你的模型名, base_url: API服务地址, num_concurrent: 并发数 }举个例子如果你部署的是Qwen-8B模型服务地址是http://localhost:8000/v1/completions想用8个并发测试那么配置应该是{ model: Qwen/Qwen3-8B-FP8, base_url: http://localhost:8000/v1/completions, num_concurrent: 8 }4. 选择评测任务lm_eval支持多种评测任务对于刚上线的服务建议从这些开始4.1 MMLU综合评测MMLUMassive Multitask Language Understanding是评估模型多任务理解能力的标准测试集包含57个学科领域的问题lm_eval \ --model local-completions \ --tasks mmlu \ --batch_size 8 \ --model_args {model: Qwen/Qwen3-8B-FP8, base_url: http://localhost:8000/v1/completions, num_concurrent: 8}4.2 MMLU子任务评测如果只想测试特定领域MMLU支持细分评测子任务类别包含领域示例mmlu_stem数学、物理、化学等STEM学科mmlu_humanities历史、哲学、法律等人文学科mmlu_social_sciences心理学、经济学、政治学等社会科学mmlu_other商业、健康等其他领域例如单独测试STEM学科lm_eval \ --model local-completions \ --tasks mmlu_stem \ --batch_size 8 \ --model_args {model: Qwen/Qwen3-8B-FP8, base_url: http://localhost:8000/v1/completions, num_concurrent: 4}4.3 GSM8K数学题评测对于需要数学推理能力的场景GSM8K是个好选择lm_eval \ --model local-completions \ --tasks gsm8k \ --batch_size 4 \ --model_args {model: Qwen/Qwen3-8B-FP8, base_url: http://localhost:8000/v1/completions, num_concurrent: 4}5. 解读评测结果评测完成后你会看到类似这样的输出以MMLU为例| Task | Version | Metric | Value | | Stderr | |-------|---------|--------|-------|---|--------| | mmlu | 0 | acc | 0.556 | ± | 0.003 | | mmlu_stem | 0 | acc | 0.519 | ± | 0.006 | | mmlu_humanities | 0 | acc | 0.587 | ± | 0.005 |关键指标说明acc准确率越高越好Stderr标准误差反映结果的稳定性±后的数值表示结果的波动范围6. 高级技巧与优化6.1 并发数调优num_concurrent参数对评测结果影响很大。建议采用阶梯测试法从较低并发开始如4逐步增加8,16,32...观察两个指标准确率是否下降请求失败率是否上升找到准确率开始明显下降的临界点那就是你服务的合理并发上限。6.2 批量大小调整batch_size影响评测效率但设置过大可能导致OOM。经验值模型规模推荐batch_size7B以下8-1613B4-870B1-26.3 自定义评测集除了预设任务你还可以创建自己的评测集。基本步骤准备JSON格式的测试文件按照lm_eval的规范定义任务通过--tasks参数指定你的任务名7. 常见问题排查在实际使用中可能会遇到这些问题连接被拒绝检查服务是否真的在指定端口运行超时错误尝试增加超时时间在model_args中添加timeout: 60结果不稳定可能是并发太高尝试降低num_concurrent内存不足减小batch_size或使用更小的评测集有一次我在测试70B模型时发现准确率异常低。经过排查发现是服务端没有正确加载适配器权重。这种问题只有通过系统评测才能发现简单的API调用测试很容易遗漏。