whichllm
找到能在你硬件上实际运行的最佳本地大语言模型。
自动检测你的 GPU/CPU/内存,并对 HuggingFace 上适配你系统的顶尖模型进行排名。
快速开始
无需项目设置,运行一次推荐命令即可。
uvx whichllm@latest
在购买硬件前模拟 GPU 性能。
uvx whichllm@latest --gpu "RTX 4090" 如果经常使用,可以安装它。
uv tool install whichllm
uv tool upgrade whichllm # update an existing install 其他安装方式。
brew install andyyyy64/whichllm/whichllm pip install whichllm
常见工作流程
安装后,直接运行 whichllm。如需单次运行,用 `uvx whichllm@latest` 替代 whichllm。
# Best models for this machine whichllm # Pretend you have a specific GPU whichllm --gpu "RTX 4090" # Compare upgrade candidates whichllm upgrade "RTX 4090" "RTX 5090" "H100" # Find the GPU needed for a model whichllm plan "llama 3 70b" # Start a chat with a model whichllm run "qwen 2.5 1.5b gguf" # Print copy-paste Python whichllm snippet "qwen 7b" # Return JSON for scripts whichllm --top 1 --json
查看效果
$ whichllm --gpu "RTX 4090"
#1 Qwen/Qwen3.6-27B 27.8B Q5_K_M score 92.8 27 t/s
#2 Qwen/Qwen3-32B 32.0B Q4_K_M score 83.0 31 t/s
#3 Qwen/Qwen3-30B-A3B 30.0B Q5_K_M score 82.7 102 t/s
32B 模型完全适配你的显卡——但 whichllm 仍将 27B 模型排在第一,因为它在真实基准测试中得分更高,且属于新一代模型。如果仅凭“能装多大”来判断,工具会推荐更大的那个。而这之间的差距正是 whichllm 的核心价值所在。(注 #3:MoE 模型速度为 102 token/秒——速度按激活参数排名,质量按总参数排名。)
我能运行什么?
真实最佳推荐(2026 年 5 月快照——你的结果会追踪 HuggingFace 实时数据,这不是静态列表):
| 硬件 | 显存 | 最佳推荐 | 速度 |
|---|---|---|---|
| RTX 5090 | 32 GB | Qwen3.6-27B · Q6_K · 得分 94.7 | ~40 token/秒 |
| RTX 4090 / 3090 | 24 GB | Qwen3.6-27B · Q5_K_M · 得分 92.8 | ~27 token/秒 |
| RTX 4060 | 8 GB | Qwen3-14B · Q3_K_M · 得分 71.0 | ~22 token/秒 |
| Apple M3 Max | 36 GB | Qwen3.6-27B · Q5_K_M · 得分 89.4 | ~9 token/秒 |
| 仅 CPU | — | gpt-oss-20b (MoE) · Q4_K_M · 得分 45.2 | ~6 token/秒 |
运行 `whichllm --gpu "<你的显卡>"` 可在购买前模拟任意上述配置。
为什么选择 whichllm?
将模型塞进显存是容易的部分。困难的是知道哪些能装下的模型实际上是最好的——而这正是 whichllm 要解决的核心问题。
- 基于证据的排名,而非大小启发式——最佳推荐来自合并的真实基准测试(LiveBench、Artificial Analysis、Aider、多模态/视觉、Chatbot Arena ELO、Open LLM Leaderboard)——绝不推荐“恰好能装下的最大模型”。
- 时效性感知——过时的排行榜会沿着每个模型的迭代路径被降级,因此 2024 年的模型不可能凭借过时的分数超越当前一代模型。基准测试快照日期会打印在每个排名下方,这样过时的推荐便一目了然,而不会被默默信任。
- 基于证据的分级与审慎评估——每项评分均标注为直接/变体/基础/自报/插值,并根据置信度进行折扣。对于捏造的上传者声明以及跨模型族系的继承(即一个小型分支借用其更大基础模型的评分),系统会主动拒绝。
- 架构感知估算——显存占用 = 权重 + GQA KV 缓存 + 激活值 + 开销;速度受带宽限制,并考虑每量化效率、每后端因子、MoE 活跃参数与总参数的分割,以及统一内存与离散 PCIe 部分卸载建模。
- 单命令,可脚本化——`whichllm` 直接打印答案;添加 `--json | jq` 可用于管道处理。无 TUI,无需记忆快捷键。
- 实时数据——模型直接从 HuggingFace API 获取,并配有精选的冻结回退数据,供离线或限速场景使用。
功能特性
- 自动检测硬件——NVIDIA、AMD、Apple Silicon、仅 CPU
- 智能排序——根据显存适配度、速度和基准测试质量对模型进行评分
- 单命令聊天——`whichllm run` 立即下载并启动聊天会话
- 代码片段——`whichllm snippet` 为任意模型打印可直接运行的 Python 代码
- 实时数据——直接从 HuggingFace 获取模型(已缓存以提升性能)
- 基准感知——集成真实评测分数,并采用基于置信度的衰减机制
- 任务画像——可按通用、编程、视觉或数学用例进行筛选
- GPU 模拟——使用任意 GPU 进行测试:`whichllm --gpu "RTX 4090"`
- 硬件规划——反向查询:`whichllm plan "llama 3 70b"`
- 升级规划——将当前机器与候选 GPU 进行对比
- JSON 输出——便于管道处理:`whichllm --json`
运行与代码片段
使用单条命令即可尝试任意模型。无需手动安装——`whichllm` 通过 uv 创建隔离环境,安装依赖项,下载模型,并启动交互式聊天。
# Chat with a model (auto-picks the best GGUF variant) whichllm run "qwen 2.5 1.5b gguf" # Auto-pick the best model for your hardware and chat whichllm run # CPU-only mode whichllm run "phi 3 mini gguf" --cpu-only
支持所有模型格式:
- GGUF——通过 llama-cpp-python(轻量、快速)
- AWQ / GPTQ——通过 transformers + autoawq / auto-gptq
- FP16 / BF16——通过 transformers
或者获取可直接复制粘贴的 Python 代码片段:
whichllm snippet "qwen 7b" from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="Qwen/Qwen2.5-7B-Instruct-GGUF", filename="qwen2.5-7b-instruct-q4_k_m.gguf", n_ctx=4096, n_gpu_layers=-1, verbose=False, ) output = llm.create_chat_completion( messages=[{"role": "user", "content": "Hello!"}], ) print(output["choices"][0]["message"]["content"])
使用方法
# Auto-detect hardware and show best models whichllm # Simulate a GPU (e.g. planning a purchase) whichllm --gpu "RTX 4090" whichllm --gpu "RTX 5090" # Specify variant whichllm --gpu "RTX 5060 16" # CPU-only mode whichllm --cpu-only # More results / filters whichllm --top 20 whichllm --quant Q4_K_M whichllm --min-speed 30 whichllm --evidence base # allow id/base-model matches whichllm --evidence strict # id-exact only (same as --direct) whichllm --direct # JSON output whichllm --json # Force refresh (ignore cache) whichllm --refresh # Show hardware info only whichllm hardware # Plan: what GPU do I need for a specific model? whichllm plan "llama 3 70b" whichllm plan "Qwen2.5-72B" --quant Q8_0 whichllm plan "mistral 7b" --context-length 32768 # Upgrade: compare your current machine against candidate GPUs whichllm upgrade "RTX 4090" "RTX 5090" "H100" whichllm upgrade "Apple M4 Max" --top 5 # Run: download and chat with a model instantly whichllm run "qwen 2.5 1.5b gguf" whichllm run # auto-pick best for your hardware # Snippet: print ready-to-run Python code whichllm snippet "qwen 7b" whichllm snippet "llama 3 8b gguf" --quant Q5_K_M
JSON 模型行包含 estimated_tok_per_sec、speed_confidence、speed_range_tok_per_sec 和 speed_notes。速度范围是一个规划范围,而非实时基准测试。
集成
Ollama
使用 JSON 输出来为脚本提供数据,这些脚本可将 HuggingFace ID 映射到你本地的 Ollama 模型名称。
# Pick the top HuggingFace model ID whichllm --top 1 --json | jq -r '.models[0].model_id' # Find the best coding model ID whichllm --profile coding --top 1 --json | jq -r '.models[0].model_id'
Ollama 的模型名称并不总是与 HuggingFace 仓库 ID 一致,因此在执行 `ollama run` 之前,通常需要一个小型的映射步骤。
Shell 别名
添加到你的 .bashrc / .zshrc 文件中:
alias bestllm='whichllm --top 1 --json | jq -r ".models[0].model_id"' # Usage: ollama run $(bestllm)
评分
每个模型都会获得一个 0-100 的分数。基准测试质量和模型大小构成核心分数;证据置信度和运行时适配性随后对其进行缩放,而速度、来源可信度和流行度则作为调整因子。
| 因子 | 影响 | 描述 |
|---|---|---|
| 基准测试质量 | 核心 | 合并了 LiveBench / Artificial Analysis / Aider / Vision / Arena ELO / Open LLM Leaderboard,并按来源置信度加权 |
| 模型大小 | 最高 35 分 | 基于 log2 缩放的世界知识代理指标(MoE 使用总参数量) |
| 量化 | × 惩罚系数 | 低位宽量化版本会以乘法方式打折 |
| 证据置信度 | ×0.55–1.0 | 无证据 / 仅自报 ×0.55,继承自同系列 ×0.78,直接完整匹配 |
| 运行时适配性 | ×0.50–1.0 | 部分卸载 ×0.72,仅 CPU ×0.50 |
| 速度 | -8 到 +8 | 基于可用性门槛与适配性相关的 token/秒下限;附带置信度和范围元数据报告 |
| 来源可信度 | -5 到 +5 | 官方组织加分,已知重新打包者扣分 |
| 流行度 | 打破平局 | 下载量/点赞数;随着证据增强,其权重会缩小 |
分数标记:
- ~(黄色)— 无直接基准测试;分数从模型家族继承/插值得到
- !sr(亮黄色)— 仅上传者报告的基准测试,未经独立验证
- ?(红色)— 无可用基准测试数据
--status 中的速度标记:
- ~(黄色)— 有估计的 token/秒范围
- ?(红色)— 低置信度的速度估计;后端/运行时敏感性较高
文档
- CLI 参考
- 工作原理
- 评分
- 硬件检测与模拟
- 运行与代码片段
- 故障排除
工作原理
数据管道
-
模型获取 — 从 HuggingFace API 获取流行模型:
- 文本生成(按下载量 + 最近更新排序)
- GGUF 过滤(单独查询以扩大覆盖范围)
- 视觉模型(图像-文本到文本),当使用 `--profile vision` 或 `any` 参数时
-
基准测试来源 — 当前层级(LiveBench, Artificial Analysis Index, Aider)在可访问时实时合并,外加一个精选的多模态/视觉索引;冻结层级(Open LLM Leaderboard v2, Chatbot Arena ELO)。各层级有独立的上限和基于谱系的时效性降权机制,使得过时的排行榜不再过度奖励旧代模型。
-
基准测试证据 — 五个解析级别,折扣程度递增:
- 直接 — 精确的模型 ID 匹配
- variant — 去除后缀或 -Instruct 变体
- base_model — 来自 cardData 的基础模型
- line_interp — 模型家族内考虑规模的插值
- self_reported — 上传者声称的评测(权重极低)
当某个模型的参数量与其家族主要成员的差异超过 2 倍时,继承关系会被拒绝,这能捕获那些与规模大得多的基础模型共享同一 family_id 的草稿 / MTP / abliterated 分支。
-
Cache — ~/.cache/whichllm/:
- models.json — 6 小时 TTL
- benchmark.json — 24 小时 TTL
排名引擎
- 硬件检测 — NVIDIA(nvidia-ml-py)、AMD(dbgpu/ROCm)、Apple Silicon(Metal)、CPU 核心数、内存、磁盘
- 显存估算 — 权重 + KV cache + 激活值 + 框架开销(约 500MB)
- 兼容性 — 全 GPU / 部分卸载 / 仅 CPU;计算能力和操作系统检查
- 速度 — 基于 GPU 内存带宽、量化方式、后端、适配类型和 MoE 活跃参数得出的 tok/s
- 评分 — 评测(带置信度衰减)、规模、量化惩罚、适配类型、速度、流行度、来源可信度(官方 vs 重新打包者)
- 后端过滤 — Apple Silicon 和仅 CPU 模式限制为 GGUF 以保证稳定性;Linux+NVIDIA 允许 AWQ/GPTQ
项目结构
src/whichllm/
├── cli.py # Typer CLI: main, plan, run, snippet, hardware
├── constants.py # GPU bandwidth, quantization bytes, compute capability
├── hardware/
│ ├── detector.py # Orchestrates GPU/CPU/RAM detection
│ ├── nvidia.py # NVIDIA GPU via nvidia-ml-py
│ ├── amd.py # AMD GPU (Linux)
│ ├── apple.py # Apple Silicon (Metal)
│ ├── cpu.py # CPU name, cores, AVX support
│ ├── memory.py # RAM and disk free
│ ├── gpu_simulator.py # --gpu flag: synthetic GPU from name
│ └── types.py # GPUInfo, HardwareInfo
├── models/
│ ├── fetcher.py # HuggingFace API, model parsing, evalResults
│ ├── benchmark.py # Arena ELO, Leaderboard (parquet/rows API)
│ ├── grouper.py # Family grouping by base_model and name
│ ├── cache.py # JSON cache with TTL
│ └── types.py # ModelInfo, GGUFVariant, ModelFamily
├── engine/
│ ├── vram.py # VRAM = weights + KV cache + activation + overhead
│ ├── compatibility.py# Fit type, disk check, compute/OS warnings
│ ├── performance.py # tok/s from bandwidth
│ ├── quantization.py # Bytes per weight, quality penalty, non-GGUF inference
│ ├── ranker.py # Scoring, evidence filter, profile/match
│ └── types.py # CompatibilityResult
└── output/
└── display.py # Rich table, JSON output, hardware/plan displays
开发
git clone https://github.com/Andyyyy64/whichllm.git
cd whichllm
uv sync --dev
uv run whichllm
uv run pytest 贡献
欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。
支持
如果 whichllm 帮你找到了合适的模型,或避免了一次错误的硬件猜测,欢迎赞助。这有助于维持项目的维护:硬件报告、打包、测试用例、评测更新以及对更多机器的支持。
无论是否赞助,whichllm 都将保持开源。Issues 和 PR 始终欢迎。
觉得有用?在 GitHub 上点个星标可以帮助其他人发现它,我也很想知道它为你的设备推荐了什么。欢迎在 Issues 中留言。
Star 历史
系统要求
- Python 3.11+
- 通过 nvidia-ml-py 检测 NVIDIA GPU(默认包含)
- AMD / Apple Silicon 自动检测
许可证
关于
找到真正能在你硬件上运行且性能最佳的本地大语言模型。基于真实且考虑时效性的评测进行排名,而非参数量。一条命令,即刻运行。
发布版本 11
软件包
贡献者
编程语言
- Python 100.0%