- Authors

- Name
- Youngju Kim
- @fjvbn20031
- 크기는 성능 등급이 아니라 배치 제약입니다
- 소형: 온디바이스와 엣지
- 중형: 단일 GPU 한 장
- 대형: 서버가 필요한 구간
- MoE는 메모리 계산 규칙이 다릅니다
- 컨텍스트 확장은 공짜가 아닙니다
- 카드가 요구하는 실행 조건을 무시하지 마세요
- 실행 예시
- 고를 때의 순서
- 직접 해보기
- 시리즈 안내
- 참고 자료
모델 정보는 2026-08-12에 Hugging Face 페이지에서 직접 확인했습니다. 모델 카드와 라이선스는 바뀔 수 있으니 사용 전 원본을 다시 확인하세요.
크기는 성능 등급이 아니라 배치 제약입니다
오픈 모델을 크기로 나누는 이유는 큰 모델이 좋은 모델이라서가 아닙니다. 크기가 결정하는 것은 어디에 올릴 수 있는지, 한 요청에 얼마나 기다릴 수 있는지, 그리고 몇 대를 띄워야 하는지입니다. 같은 과제라도 지연 예산이 300밀리초냐 3초냐에 따라 정답이 완전히 달라집니다.
그래서 이 글은 어느 모델이 더 낫다는 순위를 매기지 않습니다. 대신 각 구간에서 실제로 확인한 카드 값을 나열하고, 그 값이 배치 결정에 어떻게 쓰이는지만 짚습니다.
소형: 온디바이스와 엣지
| 저장소 | license | 파라미터 | 컨텍스트 | 카드에 적힌 특징 |
|---|---|---|---|---|
HuggingFaceTB/SmolLM2-1.7B-Instruct | apache-2.0 | 1.7B | 명시되어 있지 않음 | 주로 영어를 이해하고 생성한다고 기재 |
meta-llama/Llama-3.2-1B-Instruct | llama3.2 | 1B (1.23B) | 128k | 모바일 작성 보조와 에이전트 용도를 의도된 사용처로 기재 |
Qwen/Qwen3-4B | apache-2.0 | 4.0B (임베딩 제외 3.6B) | 32,768 (YaRN 시 131,072) | 100개 이상 언어, 사고 모드 전환 지원 |
microsoft/Phi-4-mini-instruct | MIT | 3.8B | 128K | 메모리·연산 제약 환경과 지연 민감 시나리오를 용도로 기재 |
이 구간에서 카드가 스스로 밝히는 한계를 먼저 읽어야 합니다. HuggingFaceTB/SmolLM2-1.7B-Instruct는 결정적인 정보원이 아니라 보조 도구로 쓰라고 적고, 생성물이 사실에 맞거나 논리적으로 일관되거나 편향에서 자유롭지 않을 수 있으니 중요한 정보는 검증하라고 씁니다. microsoft/Phi-4-mini-instruct는 모델 크기 탓에 담을 수 있는 사실 지식이 제한적이고, 영어 외 언어에서 품질 격차가 있으며, 코드 학습이 대부분 파이썬에 몰려 있다고 밝힙니다.
meta-llama/Llama-3.2-1B-Instruct는 파일 접근 전에 조건 동의와 연락처 공유가 필요합니다. 온디바이스 배포는 보통 CI에서 가중치를 굽는데, 이 저장소는 토큰 없는 파이프라인에서 그대로 실패합니다.
중형: 단일 GPU 한 장
| 저장소 | license | 파라미터 | 컨텍스트 | 카드에 적힌 특징 |
|---|---|---|---|---|
Qwen/Qwen3-8B | apache-2.0 | 8.2B (임베딩 제외 6.95B) | 32,768 (YaRN 시 131,072) | 100개 이상 언어, 사고 모드 |
meta-llama/Llama-3.1-8B-Instruct | llama3.1 | 8B | 128k | 영어·독일어·프랑스어·이탈리아어·포르투갈어·힌디어·스페인어·태국어 기재 |
mistralai/Mistral-7B-Instruct-v0.3 | apache-2.0 | 7B | 명시되어 있지 않음 | 조정 장치가 없다고 명시, 함수 호출 지원 |
google/gemma-3-4b-it | gemma | 4B | 128K | 140개 이상 언어, 이미지와 텍스트 입력 |
중형 구간에서 가장 자주 어긋나는 기대가 언어 지원입니다. meta-llama/Llama-3.1-8B-Instruct 카드가 공식적으로 나열하는 언어에 한국어와 일본어는 들어 있지 않습니다. 반대로 Qwen/Qwen3-8B와 google/gemma-3-4b-it은 각각 100개 이상, 140개 이상 언어를 지원한다고 적습니다. 다만 이 문장은 지원한다는 선언이고 품질 보장이 아니므로, 우리 도메인 문장으로 직접 재 봐야 합니다.
mistralai/Mistral-7B-Instruct-v0.3은 조정 장치가 전혀 없다고 카드가 밝힙니다. 사내 도구라면 문제가 없지만 고객 접점에 놓는다면 별도 필터 계층이 필요하다는 뜻입니다.
대형: 서버가 필요한 구간
| 저장소 | license | 파라미터 | 컨텍스트 | 카드에 적힌 특징 |
|---|---|---|---|---|
openai/gpt-oss-20b | apache-2.0 | 21B (활성 3.6B) | 명시되어 있지 않음 | 16GB 메모리 안에서 실행 가능, harmony 형식 필수 |
mistralai/Mistral-Small-24B-Instruct-2501 | apache-2.0 | 24B | 32k | bf16/fp16에 약 55GB GPU RAM, 양자화 시 RTX 4090 한 장 또는 32GB 맥북 |
google/gemma-3-27b-it | gemma | 27B | 입력 128K, 출력 8,192 | 조건 동의 후 접근 |
Qwen/Qwen3-32B | apache-2.0 | 32.8B (임베딩 제외 31.2B) | 32,768 (YaRN 시 131,072) | vLLM과 SGLang 실행 명령 제시 |
mistralai/Mistral-Small-24B-Instruct-2501 카드가 적은 약 55GB라는 숫자는 이 구간에서 가장 실용적인 정보입니다. 24B라는 파라미터 수만 보고 GPU 한 장을 떠올렸다가, 실제로는 bf16 기준으로 80GB급 한 장이거나 24GB급 여러 장이 필요하다는 사실을 배포 직전에 알게 되는 일이 흔하기 때문입니다.
MoE는 메모리 계산 규칙이 다릅니다
openai/gpt-oss-20b은 21B 파라미터에 활성 3.6B라고 적습니다. 여기서 헷갈리기 쉬운 지점은, 연산량은 3.6B짜리 모델처럼 움직이지만 가중치는 21B 전부가 메모리에 올라가야 한다는 것입니다. 카드가 16GB 메모리 안에서 돌아간다고 덧붙인 것은 MXFP4 양자화를 전제로 한 수치입니다.
즉 MoE 모델을 볼 때는 활성 파라미터로 속도를, 전체 파라미터와 양자화 형식으로 메모리를 따로 계산해야 합니다. 하나의 숫자로 뭉뚱그리면 어느 쪽이든 틀립니다.
컨텍스트 확장은 공짜가 아닙니다
Qwen3 계열 카드는 컨텍스트 확장에 대해 드물게 솔직합니다. Qwen/Qwen3-8B, Qwen/Qwen3-4B, Qwen/Qwen3-32B 모두 기본 32,768에서 YaRN으로 131,072까지 늘릴 수 있다고 적으면서, 오픈소스 프레임워크가 구현한 정적 YaRN은 입력 길이와 무관하게 배율이 고정되어 짧은 텍스트 성능에 영향을 줄 수 있다고 경고합니다.
실무적으로는 128K가 필요한 요청과 2K로 끝나는 요청이 같은 엔드포인트를 쓰면 안 된다는 뜻입니다. 긴 문서 처리용 배포와 일반 대화용 배포를 분리하는 편이 대개 더 싸고 안정적입니다.
카드가 요구하는 실행 조건을 무시하지 마세요
세 가지가 특히 자주 무시됩니다.
첫째, openai/gpt-oss-20b 카드는 이 모델이 harmony 응답 형식으로 학습되었으며 그 형식으로만 써야 하고 그렇지 않으면 제대로 동작하지 않는다고 적습니다. 형식을 안 맞추고 성능이 나쁘다고 결론 내리면 잘못된 판단입니다.
둘째, Qwen3 계열 카드는 사고 모드에서 탐욕적 디코딩을 쓰지 말라고 명시하며, 무한 반복으로 이어질 수 있다고 경고합니다. Qwen/Qwen3-32B는 사고 모드 권장값으로 온도 0.6, TopP 0.95를 적어 둡니다.
셋째, 기본 모델과 지시 조정 모델의 이름은 한 단어 차이입니다. 사고 모드 전환은 enable_thinking 인자와 /think, /no_think 소프트 스위치로 제어한다고 Qwen/Qwen3-4B 카드가 적고 있으니, 이 인자를 지원하지 않는 런타임을 쓰면서 모드가 안 바뀐다고 의심할 필요는 없습니다.
실행 예시
# 예시: 지시 조정 모델을 채팅 템플릿으로 호출합니다
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "Qwen/Qwen3-4B"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, torch_dtype="auto", device_map="auto")
messages = [{"role": "user", "content": "회의록 세 줄 요약을 만들어 주세요."}]
prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tok(prompt, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=256, temperature=0.6, top_p=0.95)
print(tok.decode(out[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))
서버로 띄울 때는 런타임이 컨텍스트와 배치를 관리합니다.
# 예시: OpenAI 호환 엔드포인트로 서빙합니다
vllm serve Qwen/Qwen3-8B --max-model-len 32768
고를 때의 순서
- 지연 예산과 배포 위치를 먼저 확정합니다. 그다음에 크기 구간이 정해집니다.
- 구간 안에서 라이선스와 게이트 여부로 후보를 거릅니다.
- 남은 후보의 언어 지원 표기를 확인하고, 우리 도메인 문장으로 직접 재 봅니다.
- 컨텍스트 요구가 기본값을 넘는지 확인하고, 넘는다면 확장 방식과 경고 문구를 읽습니다.
- 카드가 요구하는 형식과 샘플링 조건을 그대로 지킨 상태에서만 품질을 비교합니다.
직접 해보기
- LLM GPU 메모리(VRAM) 계산기 — 파라미터와 컨텍스트를 넣어 어느 구간이 우리 GPU에 맞는지 봅니다.
- LLM API 비용 계산기 — 자체 호스팅과 API 호출의 비용 구조를 비교할 때 기준선으로 씁니다.
- 브라우저 AI 실험실 — 소형 모델의 체감 지연을 직접 확인합니다.
시리즈 안내
- 이전 글: 허깅페이스 모델 카드 읽는 법
- 다음 글: 임베딩과 리랭커, RAG에서 실제로 중요한 것
참고 자료
- 표의 모든 값은 2026-08-12에 해당 모델의 Hugging Face 페이지에서 직접 읽었습니다. 페이지에 없던 항목은 명시되어 있지 않음으로 적었습니다.
- 카드에 실린 벤치마크 수치는 배포자 자체 보고이며 독립 평가가 아닙니다. 이 글은 모델 간 점수 비교표를 만들지 않습니다.
- 라이선스 전문을 직접 읽고, 상업적 사용은 법무 검토를 거치세요.