评测本地ollama的LLM模型性能,通过lm_eval
评测本地ollama的LLM模型性能,通过lm_eval – 知乎
文章用ai润色以更适合阅读,但是内容我是校准过的,并且实验过,没有问题。不是随便拿ai生成然后忽悠人的。
此处是官方文档:
Ollama’s documentation – Ollamadocs.ollama.com/另外,如果你是想测试推理速度之类的,ollama run qwen3:14b –verbose这种指令就行了。对话的时候会自动显示各种速度。请将qwen3:14b替换为你需要测试的模型。
我是在Windows下的PowerShell测试的,如果你是bash类终端(Linux系统或者苹果),那么可能需要稍微改一下指令,不然直接复制是报错的(比如bash通过 \ 来允许多行指令,而不是PowerShell的`风格)
为什么我们需要自动化评测?Ollama 的模型库更新速度比我显卡降价的速度还快。每天都有新的量化版本、微调版本发布。面对 Qwen2.5, Llama3, Mistral 以及各种 GGUF 量化版本,我们往往陷入选择困难症:
需求差异:有人拿来写 Python 代码,有人拿来翻译日文轻小说,有人拿来做 RAG(知识库)。硬件差异:你的 RTX 4090 和我的 RTX 3060 Laptop,跑同一个模型的效果和速度体验截然不同。信息噪音:网上的评测文章虽多,但很多是营销号用 AI 生成的水文,或者只测了官方几个 Demo,缺乏参考价值。以前我们习惯用“智力题”来手动测试,比如经典的“Strawberry 里有几个 r”,或者进阶版的地狱级鸡兔同笼:
一个笼子里,有若干个杨过,若干个哪吒,若干个刑天,若干个夏侯惇,若干个孙膑,若干个司马迁,若干个戚夫人,若干条美人鱼,若干只刻耳柏洛斯,若干只安倍晋三,若干个梵高
笼子里共78个头,115只手,159只眼睛,50个肚脐,102个膝盖,78个睾丸,10个子宫,11条尾巴,128个乳头,53个心脏,152个耳朵
请问笼子里各有多少个杨过、哪吒、刑天、夏侯惇、孙膑、司马迁、戚夫人、美人鱼、 刻耳柏洛斯、安倍晋三和梵高?这种题目虽然能测试逻辑,但缺点很明显:不够自动化,样本太少,且容易发生“数据泄露”(模型训练数据里可能刚好有这道题)。
因此,我们需要引入 lm_eval (Language Model Evaluation Harness)。这是目前开源界最权威的大模型评测工具之一,Hugging Face 的 Open LLM Leaderboard 背后的核心框架就是它。
环境准备在开始之前,请确保你已经安装并运行了 Ollama。
确认 Python 环境我们需要 Python 环境来运行评测脚本。建议 Python 版本在 3.9 或以上。
安装 lm_eval我们需要安装 lm_eval 库。关键点是必须安装 openai 及其依赖,因为 Ollama 提供了兼容 OpenAI 格式的 API,这是我们连接测试工具和本地模型的桥梁。
在终端(CMD 或 PowerShell)执行:
pip install lm_eval[openai]💡 小贴士:如果你遇到网络问题或版本兼容性问题,也可以直接从 GitHub 安装最新开发版: pip install git+https://github.com/EleutherAI/lm-evaluation-harness.git配置缓存路径大模型评测需要下载相应的数据集(如 GSM8K, MMLU 等)。默认情况下,这些数据会塞满你的 C 盘(用户目录下的 .cache 文件夹)。
如果你有“C盘洁癖”,请务必设置 HF_HOME 环境变量,将 Hugging Face 的缓存迁移到其他硬盘。
在 PowerShell 中临时设置(当前窗口有效):
$env:HF_HOME=”D:\AI_Models\HuggingFace_Cache”(请将路径替换为你自己的大容量硬盘路径)
实战:运行评测假设你想测试最新的 qwen2.5:14b 模型(请确保你已经通过 ollama pull qwen2.5:14b 下载了该模型)。
在 PowerShell 中执行以下指令:
1. 设置伪造的 API Key
必须设置,否则 lm_eval 会报错提示缺少 Key。Ollama 本地不验证 Key,所以随便填。
$env:OPENAI_API_KEY=”sk-any-text-is-fine”
2. 执行评测命令
lm_eval –model openai-chat-completions --model_args "model=qwen2.5:14b,base_url=http://127.0.0.1:11434/v1/chat/completions"
–tasks gsm8k --num_fewshot 5
–batch_size 1 --apply_chat_template
–output_path “./results”核心参数详解:–model openai-chat-completions:告诉 lm_eval 我们不是直接加载 pytorch 权重,而是像调用 ChatGPT 一样通过 API 调用模型。这是连接 Ollama 的关键。–model_args:model=qwen2.5:14b: 必须完全匹配 ollama list 中的模型名称。base_url=…: Ollama 的默认 API 地址。–tasks gsm8k:这是你要测的“考卷”。gsm8k: 经典的小学数学应用题,测试逻辑推理能力。推荐其他科目: mmlu: 大规模多任务语言理解(综合知识,历史、物理、法律等)。mbpp 或 human_eval: 编程能力测试。hellaswag: 常识推理。ceval-valid: 中文综合能力评估(适合测国产模型)。–num_fewshot 5:
Few-shot (少样本): 在提问前先给模型看 5 个例子。这能激发模型的模仿能力,通常比 Zero-shot (0样本) 分数更高,也更符合实际使用场景(比如 RAG)。–batch_size 1:本地显卡显存有限,建议设为 1。如果你的显卡很强(如 4090),可以尝试设为 auto 来加速,但容易 OOM (爆显存)。–apply_chat_template:非常重要!现在的模型大多是 Instruct/Chat 版本,需要特定的对话模板(<|im_start|>user…)。加上这个参数,lm_eval 会自动正确格式化输入,否则分数会异常低。4. 结果分析命令运行后,会自动从 Hugging Face 下载数据集(第一次运行会慢一些),然后开始跑进度条。
结束后,你会看到类似这样的表格:
| Tasks | Version | Filter | n-shot | Metric | Value | Stderr | |
|---|---|---|---|---|---|---|---|
| gsm8k | Yaml | none | 5 | exact_match | 0.7856 | ± | 0.0112 |
如果你需要在笔记本上跑代码模型,可以对比 deepseek-coder:6.7b 和 qwen2.5-coder:7b 在 mbpp 任务上的分数。如果你需要做逻辑推理,对比 llama3:8b 和 gemma2:9b 在 gsm8k 上的分数。速度 vs 精度:你可以对比同一个模型 q4_k_m (4bit量化) 和 q8_0 (8bit量化) 的分数差异。如果分数只差 1%,但速度快一倍,显存少一半,那果断选 q4!5. 常见问题 (Q&A)Q: 报错 Connection error? A: 请检查 Ollama 是否正在运行,且 base_url 端口(默认11434)未被修改。如果你在中国大陆,下载数据集可能需要配置系统代理或使用镜像站。Q: 测试太慢了怎么办? A: gsm8k 有 1000 多道题。如果你只是想快速验证,可以使用 –limit 100 参数,只测前 100 题。虽然精度会有偏差,但用来横向对比两个模型足够了。Q: 显存爆了! A: 确保 batch_size 是 1。如果还是爆,说明模型本身太大,你的显存塞不下完整的上下文窗口。总结: 别再用“数草莓里的R”或者“奇葩鸡兔同笼”来为难你的 AI 了。通过 lm_eval 配合 Ollama,你可以像专业的大模型研究员一样,用数据说话,找到那个最适合你显卡和业务场景的“真命模型”。
