한줄 요약
파라미터 수가 아닌 실제 벤치마크로, 내 GPU에 맞는 최적 로컬 LLM을 한 줄 명령어로 찾아주는 도구.
어떤 상황에서 필요한가?
로컬 LLM을 직접 돌려보려는 개발자라면 한 번쯤 이 상황을 겪는다. HuggingFace에서 모델을 찾고, VRAM이 맞는지 계산해보고, 다운로드했더니 OOM이 뜨거나, 돌아가도 너무 느려서 쓸 수 없는 경우다. 더 근본적인 문제는 "VRAM에 들어가는 모델 중 어떤 게 실제로 가장 좋은가"라는 질문에 답해주는 도구가 없다는 점이다.
흔히 하는 실수가 파라미터 수로 모델 품질을 판단하는 것이다. RTX 4090(24GB)을 쓴다면 32B 모델이 들어가지만, whichllm은 27B 모델인 Qwen3.6-27B를 1순위로 추천한다. 이유는 단순하다. 실제 벤치마크 점수가 더 높고 더 최신 세대이기 때문이다. 크기 기반 도구라면 32B를 먼저 내밀었을 것이다.
whichllm은 이 판단을 자동화한다. GPU/CPU/RAM을 자동 감지하고, HuggingFace에서 실시간으로 모델 목록을 가져온 뒤, 여러 벤치마크를 합산한 점수로 순위를 매겨 출력한다. 구매 전 시뮬레이션도 된다. whichllm --gpu "RTX 5090" 한 줄로 아직 갖고 있지 않은 GPU 기준 추천 결과를 미리 확인할 수 있다.
핵심 구현 방법
설치와 기본 사용
가장 빠른 방법은 uvx를 쓰는 것이다. 별도 설치 없이 바로 실행된다.
uvx whichllm
영구 설치를 원하면 아래 중 하나를 선택한다.
uv tool install whichllm # uv
brew install andyyyy64/whichllm/whichllm # Homebrew
pip install whichllm # pip
주요 명령어 패턴
실무에서 자주 쓸 만한 명령어를 정리하면 다음과 같다.
# 내 하드웨어 자동 감지 후 추천
whichllm
# 특정 GPU 시뮬레이션 (구매 전 검토)
whichllm --gpu "RTX 4090"
# 코딩용 모델만 추천
whichllm --profile coding --top 5
# 최소 속도 필터 (30 t/s 이상만)
whichllm --min-speed 30
# JSON 출력으로 파이프라인 연결
whichllm --json | jq '.models[0].model_id'
# Ollama와 즉시 연동
whichllm --top 1 --json | jq -r '.models[0].model_id' | xargs ollama run
# 특정 모델을 돌리려면 어떤 GPU가 필요한지 역산
whichllm plan "llama 3 70b"
whichllm run 명령어는 추천된 모델을 바로 다운로드해서 채팅 세션까지 열어준다. uv로 격리된 환경을 자동 구성하기 때문에 의존성 충돌 걱정이 없다. whichllm snippet은 선택한 모델에 대한 바로 실행 가능한 Python 코드를 출력한다. 프로토타이핑 속도가 체감상 크게 달라진다.
점수 산정 방식
점수는 0~100 사이로 산출되며, 핵심 요소는 벤치마크 품질과 모델 크기다. 여기에 퀀타이즈 패널티, 증거 신뢰도 가중치, 런타임 적합도, 속도, 출처 신뢰도, 인기도가 조정 인자로 작용한다.
벤치마크 소스는 LiveBench, Artificial Analysis, Aider, 멀티모달/비전 지수, Chatbot Arena ELO, Open LLM Leaderboard를 합산한다. 중요한 점은 벤치마크 증거 수준을 5단계(direct → variant → base_model → line_interp → self_reported)로 구분하고, 각 단계별로 신뢰도를 할인한다는 것이다. 업로더가 자가 보고한 점수는 ×0.55 수준으로 크게 깎인다.
또 하나 주목할 부분은 최신성 보정이다. 오래된 리더보드 점수는 모델 계보를 따라 자동으로 강등되기 때문에, 2024년 모델이 구식 점수로 현세대 모델을 앞서는 상황이 발생하지 않는다.
실전에서 주의할 점
MoE 모델의 속도 해석
MoE(Mixture of Experts) 모델은 속도와 품질 계산 기준이 다르다. whichllm은 속도는 활성 파라미터 기준으로, 품질 점수는 전체 파라미터 기준으로 계산한다. 예를 들어 Qwen3-30B-A3B가 102 t/s로 보이는 건 전체 30B가 아닌 활성 파라미터 3B 수준으로 동작하기 때문이다. 속도 숫자만 보고 품질을 오해하지 않도록 주의해야 한다.
부분 오프로드 상황
VRAM이 모자랄 때 일부 레이어를 RAM으로 오프로드하는 경우, 점수에 ×0.72 페널티가 적용된다. CPU 전용 실행은 ×0.50이다. 이는 실제 체감 성능 저하를 반영한 합리적인 설계지만, 숫자만 보면 같은 모델이 하드웨어에 따라 점수가 크게 달라 보일 수 있다.
캐시 TTL 관리
모델 목록은 6시간, 벤치마크는 24시간 캐시된다. HuggingFace 모델 생태계가 빠르게 바뀌는 상황에서 캐시가 오래됐다면 --refresh 플래그로 강제 갱신할 수 있다. 반대로 오프라인 환경이나 API rate limit 상황에서는 큐레이션된 폴백 데이터로 자동 전환된다.
Apple Silicon에서의 제약