Qwen3 모델의 특징, 다국어 지원, 하이브리드 추론, 프리·포스트트레이닝 과정, 실사용 방법, 오픈소스/파트너십, 그리고 향후 개발 로드맵을 담은 공식 소개.
QWEN CHAT GitHub Hugging Face ModelScope Kaggle DEMO DISCORD
오늘 우리는 Qwen 대형 언어모델 제품군의 최신 모델인 Qwen3를 공개하게 되어 매우 기쁩니다. 주력 모델 Qwen3-235B-A22B는 코딩, 수학, 일반 성능 등 다양한 벤치마크 평가에서 DeepSeek-R1, o1, o3-mini, Grok-3, Gemini-2.5-Pro 등 타 선도 모델과 견주어도 경쟁력 있는 결과를 보여줍니다. 소형 MoE 모델인 Qwen3-30B-A3B는 활성화 파라미터가 10배 더 많은 QwQ-32B보다 높은 성능을 보였고, 심지어 Qwen3-4B 같은 초소형 모델조차도 Qwen2.5-72B-Instruct의 성능과 비견할 만합니다.
2개의 MoE 모델(Qwen3-235B-A22B와 Qwen3-30B-A3B)이 오픈 웨이트로 공개됩니다. 각각 전체 파라미터 235억/30억, 활성 파라미터 22억/3억입니다. 동시에 Qwen3-32B, Qwen3-14B, Qwen3-8B, Qwen3-4B, Qwen3-1.7B, Qwen3-0.6B 등의 6가지 Dense 모델도 아파치 2.0 라이선스로 오픈되었습니다.
모델 | 레이어 수 | 헤드(Q / KV) | 임베딩 공유 | 컨텍스트 길이 |
---|---|---|---|---|
Qwen3-0.6B | 28 | 16 / 8 | 예 | 32K |
Qwen3-1.7B | 28 | 16 / 8 | 예 | 32K |
Qwen3-4B | 36 | 32 / 8 | 예 | 32K |
Qwen3-8B | 36 | 32 / 8 | 아니오 | 128K |
Qwen3-14B | 40 | 40 / 8 | 아니오 | 128K |
Qwen3-32B | 64 | 64 / 8 | 아니오 | 128K |
모델 | 레이어 수 | 헤드(Q / KV) | 전문가 수(전체 / 활성) | 컨텍스트 길이 |
---|---|---|---|---|
Qwen3-30B-A3B | 48 | 32 / 4 | 128 / 8 | 128K |
Qwen3-235B-A22B | 94 | 64 / 4 | 128 / 8 | 128K |
이러한 포스트트레인 모델들(예: Qwen3-30B-A3B)은 Hugging Face, ModelScope, Kaggle에서 함께 공개된 프리트레인 모델들(예: Qwen3-30B-A3B-Base)과 함께 다운로드할 수 있습니다. 실서비스 배포는 SGLang, vLLM 등 프레임워크를, 로컬 사용에는 Ollama, LMStudio, MLX, llama.cpp, KTransformers 등 도구를 권장합니다. 이를 통해 연구, 개발, 운영 등 다양한 환경에서 Qwen3을 쉽게 통합할 수 있습니다.
Qwen3의 오픈소스와 공개는 대규모 파운데이션 모델 연구·개발에 크게 기여할 것으로 믿습니다. 우리의 목표는 전 세계 연구자, 개발자, 기업들이 이 첨단 모델을 바탕으로 혁신적인 솔루션을 개발하도록 지원하는 것입니다.
Qwen Chat 웹(chat.qwen.ai)과 모바일 앱에서 Qwen3를 직접 체험해보세요!
Qwen3 모델들은 하이브리드 프로블럼 솔빙 방식을 도입했습니다. 2가지 모드를 지원합니다:
이 유연성 덕분에 사용자는 과업에 따라 모델의 "사고량"을 조절할 수 있습니다. 어려운 문제는 충분한 추론으로, 쉬운 문제는 빠른 응답으로 대응 가능합니다. 특히 두 모드의 통합은 모델의 사려 깊고 효율적인 사고 예산 제어 능력을 대폭 강화했습니다. 위 도표처럼 Qwen3는 할당된 컴퓨팅 추론 예산에 따라 스케일러블하고 매끄러운 성능 개선을 보입니다. 덕분에 사용자는 과업마다 예산을 손쉽게 세팅해 비용과 품질의 최적 균형을 달성할 수 있습니다.
Qwen3 모델은 119개 언어 및 방언을 지원합니다. 이 광범위한 다국어 능력은 국제적 활용 가능성을 열고, 전 세계 사용자들이 Qwen3의 강력함을 누릴 수 있도록 해줍니다.
어족 | 언어 및 방언 |
---|---|
인도-유럽어 | 영어, 프랑스어, 포르투갈어, 독일어, 루마니아어, 스웨덴어, 덴마크어, 불가리아어, 러시아어, 체코어, 그리스어, 우크라이나어, 스페인어, 네덜란드어, 슬로바키아어, 크로아티아어, 폴란드어, 리투아니아어, 노르웨이어, 페르시아어, 슬로베니아어, 구자라트어, 라트비아어, 이탈리아어, 옥시타니아어, 네팔어, 마라티, 벨라루스어, 세르비아어, 룩셈부르크어, 베네토어, 아삼어, 웨일스어, 실레지아어, 아스투리아어, 찻티스가르히, 아와디, 마이틸리, 보즈푸리, 신디어, 아일랜드어, 페로어, 힌디어, 펀자브어, 벵골어, 오리야어, 타지키어, 동쪽 이디시어, 롬바르드어, 리구리아어, 시칠리아어, 프리울리어, 사르데냐어, 갈리시아어, 카탈루냐어, 아이슬란드어, 토스크 알바니아어, 림뷔르흐어, 다리어, 아프리칸스어, 마케도니아어, 싱할라어, 우르두어, 마가히어, 보스니아어, 아르메니아어 |
중국-티베트어 | 중국어(간체, 번체, 광둥어), 버마어 |
아프리카-아시아어 | 아랍어(표준, 낙디, 레반트, 이집트, 모로코, 메소포타미아, 타이즈-아덴, 튀니지), 히브리어, 몰타어 |
오스트로네시아어 | 인도네시아어, 말레이어, 타갈로그어, 세부아노어, 자바어, 순다어, 미낭카바우어, 발리어, 반자르어, 팡가시난어, 일로코어, 와라이어(필리핀) |
드라비다어 | 타밀어, 텔루구어, 칸나다어, 말라얄람어 |
튀르크어 | 터키어, 북아제르바이잔어, 북우즈베크어, 카자흐어, 바시키르어, 타타르어 |
타이-카다이어 | 태국어, 라오족어 |
우랄어 | 핀란드어, 에스토니아어, 헝가리어 |
오스트로아시아어 | 베트남어, 크메르어 |
기타 | 일본어, 한국어, 조지아어, 바스크어, 아이티어, 파피아멘토어, 카부베르디아누어, 토크 피신어, 스와힐리어 |
Qwen3 모델은 코딩 및 에이전트 능력이 대폭 최적화되었고, MCP 지원도 강화되었습니다. 아래는 Qwen3가 환경과 상호작용하며 사고하는 방식을 보여주는 사례들입니다.
사전훈련 데이터셋 규모가 Qwen2.5 대비 대폭 확장되었습니다. Qwen2.5는 18조 토큰을 사용했으나, Qwen3는 약 36조 토큰(119개 언어, 방언 포함)으로 거의 2배입니다. 데이터는 웹뿐 아니라 PDF 같은 문서에서 추출(Qwen2.5-VL), 품질 향상(Qwen2.5), 수학·코드 데이터 증량(Qwen2.5-Math, Qwen2.5-Coder로 생성) 등 다각적 방법을 동원했습니다. 교과서, QA쌍, 코드 스니펫 등이 포함됩니다.
프리트레인 과정은 3단계입니다. S1에서 3만조 토큰+4K컨텍스트로 기초 언어능력과 지식함양, S2에서 STEM, 코딩, 추론 등 지식 집약 데이터를 늘려 5조 토큰 추가 학습, 마지막 단계에서 32K 컨텍스트용 고품질 장문 데이터로 긴 입력처리 성능을 확보하였습니다.
아키텍처 진화, 데이터 증가, 효율적 학습법 도입으로 Qwen3 밀집(Base) 모델들은 Qwen2.5 더 큰 모델과 성능이 비슷합니다. 예컨대, Qwen3-1.7B/4B/8B/14B/32B-Base는 각각 Qwen2.5-3B/7B/14B/32B/72B-Base와 동급입니다. STEM, 코딩, 추론특화 영역에서는 Qwen3 밀집(Base) 모델이 상위 Qwen2.5보다 더 낫습니다. Qwen3-MoE 모델은 Qwen2.5 Dense(Base)와 비슷한 성능을 10% 활성 파라미터만으로 구현, 훈련 및 추론 비용 모두 절감합니다.
단계별 추론과 빠른 응답의 하이브리드 모델을 위해 4단계 트레이닝 파이프라인이 설계됐습니다: (1) 장문 Chain-of-Thought(추론) 콜드 스타트, (2) 추론 기반 RL, (3) 사고 모드 융합, (4) 범용 RL.
1단계에서는 수학·코딩·논리·STEM 등 다양한 과업의 장문 CoT 데이터로 모델을 파인튜닝해 기본적 추론능력을 길렀습니다. 2단계에서는 RL에 컴퓨팅 능력을 확장 투입, 규칙 기반 보상으로 탐사/exploit 능력을 강화했습니다. 3단계에서는 장문 CoT+일상 지시 튜닝 데이터를 결합한 파인튜닝으로 비사고(빠른응답) 능력을 결합, 자연스러운 reasoning-빠른응답 이중 능력을 구현했습니다. 4단계에서 20여 개 범용 과업을 RL로 학습해 모델의 전반적 능력을 강화하고 바람직하지 않은 행동을 수정했습니다. 이에는 명령/형식/에이전트 능력 등이 포함됩니다.
여기서는 다양한 프레임워크에서 Qwen3를 사용하는 예제를 소개합니다. 우선, Hugging Face transformers에서 Qwen3-30B-A3B 사용 예시는 다음과 같습니다:
from modelscope import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-30B-A3B"
# 토크나이저와 모델 로드
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 입력 준비
prompt = "Give me a short introduction to large language model."
messages = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=True # 사고/비사고 모드 스위치. 기본값 True.
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 텍스트 completion
generated_ids = model.generate(
**model_inputs,
max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
# 사고 내용 파싱
try:
# rindex로 151668 (</think>) 찾기
index = len(output_ids) - output_ids[::-1].index(151668)
except ValueError:
index = 0
thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")
content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")
print("thinking content:", thinking_content)
print("content:", content)
사고 모드를 끄고싶으면 enable_thinking
을 다음과 같이 조정하세요:
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False # enable_thinking의 기본값은 True.
)
배포는 sglang>=0.4.6.post1
또는 vllm>=0.8.4
로 OpenAI API 호환 endpoint를 생성할 수 있습니다:
python -m sglang.launch_server --model-path Qwen/Qwen3-30B-A3B --reasoning-parser qwen3
vllm serve Qwen/Qwen3-30B-A3B --enable-reasoning --reasoning-parser deepseek_r1
로컬 개발에서는 ollama의 간단한 명령어 ollama run qwen3:30b-a3b
를 사용하거나 LMStudio/llama.cpp/ktransformers 등으로 직접 구축할 수 있습니다.
enable_thinking=True일 때, /think, /no_think 지시를 통해 동적으로 사고 모드를 조정할 수 있습니다(사용자 prompt/system 메시지 어디든 적용 가능). 다중 턴 대화에서는 최신 지시가 우선 적용됩니다.
멀티턴 대화 예시:
from transformers import AutoModelForCausalLM, AutoTokenizer
class QwenChatbot:
def __init__(self, model_name="Qwen/Qwen3-30B-A3B"):
self.tokenizer = AutoTokenizer.from_pretrained(model_name)
self.model = AutoModelForCausalLM.from_pretrained(model_name)
self.history = []
def generate_response(self, user_input):
messages = self.history + [{"role": "user", "content": user_input}]
text = self.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = self.tokenizer(text, return_tensors="pt")
response_ids = self.model.generate(**inputs, max_new_tokens=32768)[0][len(inputs.input_ids[0]):].tolist()
response = self.tokenizer.decode(response_ids, skip_special_tokens=True)
# 히스토리 업데이트
self.history.append({"role": "user", "content": user_input})
self.history.append({"role": "assistant", "content": response})
return response
# 예시 사용법
if __name__ == "__main__":
chatbot = QwenChatbot()
# 첫 입력 (태그 없이 기본값 사고모드)
user_input_1 = "How many r's in strawberries?"
print(f"User: {user_input_1}")
response_1 = chatbot.generate_response(user_input_1)
print(f"Bot: {response_1}")
print("----------------------")
# 두번째 입력 /no_think 첨부
user_input_2 = "Then, how many r's in blueberries? /no_think"
print(f"User: {user_input_2}")
response_2 = chatbot.generate_response(user_input_2)
print(f"Bot: {response_2}")
print("----------------------")
# 세번째 입력 /think 첨부
user_input_3 = "Really? /think"
print(f"User: {user_input_3}")
response_3 = chatbot.generate_response(user_input_3)
print(f"Bot: {response_3}")
Qwen3는 툴콜(call) 능력이 탁월합니다. Qwen-Agent의 활용을 권장합니다. Qwen-Agent는 툴콜 템플릿과 파서가 내장되어 있어 복잡한 코딩 부담을 크게 줄여줍니다.
사용 가능한 툴은 MCP 구성파일을 지정하거나, Qwen-Agent 내장툴을 활용하거나, 직접 원하는 툴을 통합할 수 있습니다.
from qwen_agent.agents import Assistant
# LLM 정의
llm_cfg = {
'model': 'Qwen3-30B-A3B',
# Alibaba Model Studio 엔드포인트 예시:
# 'model_type': 'qwen_dashscope',
# 'api_key': os.getenv('DASHSCOPE_API_KEY'),
# OpenAI API 호환 엔드포인트 예시:
'model_server': 'http://localhost:8000/v1', # api_base
'api_key': 'EMPTY',
# 기타 파라미터:
# 'generate_cfg': {
# # 응답 내용이 `<think>생각</think>답변` 형태일 때 는 추가, 이미 분리 된 경우는 미추가
# 'thought_in_content': True,
# },
}
# 툴 정의
tools = [
{'mcpServers': { # MCP 구성 예시
'time': {
'command': 'uvx',
'args': ['mcp-server-time', '--local-timezone=Asia/Shanghai']
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
},
'code_interpreter', # 내장 툴
]
# 에이전트 정의
bot = Assistant(llm=llm_cfg, function_list=tools)
# 스트리밍 생성
messages = [{'role': 'user', 'content': 'https://qwenlm.github.io/blog/ Introduce the latest developments of Qwen'}]
for responses in bot.run(messages=messages):
pass
print(responses)
많은 분들의 지원에 감사드립니다. Qwen은 친구들 없이는 의미가 없습니다! 더 많은 분과 기관이 커뮤니티에 동참해 Qwen의 발전에 기여하시길 환영합니다!
Qwen3는 AGI(범용인공지능)·ASI(초지능)로 가는 여정의 중요한 이정표입니다. 프리트레이닝과 RL 모두 대규모로 확장해 더 높은 지성을 달성하였고, 사고-비사고 모드를 유려하게 통합해 사용자 사고 예산 컨트롤의 유연성을 높였으며, 다양한 언어 지원을 통해 글로벌 접근성을 강화했습니다.
향후 계획은 모델 구조 및 학습 방식을 한층 다듬어
우리는 이제 "모델 트레이닝의 시대"에서 "에이전트 트레이닝의 시대"로 넘어가고 있다고 봅니다. 다음 세대 Qwen은 모두의 일과 삶에 의미 있는 혁신을 가져올 것입니다.