1. 为什么需要评测本地部署的大模型服务当你费尽周折在本地服务器上部署好VLLM或sglang服务后第一反应可能是终于跑起来了但紧接着就会面临一个灵魂拷问这个服务的实际效果到底怎么样这时候就需要专业的评测工具来帮你客观评估模型表现。我去年在部署一个医疗问答系统时就踩过坑。当时直接用开箱即用的API测试了几个样例问题感觉响应速度和质量都不错结果上线后用户反馈准确率波动很大。后来用evalscope跑完整评测才发现模型在专业术语处理上存在系统性偏差。这个教训让我明白手动测试几个样例和系统化基准评测完全是两回事。目前主流的两个评测工具是evalscope和lm_eval它们都能对本地部署的VLLM/sglang服务进行评测但在使用场景和功能侧重上各有特色evalscope专为中文场景优化支持MMLU、C-Eval等中文数据集配置更简单lm_eval源自EleutherAI社区生态更活跃支持任务类型更丰富在实际项目中我通常会先用evalscope快速验证核心能力再用lm_eval做更全面的评估。接下来我们就具体看看这两个工具的使用方法和避坑指南。2. evalscope评测实战与配置技巧2.1 快速安装与环境准备安装evalscope最省心的方式是使用清华镜像源国内开发者懂的都懂pip install evalscope --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple pip install evalscope[perf] -i https://pypi.tuna.tsinghua.edu.cn/simple这里有个小坑要注意如果你之前安装过老版本务必先pip uninstall evalscope彻底卸载否则可能出现奇怪的依赖冲突。我就曾经因为残留的旧版本配置文件导致评测结果异常排查了半天才发现问题。2.2 基础评测命令解析一个典型的MMLU评测命令长这样evalscope eval \ --model DeepSeek-V3.1-Terminus \ --api-url http://localhost:30000/v1 \ --api-key EMPTY \ --eval-type openai_api \ --datasets mmlu \ --dataset-args {mmlu: {subset_list: [high_school_physics, high_school_psychology], few_shot_num: 5}} \ --eval-batch-size 64这些参数中最容易出错的是--dataset-args的JSON格式我有三点经验分享字段名必须完全匹配比如few_shot_num不能写成few_shot_number子集名称区分大小写high_school_physics写成High_School_Physics会报错JSON字符串里的引号要用双引号外层用单引号包裹2.3 高级配置技巧当评测中文数据集时建议启用thinking模式仅限DeepSeek-V3.2及以上版本--generation-config {chat_template_kwargs:{thinking: true}}对于需要人工评分的任务如创意写作可以这样配置评审模型--judge-strategy auto \ --judge-worker-num 80 \ --judge-model-args {api_url: http://judge_model_ip:30000/v1, model_id: DeepSeek-V3.2}这里有个性能调优的小技巧--judge-worker-num应该与--eval-batch-size保持相同数值我测试发现这样能最大化利用GPU资源。3. lm_eval深度使用指南3.1 安装与依赖管理官方推荐用以下方式安装pip install lm-eval[api]但如果你需要最新功能建议源码安装git clone https://github.com/EleutherAI/lm-evaluation-harness cd lm-evaluation-harness pip install -e .注意这里有个大坑lm_eval对vllm的依赖可能会引发冲突。我建议先创建干净的conda环境conda create -n eval python3.10 conda activate eval pip install vllm0.3.0 # 先固定vllm版本 pip install -e . # 再安装lm_eval3.2 VLLM/SGLang服务评测评测本地API服务的典型命令lm_eval \ --model local-completions \ --tasks mmlu \ --batch_size8 \ --model_args {model: Qwen/Qwen3-8B-FP8, base_url: http://localhost:8000/v1/completions, num_concurrent: 8}参数配置的黄金法则batch_size建议从8开始逐步上调直到显存占满90%num_concurrent应该等于你的服务端GPU数量如果遇到超时错误可以添加timeout: 60到model_args3.3 MMLU子任务评测技巧除了整体评测mmlu还可以针对特定领域深入测试--tasks mmlu_stem # STEM科目 --tasks mmlu_humanities # 人文学科 --tasks mmlu_social_sciences # 社会科学 --tasks mmlu_other # 其他科目我建议首次评测时先跑mmlu_stem和mmlu_humanities这两个子集因为它们最能反映模型的核心能力差异。去年评测某金融模型时就发现它在mmlu_stem上表现优异85%但在mmlu_humanities上只有62%后来针对性增加了人文类数据训练才解决问题。4. 评测工具对比与选型建议4.1 功能特性对比特性evalscopelm_eval中文支持优秀一般安装便捷性简单中等需处理依赖评测任务丰富度侧重中文任务覆盖更广分布式评测支持支持结果可视化内置Dashboard需自行处理自定义任务开发较简单灵活但复杂4.2 典型使用场景建议根据我的实战经验给出以下选型建议中文模型快速验证优先用evalscope开箱即用的中文数据集支持更符合中文语境的评测指标示例评测医疗问答系统的术语准确性学术研究全面评估建议lm_eval支持更多国际通用基准方便与论文结果横向对比示例对比不同模型在MMLU上的表现生产环境持续监控两者结合用evalscope做日常巡检用lm_eval做月度深度评估示例教育类应用的A/B测试4.3 常见报错解决方案问题1CUDA out of memory解决方案降低--eval-batch-size建议从8开始逐步上调进阶方案添加--device cpu参数部分使用CPU问题2API timeout调整--model_args中的timeout值检查服务端日志可能是vllm的worker配置不足问题3Dataset not found对于evalscope检查--dataset-args中的local_path是否正确对于lm_eval尝试export HF_DATASETS_CACHE/your/path记得评测前先用简单命令测试连通性比如curl http://localhost:30000/v1/models -H Authorization: Bearer EMPTY5. 评测结果分析与优化方向拿到评测报告后我通常会从三个维度进行分析横向对比与同规模开源模型对比例如你的7B模型在MMLU上比Llama3-8B低5个百分点纵向分析各子任务表现差异典型案例发现模型在数学推理GSM8K上明显弱于代码生成错误模式统计高频错误类型比如特定领域的术语混淆、多步推理中断等基于分析结果可以针对性优化数据层面补充薄弱领域训练数据训练层面调整loss权重推理层面优化prompt模板有个实用的技巧把评测结果可视化后与研发团队讨论往往能发现意想不到的优化点。上次我们就通过错误分析发现模型在处理否定句时存在系统偏差后来通过数据增强解决了这个问题。