메뉴
HN
Hacker News 16일 전

내 하드웨어에 최적화된 로컬 LLM 벤치마크 순위 추천

IMP
8/10
핵심 요약

사용자의 GPU, CPU, RAM을 자동 감지하여 HuggingFace의 최신 모델 중 시스템에 맞는 최적의 로컬 LLM을 벤치마크 점수 기반으로 순위 매기는 오픈소스 CLI 도구입니다. 단순히 용량만 맞추는 것을 넘어 실제 성능 평가 지표와 최신성을 반영해 가장 우수한 모델을 추천하는 것이 특징입니다. 단 한 줄의 명령어로 추천 모델을 다운로드하고 즉시 채팅을 시작할 수 있어 로컬 환경 구축에 매우 유용합니다.

번역된 본문

whichllm: 사용자의 하드웨어에서 실제로 구동되는 최고의 로컬 LLM을 찾아줍니다. PC의 GPU/CPU/RAM을 자동으로 감지하여 시스템 사양에 맞는 HuggingFace의 상위 모델들을 순위별로 정리해 줍니다.

[실행 예시] $ whichllm --gpu "RTX 4090"

#1 Qwen/Qwen3.6-27B 27.8B Q5_K_M 점수 92.8 27 t/s #2 Qwen/Qwen3-32B 32.0B Q4_K_M 점수 83.0 31 t/s #3 Qwen/Qwen3-30B-A3B 30.0B Q5_K_M 점수 82.7 102 t/s

32B 모델 역시 그래픽 카드에 잘 맞지만, whichllm은 여전히 27B 모델을 1위로 평가합니다. 실제 벤치마크에서 더 높은 점수를 받았고 최신 세대 모델이기 때문입니다. 만약 단순히 '크기에 맞는 모델'만 찾아주는 도구였다면 무조건 더 큰 32B 모델을 추천했을 것입니다. 이러한 차이점이 바로 이 도구의 존재 이유입니다. (참고: 3위 모델은 MoE(Mixture of Experts) 모델로 102 t/s의 속도를 기록했습니다. 속도는 활성화된 파라미터 기준, 품질은 전체 파라미터 기준으로 측정됩니다.)

어떤 모델을 실행할 수 있을까요? (2026년 5월 스냅샷 기준 최고의 추천 모델이며, 실제 결과는 HuggingFace의 실시간 데이터를 기반으로 합니다. 고정된 리스트가 아닙니다.)

[하드웨어별 추천 모델]

  • RTX 5090 (32GB VRAM): Qwen3.6-27B · Q6_K · 점수 94.7 ~40 t/s
  • RTX 4090 / 3090 (24GB VRAM): Qwen3.6-27B · Q5_K_M · 점수 92.8 ~27 t/s
  • RTX 4060 (8GB VRAM): Qwen3-14B · Q3_K_M · 점수 71.0 ~22 t/s
  • Apple M3 Max (36GB 통합 메모리): Qwen3.6-27B · Q5_K_M · 점수 89.4 ~9 t/s
  • CPU 전용: gpt-oss-20b (MoE) · Q4_K_M · 점수 45.2 ~6 t/s

그래픽 카드 구매 전 시뮬레이션을 원한다면 whichllm --gpu "<원하는 카드 이름>" 명령어를 입력해 보세요.

이 도구가 유용하셨나요? GitHub 스타를 눌러 다른 사람들도 이 도구를 쉽게 찾을 수 있게 도와주세요. 또한 여러분의 PC 사양에서 이 도구가 어떤 모델을 추천했는지 궁금합니다. 이슈(Issues) 탭에 공유해 주시면 감사하겠습니다.

왜 whichllm을 써야 할까요? 모델을 VRAM(비디오 메모리)에 맞추는 것은 쉬운 일입니다. 진짜 어려운 부분은 '들어가는 모델 중 실제로 가장 성능이 좋은 녀석이 무엇인지' 아는 것입니다. whichllm은 바로 이 부분을 정확하게 짚어내기 위해 만들어졌습니다.

  • 증거 기반의 순위 측정 (단순한 크기 휴리스틱이 아님): LiveBench, Artificial Analysis, Aider, 멀티모달/비전, Chatbot Arena ELO, Open LLM Leaderboard 등 실제 벤치마크 결과를 병합하여 최고의 모델을 선정합니다. 단순히 '용량에 맞는 가장 큰 모델'을 추천하지 않습니다.
  • 최신성 반영: 오래된 리더보드 점수는 모델 계보에 따라 순위가 하락합니다. 따라서 구형(2024년 등) 모델이 최신 세대 모델을 오래된 점수로 앞지르는 일이 발생하지 않습니다. 모든 순위 아래에는 벤치마크 스냅샷 날짜가 명시되어 있어, 신뢰할 수 없는 오래된 추천인지 사용자가 직관적으로 확인할 수 있습니다.
  • 데이터 신뢰도 검증 및 관리: 모든 점수에는 '직접 측정(Direct) / 파생(Variant) / 베이스(Base) / 보간(Interpolated) / 자체 보고(Self-reported)' 태그가 지정되어 있으며, 신뢰도에 따라 점수가 가중치를 받습니다. 업로더의 허위 주장이나 작은 파생 모델이 원본 대형 모델의 점수를 무단으로 도용하는 행위를 적극적으로 차단합니다.
  • 아키텍처 인식 추정: VRAM은 '가중치(Weights) + GQA KV 캐시 + 활성화(Activation) + 오버헤드'로 계산됩니다. 속도는 양자화(Quantization) 효율, 백엔드 요인, MoE 모델의 활성/전체 파라미터 비율, 통합 메모리(Apple Silicon 등)와 일반 PCIe 디스크립토 환경의 부분 오프로딩(Partial-offload) 차이를 모델링하여 대역폭 한계 기준으로 측정됩니다.
  • 스크립트 친화적인 단일 명령어: whichllm은 답을 터미널에 바로 출력해 줍니다. --json | jq를 파이프라인에 추가해 자동화 스크립트에 쉽게 연동할 수 있습니다. 복잡한 TUI(터미널 UI)나 외울 필요가 있는 단축키가 없습니다.
  • 실시간 데이터: HuggingFace API에서 직접 모델을 불러오며, 오프라인이거나 API 호출이 제한된 상황에서 사용할 수 있도록 엄선된 캐시 데이터도 제공합니다.

[주요 기능]

  • 하드웨어 자동 감지: NVIDIA, AMD, Apple Silicon 및 CPU 전용 환경을 모두 지원합니다.
  • 스마트 랭킹: VRAM 적합도, 추론 속도, 벤치마크 품질을 종합적으로 평가하여 모델에 점수를 매깁니다.
  • 원클릭 채팅: whichllm run 명령어를 통해 모델 다운로드부터 대화형 채팅 세션 시작까지 즉시 진행할 수 있습니다.
  • 코드 스니펫 생성: whichllm snippet 명령어를 통해 즉시 실행 가능한 Python 코드를 출력해 줍니다.
  • 실시간 데이터 제공: HuggingFace에서 직접 모델 정보를 가져오며 성능 향상을 위해 캐싱을 지원합니다.
  • 벤치마크 인식: 신뢰도 기반 가중치를 적용한 실제 평가 점수를 통합합니다.
  • 작업 프로필: 일반, 코딩, 비전(Vision), 수학 등의 사용 사례에 따라 필터링할 수 있습니다.
  • GPU 시뮬레이션: whichllm --gpu "RTX 4090" 등 원하는 GPU 사양으로 테스트해 볼 수 있습니다.
  • 하드웨어 기획: 역조회 기능 제공. whichllm plan "llama 3 70b" 명령어로 특정 모델 구동에 필요한 사양을 확인할 수 있습니다.
  • JSON 출력: 파이프라인과 연동하기 쉬운 형태의 출력을 지원합니다 (whichllm --json).

[실행 및 스니펫] 단 한 번의 명령어로 모든 모델을 테스트해 보세요. 복잡한 수동 설치는 필요 없습니다. whichllm run 명령어가 uv를 통한 격리된 환경 구성, 종속성 설치, 모델 다운로드, 인터랙티브 채팅 시작까지 모두 알아서 처리합니다.

특정 모델과 채팅 (최적의 GGUF 버전 자동 선택)

whichllm run "qwen 2.5 1.5b gguf"

현재 하드웨어에 가장 최적화된 모델을 자동 추천받아 바로 채팅 시작

whichllm run

CPU 전용 모드

whichllm run "phi 3 mini gguf" --cpu-only

모든 모델 포맷 지원 (예: llama-cpp-python 기반의 가벼운 GGUF 등)

원문 보기
원문 보기 (영어)
whichllm Find the best local LLM that actually runs on your hardware. Auto-detects your GPU/CPU/RAM and ranks the top models from HuggingFace that fit your system. 日本語版はこちら See it $ 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 The 32B model fits your card fine — whichllm still ranks the 27B #1, because it scores higher on real benchmarks and is a newer generation. A size-only "what fits?" tool would hand you the bigger one. That gap is the whole point of whichllm. (Note #3: a MoE model at 102 t/s — speed is ranked on active params, quality on total .) What can I run? Real top picks (snapshot 2026-05 — your results track live HuggingFace data, this is not a static list): Hardware VRAM Top pick Speed RTX 5090 32 GB Qwen3.6-27B · Q6_K · score 94.7 ~40 t/s RTX 4090 / 3090 24 GB Qwen3.6-27B · Q5_K_M · score 92.8 ~27 t/s RTX 4060 8 GB Qwen3-14B · Q3_K_M · score 71.0 ~22 t/s Apple M3 Max 36 GB Qwen3.6-27B · Q5_K_M · score 89.4 ~9 t/s CPU only — gpt-oss-20b (MoE) · Q4_K_M · score 45.2 ~6 t/s whichllm --gpu "<your card>" to simulate any of these before you buy. Useful? A GitHub star helps other people find it — and I'd genuinely like to know what it picked for your rig: drop it in Issues . Why whichllm? Fitting a model into your VRAM is the easy part. The hard part is knowing which of the models that fit is actually the best — and that is what whichllm is built to get right. Evidence-based ranking, not a size heuristic — The top pick is chosen from merged real benchmarks (LiveBench, Artificial Analysis, Aider, multimodal/vision, Chatbot Arena ELO, Open LLM Leaderboard) — never "the biggest model that happens to fit." Recency-aware — Stale leaderboards are demoted along each model's lineage, so a 2024 model can't outrank a current-generation one on an outdated score. The benchmark snapshot date is printed under every ranking, so a stale recommendation is self-evident instead of silently trusted. Evidence-graded and guarded — Every score is tagged direct / variant / base / interpolated / self-reported and discounted by confidence. Fabricated uploader claims and cross-family inheritance (a small fork borrowing its much larger base's score) are actively rejected. Architecture-aware estimates — VRAM = weights + GQA KV cache + activation + overhead; speed is bandwidth-bound with per-quant efficiency, per-backend factors, MoE active-vs-total split, and unified-memory vs discrete-PCIe partial-offload modeling. One command, scriptable — whichllm prints the answer; add --json | jq for pipelines. No TUI, no keybindings to memorize. Live data — Models fetched directly from the HuggingFace API, with curated frozen fallbacks for offline or rate-limited use. Features Auto-detect hardware — NVIDIA, AMD, Apple Silicon, CPU-only Smart ranking — Scores models by VRAM fit, speed, and benchmark quality One-command chat — whichllm run downloads and starts a chat session instantly Code snippets — whichllm snippet prints ready-to-run Python for any model Live data — Fetches models directly from HuggingFace (cached for performance) Benchmark-aware — Integrates real eval scores with confidence-based dampening Task profiles — Filter by general, coding, vision, or math use cases GPU simulation — Test with any GPU: whichllm --gpu "RTX 4090" Hardware planning — Reverse lookup: whichllm plan "llama 3 70b" JSON output — Pipe-friendly: whichllm --json Run & Snippet Try any model with a single command. No manual installs needed — whichllm creates an isolated environment via uv , installs dependencies, downloads the model, and starts an interactive chat. # 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 Works with all model formats : GGUF — via llama-cpp-python (lightweight, fast) AWQ / GPTQ — via transformers + autoawq / auto-gptq FP16 / BF16 — via transformers Get a copy-paste Python snippet instead: 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" ]) Install pipx (recommended) pipx install whichllm Homebrew brew tap Andyyyy64/whichllm brew install whichllm pip pip install whichllm Development git clone https://github.com/Andyyyy64/whichllm.git cd whichllm uv sync --dev uv run whichllm uv run pytest Usage # Auto-detect hardware and show best models whichllm # Simulate a GPU (e.g. planning a purchase) whichllm --gpu " RTX 4090 " whichllm --gpu " RTX 5090 " # 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 # 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 Integrations Ollama Find the best model and run it directly: # Pick the top model and run it with Ollama whichllm --top 1 --json | jq -r ' .models[0].model_id ' | xargs ollama run # Find the best coding model whichllm --profile coding --top 1 --json | jq -r ' .models[0].model_id ' | xargs ollama run Shell alias Add to your .bashrc / .zshrc : alias bestllm= ' whichllm --top 1 --json | jq -r ".models[0].model_id" ' # Usage: ollama run $(bestllm) Scoring Each model gets a 0-100 score. Benchmark quality and size form the core; evidence confidence and runtime fit then scale it, with speed, source trust, and popularity as adjustments. Factor Effect Description Benchmark quality core Merged LiveBench / Artificial Analysis / Aider / Vision / Arena ELO / Open LLM Leaderboard, weighted by source confidence Model size up to 35 log2 -scaled world-knowledge proxy (MoE uses total params) Quantization × penalty Lower-bit quants discounted multiplicatively Evidence confidence ×0.55–1.0 none / self-reported ×0.55, inherited ×0.78, direct full Runtime fit ×0.50–1.0 partial-offload ×0.72, CPU-only ×0.50 Speed -8 to +8 Usability gate vs a fit-dependent tok/s floor Source trust -5 to +5 Official-org bonus, known-repackager penalty Popularity tie-breaker Downloads/likes; weight shrinks as evidence strengthens Score markers: ~ (yellow) — No direct benchmark; score inherited/interpolated from the model family ? (yellow) — No benchmark data available How it works Data pipeline Model fetching — Fetches popular models from HuggingFace API: Text-generation (downloads + recently updated) GGUF-filtered (separate query for coverage) Vision models ( image-text-to-text ) when --profile vision or any Benchmark sources — Current tier (LiveBench, Artificial Analysis Index, Aider) merged live when reachable, plus a curated multimodal / vision index; frozen tier (Open LLM Leaderboard v2, Chatbot Arena ELO). Tiers have separate caps and lineage-aware recency demotion so stale leaderboards stop over-rewarding older generations. Benchmark evidence — Five resolution levels, increasingly discounted: direct — Exact model ID match variant — Suffix-stripped or -Instruct variant base_model — Base model from cardData line_interp — Size-aware interpolat