Skip to content

Split View: 텍스트 생성 오픈 모델, 크기대별로 고르는 법

✨ Learn with Quiz
|

텍스트 생성 오픈 모델, 크기대별로 고르는 법

모델 정보는 2026-08-12에 Hugging Face 페이지에서 직접 확인했습니다. 모델 카드와 라이선스는 바뀔 수 있으니 사용 전 원본을 다시 확인하세요.

크기는 성능 등급이 아니라 배치 제약입니다

오픈 모델을 크기로 나누는 이유는 큰 모델이 좋은 모델이라서가 아닙니다. 크기가 결정하는 것은 어디에 올릴 수 있는지, 한 요청에 얼마나 기다릴 수 있는지, 그리고 몇 대를 띄워야 하는지입니다. 같은 과제라도 지연 예산이 300밀리초냐 3초냐에 따라 정답이 완전히 달라집니다.

그래서 이 글은 어느 모델이 더 낫다는 순위를 매기지 않습니다. 대신 각 구간에서 실제로 확인한 카드 값을 나열하고, 그 값이 배치 결정에 어떻게 쓰이는지만 짚습니다.

소형: 온디바이스와 엣지

저장소license파라미터컨텍스트카드에 적힌 특징
HuggingFaceTB/SmolLM2-1.7B-Instructapache-2.01.7B명시되어 있지 않음주로 영어를 이해하고 생성한다고 기재
meta-llama/Llama-3.2-1B-Instructllama3.21B (1.23B)128k모바일 작성 보조와 에이전트 용도를 의도된 사용처로 기재
Qwen/Qwen3-4Bapache-2.04.0B (임베딩 제외 3.6B)32,768 (YaRN 시 131,072)100개 이상 언어, 사고 모드 전환 지원
microsoft/Phi-4-mini-instructMIT3.8B128K메모리·연산 제약 환경과 지연 민감 시나리오를 용도로 기재

이 구간에서 카드가 스스로 밝히는 한계를 먼저 읽어야 합니다. HuggingFaceTB/SmolLM2-1.7B-Instruct는 결정적인 정보원이 아니라 보조 도구로 쓰라고 적고, 생성물이 사실에 맞거나 논리적으로 일관되거나 편향에서 자유롭지 않을 수 있으니 중요한 정보는 검증하라고 씁니다. microsoft/Phi-4-mini-instruct는 모델 크기 탓에 담을 수 있는 사실 지식이 제한적이고, 영어 외 언어에서 품질 격차가 있으며, 코드 학습이 대부분 파이썬에 몰려 있다고 밝힙니다.

meta-llama/Llama-3.2-1B-Instruct는 파일 접근 전에 조건 동의와 연락처 공유가 필요합니다. 온디바이스 배포는 보통 CI에서 가중치를 굽는데, 이 저장소는 토큰 없는 파이프라인에서 그대로 실패합니다.

중형: 단일 GPU 한 장

저장소license파라미터컨텍스트카드에 적힌 특징
Qwen/Qwen3-8Bapache-2.08.2B (임베딩 제외 6.95B)32,768 (YaRN 시 131,072)100개 이상 언어, 사고 모드
meta-llama/Llama-3.1-8B-Instructllama3.18B128k영어·독일어·프랑스어·이탈리아어·포르투갈어·힌디어·스페인어·태국어 기재
mistralai/Mistral-7B-Instruct-v0.3apache-2.07B명시되어 있지 않음조정 장치가 없다고 명시, 함수 호출 지원
google/gemma-3-4b-itgemma4B128K140개 이상 언어, 이미지와 텍스트 입력

중형 구간에서 가장 자주 어긋나는 기대가 언어 지원입니다. meta-llama/Llama-3.1-8B-Instruct 카드가 공식적으로 나열하는 언어에 한국어와 일본어는 들어 있지 않습니다. 반대로 Qwen/Qwen3-8Bgoogle/gemma-3-4b-it은 각각 100개 이상, 140개 이상 언어를 지원한다고 적습니다. 다만 이 문장은 지원한다는 선언이고 품질 보장이 아니므로, 우리 도메인 문장으로 직접 재 봐야 합니다.

mistralai/Mistral-7B-Instruct-v0.3은 조정 장치가 전혀 없다고 카드가 밝힙니다. 사내 도구라면 문제가 없지만 고객 접점에 놓는다면 별도 필터 계층이 필요하다는 뜻입니다.

대형: 서버가 필요한 구간

저장소license파라미터컨텍스트카드에 적힌 특징
openai/gpt-oss-20bapache-2.021B (활성 3.6B)명시되어 있지 않음16GB 메모리 안에서 실행 가능, harmony 형식 필수
mistralai/Mistral-Small-24B-Instruct-2501apache-2.024B32kbf16/fp16에 약 55GB GPU RAM, 양자화 시 RTX 4090 한 장 또는 32GB 맥북
google/gemma-3-27b-itgemma27B입력 128K, 출력 8,192조건 동의 후 접근
Qwen/Qwen3-32Bapache-2.032.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

고를 때의 순서

  1. 지연 예산과 배포 위치를 먼저 확정합니다. 그다음에 크기 구간이 정해집니다.
  2. 구간 안에서 라이선스와 게이트 여부로 후보를 거릅니다.
  3. 남은 후보의 언어 지원 표기를 확인하고, 우리 도메인 문장으로 직접 재 봅니다.
  4. 컨텍스트 요구가 기본값을 넘는지 확인하고, 넘는다면 확장 방식과 경고 문구를 읽습니다.
  5. 카드가 요구하는 형식과 샘플링 조건을 그대로 지킨 상태에서만 품질을 비교합니다.

직접 해보기

시리즈 안내

참고 자료

  • 표의 모든 값은 2026-08-12에 해당 모델의 Hugging Face 페이지에서 직접 읽었습니다. 페이지에 없던 항목은 명시되어 있지 않음으로 적었습니다.
  • 카드에 실린 벤치마크 수치는 배포자 자체 보고이며 독립 평가가 아닙니다. 이 글은 모델 간 점수 비교표를 만들지 않습니다.
  • 라이선스 전문을 직접 읽고, 상업적 사용은 법무 검토를 거치세요.

Choosing Open Text Generation Models by Size Class

Model details were read directly from the Hugging Face pages on 2026-08-12. Model cards and licenses change, so check the original again before you use anything.

Size Is a Deployment Constraint, Not a Quality Tier

The reason to sort open models by size is not that bigger means better. Size decides where you can put the model, how long a single request may take, and how many replicas you have to run. For the same task, a 300-millisecond latency budget and a 3-second one lead to completely different answers.

So this post does not rank models. It lists the card values actually verified in each band and points out how those values feed a deployment decision.

Small: On-Device and Edge

RepositorylicenseParametersContextAs stated on the card
HuggingFaceTB/SmolLM2-1.7B-Instructapache-2.01.7BNot statedStates it primarily understands and generates English
meta-llama/Llama-3.2-1B-Instructllama3.21B (1.23B)128kLists mobile writing assistants and agentic apps as intended use
Qwen/Qwen3-4Bapache-2.04.0B (3.6B non-embedding)32,768 (131,072 with YaRN)100+ languages, thinking mode switching
microsoft/Phi-4-mini-instructMIT3.8B128KLists memory and compute constrained environments and latency bound scenarios

In this band, read the limitations the cards state about themselves first. HuggingFaceTB/SmolLM2-1.7B-Instruct says to treat it as an assistive tool rather than a definitive source of information, and that output may not be factually accurate, logically consistent, or free from biases, so important information should be verified. microsoft/Phi-4-mini-instruct states that model size limits how much factual knowledge it can store, that quality varies for non-English languages, and that the majority of its code training was Python.

meta-llama/Llama-3.2-1B-Instruct requires accepting conditions and sharing contact information before file access. On-device deployment usually bakes weights in CI, and this repository simply fails in a token-free pipeline.

Mid: One Single GPU

RepositorylicenseParametersContextAs stated on the card
Qwen/Qwen3-8Bapache-2.08.2B (6.95B non-embedding)32,768 (131,072 with YaRN)100+ languages, thinking mode
meta-llama/Llama-3.1-8B-Instructllama3.18B128kLists English, German, French, Italian, Portuguese, Hindi, Spanish, Thai
mistralai/Mistral-7B-Instruct-v0.3apache-2.07BNot statedStates it has no moderation mechanisms; supports function calling
google/gemma-3-4b-itgemma4B128K140+ languages, text and image input

The expectation that most often breaks in this band is language coverage. Korean and Japanese are not among the languages the meta-llama/Llama-3.1-8B-Instruct card officially lists. Qwen/Qwen3-8B and google/gemma-3-4b-it state 100+ and 140+ languages respectively. But those sentences are declarations of coverage, not quality guarantees, so you have to measure with sentences from your own domain.

The mistralai/Mistral-7B-Instruct-v0.3 card states it has no moderation mechanisms at all. Fine for an internal tool; put it at a customer touchpoint and you are committing to a separate filter layer.

Large: The Server-Class Band

RepositorylicenseParametersContextAs stated on the card
openai/gpt-oss-20bapache-2.021B (3.6B active)Not statedRuns within 16GB of memory; harmony format required
mistralai/Mistral-Small-24B-Instruct-2501apache-2.024B32kAbout 55 GB of GPU RAM in bf16/fp16; fits one RTX 4090 or a 32GB MacBook once quantized
google/gemma-3-27b-itgemma27B128K input, 8,192 outputAccess after accepting conditions
Qwen/Qwen3-32Bapache-2.032.8B (31.2B non-embedding)32,768 (131,072 with YaRN)Gives vLLM and SGLang launch commands

The roughly 55 GB figure on the mistralai/Mistral-Small-24B-Instruct-2501 card is the most practical piece of information in this band. It is common to see 24B parameters, picture a single GPU, and discover right before deployment that bf16 means one 80GB-class card or several 24GB ones.

MoE Changes the Memory Math

openai/gpt-oss-20b states 21B parameters with 3.6B active. The confusing part is that compute behaves like a 3.6B model while all 21B of the weights still have to sit in memory. The card adding that it runs within 16GB assumes MXFP4 quantization.

So for an MoE model, compute speed from the active parameters and memory from the total parameters plus the quantization format, separately. Collapse them into one number and you will be wrong in one direction or the other.

Context Extension Is Not Free

The Qwen3 cards are unusually candid about extension. Qwen/Qwen3-8B, Qwen/Qwen3-4B, and Qwen/Qwen3-32B all state a 32,768 default extendable to 131,072 with YaRN, while warning that the static YaRN implemented in open-source frameworks keeps the scaling factor constant regardless of input length, which can affect performance on shorter texts.

Practically, that means requests needing 128K and requests finishing in 2K should not share an endpoint. Splitting long-document serving from general chat serving is usually cheaper and steadier.

Do Not Ignore the Runtime Conditions the Card Demands

Three get ignored most often.

First, the openai/gpt-oss-20b card states the model was trained on the harmony response format and should only be used with it, as it will not work correctly otherwise. Concluding that quality is poor without matching the format is a bad judgment.

Second, the Qwen3 cards explicitly say not to use greedy decoding in thinking mode, warning it can lead to endless repetitions. Qwen/Qwen3-32B records temperature 0.6 and TopP 0.95 as the thinking-mode settings.

Third, base and instruct variants differ by a single word in the name. The Qwen/Qwen3-4B card states that thinking-mode switching is controlled by the enable_thinking argument with /think and /no_think soft switches, so there is no mystery when a runtime that does not support the argument fails to switch modes.

Invocation Examples

# Example: call an instruct model through its chat template
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": "Write a three-line summary of these minutes."}]
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))

Served as an endpoint, the runtime manages context and batching for you.

# Example: serve behind an OpenAI-compatible endpoint
vllm serve Qwen/Qwen3-8B --max-model-len 32768

The Order to Decide In

  1. Fix the latency budget and the deployment location first. The size band falls out of that.
  2. Within the band, filter candidates by license and gating.
  3. Check the language coverage each survivor states, then measure with sentences from your own domain.
  4. Check whether your context requirement exceeds the default, and if so read the extension mechanism and its warnings.
  5. Compare quality only after honoring the format and sampling conditions the card demands.

Try It Yourself

Series Navigation

References

  • Every value in the tables was read directly from that model page on Hugging Face on 2026-08-12. Anything absent from the page is written as not stated.
  • Benchmark numbers on the cards are self-reported by publishers and are not independent evaluations. This post builds no cross-model score comparison.
  • Read the full license text yourself and put commercial use through legal review.