Show HN: 벤치마크 기준으로 당신의 하드웨어에 가장 적합한 로컬 LLM 찾기
요약
이 글은 사용자의 하드웨어 사양(GPU/CPU/RAM)을 자동으로 감지하여, 해당 시스템에서 실제로 구동 가능한 최적의 로컬 LLM을 추천하는 도구 'whichllm'을 소개합니다. whichllm은 단순히 모델 크기만을 기준으로 하는 것이 아니라, LiveBench 등 통합된 실제 벤치마크 점수와 최신성을 종합적으로 고려하여 가장 성능이 우수한 모델을 순위별로 제시하는 것이 핵심입니다. 단순히 '무엇이 들어가는가?'를 넘어 '어떤 것이 가장 좋은가?'에 초점을 맞춘 이 도구는, VRAM 적합성, 속도, 그리고 증거 기반의 정확한 랭킹 시스템을 통해 사용자에게 최적화된 로컬 LLM 선택 가이드라인을 제공합니다.
핵심 포인트
- whichllm은 하드웨어 사양에 맞는 최적의 로컬 LLM을 추천하는 도구입니다.
- 단순히 모델 크기(VRAM 적합성)가 아닌, 실제 벤치마크 점수와 최신성을 기반으로 순위를 매깁니다 (Evidence-based ranking).
- 속도 계산 시 활성 파라미터(active parameters)를 기준으로 하며, VRAM 사용량은 가중치, KV 캐시, 활성화 등을 종합적으로 고려합니다.
- NVIDIA, AMD, Apple Silicon 등 다양한 하드웨어를 자동으로 감지하고 지원합니다.
- 실시간 HuggingFace 데이터를 추적하여 항상 최신 정보를 제공하며, 명령어 기반으로 쉽게 사용할 수 있습니다.
whichllm
당신의 하드웨어에서 실제로 구동 가능한 최적의 로컬 LLM을 찾아보세요.
GPU/CPU/RAM을 자동으로 감지하여 시스템에 적합한 HuggingFace의 상위 모델들을 순위별로 나열합니다.
실행 예시
$ whichllm --gpu "RTX 4090"
#1 Qwen/Qwen3.6-27B 27.8B Q5_K_M score 92.8 27 t/s
...
32B 모델이 당신의 그래픽 카드에 충분히 들어감에도 불구하고, whichllm은 여전히 27B 모델을 1위로 선정합니다. 그 이유는 27B 모델이 실제 벤치마크(benchmarks)에서 더 높은 점수를 기록했으며 더 최신 세대이기 때문입니다. 단순히 크기만을 기준으로 "무엇이 들어가는가?"를 묻는 도구라면 더 큰 모델을 추천했을 것입니다. 그 차이가 바로 whichllm의 핵심입니다. (참고 #3: 102 t/s의 속도를 보이는 MoE 모델 — 속도는 활성(active) 파라미터를 기준으로 순위를 매기고, 품질은 전체(total) 파라미터를 기준으로 합니다.)
무엇을 실행할 수 있나요?
실제 최적의 선택지 (2026-05 스냅샷 — 당신의 결과는 실시간 HuggingFace 데이터를 추적하며, 이는 정적인 목록이 아닙니다):
| 하드웨어 | VRAM | 최적의 선택 | 속도 |
|---|---|---|---|
| RTX 5090 | 32 GB | Qwen3.6-27B · Q6_K · score 94.7 | ~40 t/s |
| ... | |||
구매하기 전에 whichllm --gpu "<당신의 그래픽 카드>"를 사용하여 이 중 무엇이든 시뮬레이션해 보세요. |
도움이 되었나요? GitHub star는 다른 사람들이 이 프로젝트를 찾는 데 도움이 됩니다 — 그리고 당신의 사양에서 어떤 모델이 선택되었는지 진심으로 알고 싶습니다: Issues에 남겨주세요.
왜 whichllm인가요?
모델을 VRAM에 맞추는 것은 쉬운 부분입니다. 어려운 부분은 맞는 모델들 중에서 실제로 어떤 것이 가장 좋은지를 아는 것이며, whichllm은 바로 그 부분을 정확하게 수행하도록 만들어졌습니다.
- 크기 기반의 휴리스틱이 아닌 증거 기반의 순위 산정 (Evidence-based ranking, not a size heuristic) — 최적의 선택은 통합된 실제 벤치마크(LiveBench, Artificial Analysis, Aider, multimodal/vision, Chatbot Arena ELO, Open LLM Leaderboard)를 통해 선정되며, 결코 "우연히 하드웨어에 들어가는 가장 큰 모델"을 선택하지 않습니다.
- 최신성 인지 (Recency-aware) — 오래된 리더보드는 각 모델의 계보(lineage)에 따라 순위가 낮아지므로, 2024년 모델이 구식 점수를 바탕으로 최신 세대 모델보다 높은 순위를 차지할 수 없습니다. 모든 순위 아래에는 벤치마크 스냅샷 날짜가 표시되어, 오래된 추천 사항이 묵인되지 않고 명확하게 드러납니다.
- 증거 등급 분류 및 보호 (Evidence-graded and guarded) — 모든 점수는
direct/variant/base/interpolated/self-reported태그가 지정되며 신뢰도에 따라 할인(discounted)됩니다. 조작된 업로더의 주장이나 계열 간 상속(작은 포크 모델이 훨씬 큰 베이스 모델의 점수를 빌려오는 행위)은 적극적으로 거부됩니다. - 아키텍처 인지 추정 (Architecture-aware estimates) — VRAM = 가중치(weights) + GQA KV 캐시(KV cache) + 활성화(activation) + 오버헤드(overhead)로 계산됩니다. 속도는 양자화(quantization)별 효율성, 백엔드(backend)별 요인, MoE의 활성(active) 대 전체(total) 분할, 그리고 통합 메모리(unified-memory) 대 이산 PCIe 부분 오프로드(discrete-PCIe partial-offload) 모델링을 포함하여 대역폭 제한(bandwidth-bound)을 기준으로 산출됩니다.
- 단일 명령 및 스크립트 가능 (One command, scriptable) —
whichllm은 정답을 출력하며, 파이프라인을 위해--json | jq를 추가할 수 있습니다. TUI(Text User Interface)나 암기해야 할 키 바인딩(keybindings)은 없습니다. - 실시간 데이터 (Live data) — 모델은 HuggingFace API에서 직접 가져오며, 오프라인 또는 속도 제한(rate-limited) 상황을 위해 큐레이션된 고정 폴백(frozen fallbacks)을 제공합니다.
기능 (Features)
- 하드웨어 자동 감지 (Auto-detect hardware) — NVIDIA, AMD, Apple Silicon, CPU 전용 (CPU-only)
- 스마트 랭킹 (Smart ranking) — VRAM 적합성, 속도 및 벤치마크 품질에 따라 모델 점수 산정
- 원커맨드 채팅 (One-command chat) —
whichllm run명령어로 즉시 채팅 세션을 다운로드하고 시작 - 코드 스니펫 (Code snippets) —
whichllm snippet명령어로 모든 모델에 대해 즉시 실행 가능한 Python 코드 출력 - 라이브 데이터 (Live data) — HuggingFace에서 직접 모델을 가져옴 (성능을 위해 캐싱 처리)
- 벤치마크 인식 (Benchmark-aware) — 실제 평가(eval) 점수를 신뢰도 기반 감쇠(confidence-based dampening)와 함께 통합
- 태스크 프로필 (Task profiles) — 일반(general), 코딩(coding), 비전(vision), 수학(math) 사용 사례별 필터링
- GPU 시뮬레이션 (GPU simulation) — 임의의 GPU로 테스트:
whichllm --gpu "RTX 4090" - 하드웨어 계획 (Hardware planning) — 역조회:
whichllm plan "llama 3 70b" - JSON 출력 (JSON output) — 파이프(pipe) 연산 친화적:
whichllm --json
실행 및 스니펫 (Run & Snippet)
단 한 번의 명령어로 어떤 모델이든 시도해 보세요. 수동 설치가 필요 없습니다. whichllm은 uv를 통해 격리된 환경을 생성하고, 종속성을 설치하며, 모델을 다운로드한 후 대화형 채팅을 시작합니다.
# 모델과 채팅하기 (최적의 GGUF 변형을 자동 선택)
whichllm run "qwen 2.5 1.5b gguf"
...
모든 모델 형식과 함께 작동합니다:
- 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(
...
설치 (Install)
pipx (권장)
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
...
사용법 (Usage)
# 하드웨어를 자동 감지하고 최적의 모델 표시
whichllm
...
통합 (Integrations)
Ollama
최적의 모델을 찾아 직접 실행하세요:
# 최상위 모델을 선택하여 Ollama로 실행
whichllm --top 1 --json | jq -r '.models[0].model_id' | xargs ollama run
...
Shell alias (셸 별칭)
.bashrc / .zshrc에 추가하세요:
alias bestllm='whichllm --top 1 --json | jq -r ".models[0].model_id"'
# 사용법: ollama run $(bestllm)
Scoring (점수 산정)
각 모델에는 0-100점의 점수가 부여됩니다. 벤치마크 품질 (Benchmark quality)과 크기 (Size)가 핵심을 형성하며, 증거 신뢰도 (Evidence confidence)와 실행 시간 적합성 (Runtime fit)이 이를 확장하고, 속도 (Speed), 출처 신뢰도 (Source trust), 인기 (Popularity)가 조정 요소로 작용합니다.
| 요소 (Factor) | 영향 (Effect) | 설명 (Description) |
|---|---|---|
| 벤치마크 품질 (Benchmark quality) | 핵심 (core) | LiveBench / Artificial Analysis / Aider / Vision / Arena ELO / Open LLM Leaderboard를 통합하였으며, 출처 신뢰도에 따라 가중치를 부여함 |
| ... |
점수 표시:
~(노란색) — 직접적인 벤치마크 없음; 모델 제품군 (Model family)으로부터 점수를 상속하거나 보간 (Interpolated)함?(노란색) — 사용 가능한 벤치마크 데이터 없음
How it works (작동 원리)
Data pipeline (데이터 파이프라인)
- 모델 가져오기 (Model fetching) — HuggingFace API에서 인기 있는 모델을 가져옵니다:
- 텍스트 생성 (Text-generation) (다운로드 수 + 최근 업데이트 기준)
- GGUF 필터링 (범위 확보를 위한 별도 쿼리)
--profile vision또는any설정 시 비전 모델 (Vision models,image-text-to-text)
- 벤치마크 출처 (Benchmark sources) — 현재 티어 (Current tier) (LiveBench, Artificial Analysis Index, Aider)는 접속 가능 시 실시간으로 통합되며, 선별된 멀티모달 (Multimodal) / 비전 인덱스가 추가됩니다; 고정 티어 (Frozen tier) (Open LLM Leaderboard v2, Chatbot Arena ELO). 각 티어는 별도의 상한선(Caps)을 가지며, 계보 인식 최신성 감점 (Lineage-aware recency demotion)을 적용하여 오래된 리더보드가 구세대 모델에 과도한 보상을 주는 것을 방지합니다.
- 벤치마크 증거 (Benchmark evidence) — 다섯 가지 해상도 수준이 있으며, 뒤로 갈수록 할인율이 높아집니다:
direct— 정확한 모델 ID 일치variant— 접미사(Suffix)가 제거된 형태 또는 -Instruct 변형 모델base_model— cardData의 베이스 모델 (Base model)line_interp— 모델 제품군 내에서의 크기 인식 보간 (Size-aware interpolation)self_reported— 업로더가 주장하는 평가 (매우 높은 할인율 적용)
모델의 파라미터(params)가 해당 제품군(family)의 주요 멤버와 2배 이상 차이가 날 경우 상속(Inheritance)은 거부됩니다. 이를 통해 훨씬 더 큰 베이스 모델과 family_id를 공유하는 초안(draft) / MTP / abliterated 포크(forks)를 잡아냅니다.
4. 캐시 (Cache) — ~/.cache/whichllm/:
models.json— 6시간 TTL (Time-To-Live)benchmark.json— 24시간 TTL
랭킹 엔진 (Ranking engine)
- 하드웨어 감지 (Hardware detection) — NVIDIA (nvidia-ml-py), AMD (dbgpu/ROCm), Apple Silicon (Metal), CPU 코어, RAM, 디스크
- VRAM 추정 (VRAM estimation) — 가중치(Weights) + KV 캐시(KV cache) + 활성화(activation) + 프레임워크 오버헤드 (~500MB)
- 호환성 (Compatibility) — 전체 GPU / 부분 오프로드 (Partial Offload) / CPU 전용; 연산 능력(compute capability) 및 OS 확인
- 속도 (Speed) — GPU 메모리 대역폭 조회(constants.py)를 통한 tok/s
- 점수 산정 (Scoring) — 벤치마크 (신뢰도 감쇄 적용), 크기, 양자화 페널티 (quantization penalty), 적합 유형 (fit type), 속도, 인기, 소스 신뢰도 (공식 vs 재포장자)
- 백엔드 필터 (Backend filter) — Apple Silicon 및 CPU 전용은 안정성을 위해 GGUF로 제한; Linux+NVIDIA는 AWQ/GPTQ 허용
프로젝트 구조 (Project structure)
src/whichllm/
├── cli.py # Typer CLI: main, plan, run, snippet, hardware
├── constants.py # GPU 대역폭, 양자화 바이트, 연산 능력 (compute capability)
...
기여하기 (Contributing)
기여를 환영합니다! 가이드라인은 CONTRIBUTING.md를 참조하세요.
요구 사항 (Requirements)
- Python 3.11+
nvidia-ml-py를 통한 NVIDIA GPU 감지 (기본 포함)- AMD / Apple Silicon 자동 감지
라이선스 (License)
MIT
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Posts의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기