[릴리즈노트]알리바바 오픈소스 AI Qwen3 공개
※ 본문은 알리바바 클라우드의 <Qwen3: Think Deeper, Act Faster>를 신속하게 전달하기 위해 AI 번역 및 요약을 사용했습니다. 일부 문장에 오역이나 부자연스러운 표현이 있을 수 있으니 참고하시기 바랍니다.
요약
알리바바가 2025년 4월 29일 공개한 Qwen3는 사고 모드 전환, 다국어 지원, 고성능·저비용 추론을 갖춘 차세대 오픈소스 언어 모델입니다.
소개
오늘, 대형 언어 모델인 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의 성능에 필적할 수 있습니다.


두 가지 MoE 모델에 오픈 가중치를 부여합니다: 총 파라미터가 235억 개이고 활성화된 파라미터가 220억 개인 대규모 모델인 Qwen3-235B-A22B와 총 파라미터가 300억 개이고 활성화된 파라미터가 30억 개인 소규모 MoE 모델인 Qwen3-30B-A3B입니다. 또한 Apache 2.0 라이선스에 따라 Qwen3-32B, Qwen3-14B, Qwen3-8B, Qwen3-4B, Qwen3-1.7B, Qwen3-0.6B 등 6개의 고밀도 모델도 오픈 가중치가 적용됩니다.

이제 사전 학습된 모델(예: Qwen3-30B-A3B)과 함께 사후 학습된 모델(예: Qwen3-30B-A3B-Base)을 허깅 페이스, 모델스코프, 캐글과 같은 플랫폼에서 사용할 수 있습니다. 배포 시에는 SGLang 및 vLLM과 같은 프레임워크를 사용하는 것이 좋습니다. 로컬 사용의 경우 Ollama, LMStudio, MLX, llama.cpp, KTransformers와 같은 도구를 적극 권장합니다. 이러한 옵션은 사용자가 연구, 개발 또는 프로덕션 환경에서 Qwen3를 워크플로우에 쉽게 통합할 수 있도록 지원합니다.
저희는 Qwen3의 출시와 오픈 소싱이 대규모 기초 모델의 연구와 개발을 크게 발전시킬 것이라고 믿습니다. 저희의 목표는 전 세계의 연구자, 개발자 및 조직이 이러한 최첨단 모델을 사용하여 혁신적인 솔루션을 구축할 수 있도록 지원하는 것입니다.
Qwen 채팅 웹(chat.qwen.ai)과 모바일 앱에서 Qwen3를 자유롭게 사용해 보세요!
주요 기능
하이브리드 사고 모드
Qwen3 모델은 문제 해결을 위한 하이브리드 접근 방식을 도입했습니다. 두 가지 모드를 지원합니다:
- 사고 모드: 이 모드에서는 모델이 최종 답을 제공하기 전에 단계별로 추론하는 데 시간이 걸립니다. 이 모드는 더 깊은 사고가 필요한 복잡한 문제에 이상적입니다.
- 비사고 모드: 이 모드에서는 모델이 거의 즉각적으로 빠른 답변을 제공하며, 깊이보다는 속도가 더 중요한 간단한 문제에 적합합니다.
이러한 유연성 덕분에 사용자는 당면한 과제에 따라 모델이 수행하는 '사고'의 정도를 제어할 수 있습니다. 예를 들어, 어려운 문제는 확장된 추론을 통해 해결하고, 쉬운 문제는 지체 없이 바로 답을 구할 수 있습니다. 결정적으로, 이 두 가지 모드의 통합은 안정적이고 효율적인 사고 예산 제어를 구현하는 모델의 능력을 크게 향상시킵니다. 위에서 살펴본 바와 같이 Qwen3는 할당된 계산 추론 예산과 직접적인 상관관계가 있는 확장 가능하고 원활한 성능 향상을 보여줍니다. 이러한 설계를 통해 사용자는 작업별 예산을 보다 쉽게 구성할 수 있어 비용 효율성과 추론 품질 간에 최적의 균형을 이룰 수 있습니다.

다국어 지원
Qwen3 모델은 119개 언어와 방언을 지원합니다. 이 광범위한 다국어 기능은 국제적인 애플리케이션에 새로운 가능성을 열어주며 전 세계 사용자가 이 모델의 강력한 기능을 활용할 수 있도록 합니다.

에이전트 기능 향상
유니티는 코딩 및 에이전트 기능을 위해 Qwen3 모델을 최적화했으며, MCP의 지원도 강화했습니다. 아래에서는 Qwen3가 어떻게 생각하고 환경과 상호 작용하는지 보여주는 예시를 제공합니다.
https://qianwen-res.oss-accelerate-overseas.aliyuncs.com/mcp.mov
사전 훈련
사전 학습 측면에서 Qwen3의 데이터 세트는 Qwen2.5에 비해 크게 확장되었습니다. Qwen2.5는 18조 개의 토큰으로 사전 학습되었지만, Qwen3는 119개 언어와 방언을 포함하는 약 36조 개의 토큰으로 그 두 배에 가까운 양을 사용합니다. 이 대규모 데이터 세트를 구축하기 위해 웹뿐만 아니라 PDF와 같은 문서에서도 데이터를 수집했습니다. 이러한 문서에서 텍스트를 추출하기 위해 Qwen2.5-VL을 사용했고, 추출된 콘텐츠의 품질을 개선하기 위해 Qwen2.5를 사용했습니다. 수학 및 코드 데이터의 양을 늘리기 위해 Qwen2.5-Math와 Qwen2.5-Coder를 사용하여 합성 데이터를 생성했습니다. 여기에는 교과서, 질문-답변 쌍, 코드 스니펫이 포함됩니다.
사전 학습 과정은 3단계로 구성됩니다. 첫 번째 단계(S1)에서는 4K 토큰의 컨텍스트 길이로 30조 개 이상의 토큰에 대해 모델을 사전 학습시켰습니다. 이 단계에서는 모델에 기본적인 언어 능력과 일반적인 지식을 제공했습니다. 두 번째 단계(S2)에서는 STEM, 코딩, 추론 작업과 같은 지식 집약적인 데이터의 비중을 높여 데이터 세트를 개선했습니다. 그런 다음 모델은 추가로 5조 개의 토큰으로 사전 학습되었습니다. 마지막 단계에서는 고품질의 긴 컨텍스트 데이터를 사용하여 컨텍스트 길이를 32K 토큰으로 확장했습니다. 이를 통해 모델이 더 긴 입력을 효과적으로 처리할 수 있게 되었습니다.

모델 아키텍처의 발전, 학습 데이터의 증가, 보다 효과적인 학습 방법으로 인해 Qwen3 고밀도 기본 모델의 전반적인 성능은 더 많은 매개 변수를 가진 Qwen2.5 기본 모델의 성능과 일치합니다. 예를 들어, Qwen3-1.7B/4B/8B/14B/32B-Base는 각각 Qwen2.5-3B/7B/14B/32B/72B-Base만큼의 성능을 발휘합니다. 특히 STEM, 코딩, 추론과 같은 영역에서는 Qwen3 고밀도 기본 모델이 더 큰 Qwen2.5 모델보다 성능이 더 뛰어납니다. Qwen3-MoE 기본 모델의 경우 활성 파라미터의 10%만 사용하면서 Qwen2.5 고밀도 기본 모델과 비슷한 성능을 달성합니다. 따라서 학습 및 추론 비용을 크게 절감할 수 있습니다.
사후훈련

단계별 추론과 신속한 대응이 모두 가능한 하이브리드 모델을 개발하기 위해 4단계 훈련 파이프라인을 구현했습니다. 이 파이프라인에는 다음이 포함됩니다: (1) 긴 생각의 사슬(CoT) 콜드 스타트, (2) 추론 기반 강화 학습(RL), (3) 사고 모드 융합, (4) 일반 RL이 그것입니다.
첫 번째 단계에서는 수학, 코딩, 논리적 추론, STEM 문제 등 다양한 과제와 영역을 포괄하는 다양한 긴 CoT 데이터를 사용하여 모델을 미세 조정했습니다. 이 과정을 통해 모델에 기본적인 추론 능력을 갖추도록 하는 것이 목표였습니다. 두 번째 단계에서는 규칙 기반 보상을 활용하여 모델의 탐색 및 활용 능력을 향상시키는 등 RL을 위한 계산 리소스를 확장하는 데 중점을 두었습니다.
세 번째 단계에서는 긴 CoT 데이터와 일반적으로 사용되는 인스트럭션 튜닝 데이터를 조합하여 사고 모델을 미세 조정함으로써 비사고 기능을 사고 모델에 통합했습니다. 이 데이터는 두 번째 단계의 강화된 사고 모델에서 생성된 것으로, 추론 능력과 빠른 반응 능력이 원활하게 조화를 이룰 수 있도록 했습니다. 마지막으로 4단계에서는 모델의 일반적 기능을 더욱 강화하고 원치 않는 행동을 수정하기 위해 20개 이상의 일반 영역 과제에 RL을 적용했습니다. 이러한 작업에는 명령어 팔로잉, 형식 팔로잉, 상담원 기능 등이 포함되었습니다.
Qwen3로 개발하기
다음은 다양한 프레임워크에서 Qwen3를 사용할 수 있는 간단한 가이드입니다. 우선, 허깅 페이스 트랜스포머에서 Qwen3-30B-A3B를 사용하는 표준 예제를 제공합니다:
from modelscope import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-30B-A3B"
# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# prepare the model input
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 # Switch between thinking and non-thinking modes. Default is True.
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# conduct text completion
generated_ids = model.generate(
**model_inputs,
max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
# parsing thinking content
try:
# rindex finding 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 # True is the default value for enable_thinking.
)
배포를 위해 sglang>=0.4.6.post1 또는 vllm>=0.8.4를 사용하여 OpenAI 호환 API 엔드포인트를 만들 수 있습니다:
- SGLang:
python -m sglang.launch_server --model-path Qwen/Qwen3-30B-A3B --reasoning-parser qwen3
- vLLM:
vllm serve Qwen/Qwen3-30B-A3B --enable-reasoning --reasoning-parser deepseek_r1
로컬 개발용으로 사용하는 경우, ollama run qwen3:30b-a3b라는 간단한 명령어를 실행하여 모델을 가지고 놀거나 LMStudio 또는 llama.cpp와 ktransformers를 사용하여 로컬에서 빌드할 수 있습니다.
고급 사용법
활성화_사고=정일 때 사용자가 모델의 동작을 동적으로 제어할 수 있는 소프트 스위치 메커니즘을 제공합니다. 구체적으로, 사용자 프롬프트나 시스템 메시지에 /think 및 /no_think를 추가하여 모델의 사고 모드를 차례대로 전환할 수 있습니다. 모델은 멀티턴 대화에서 가장 최근의 지시를 따릅니다.
다음은 다중 턴 대화의 예입니다:
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)
# Update history
self.history.append({"role": "user", "content": user_input})
self.history.append({"role": "assistant", "content": response})
return response
# Example Usage
if __name__ == "__main__":
chatbot = QwenChatbot()
# First input (without /think or /no_think tags, thinking mode is enabled by default)
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("----------------------")
# Second input with /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("----------------------")
# Third input with /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는 도구 호출 기능이 뛰어납니다. Qwen3의 에이전트 기능을 최대한 활용하려면 Qwen-Agent를 사용하는 것이 좋습니다. Qwen-Agent는 도구 호출 템플릿과 도구 호출 파서를 내부적으로 캡슐화하여 코딩 복잡성을 크게 줄여줍니다.
사용 가능한 도구를 정의하기 위해 MCP 구성 파일을 사용하거나, Qwen-Agent의 통합 도구를 사용하거나, 다른 도구를 직접 통합할 수 있습니다.
from qwen_agent.agents import Assistant
# Define LLM
llm_cfg = {
'model': 'Qwen3-30B-A3B',
# Use the endpoint provided by Alibaba Model Studio:
# 'model_type': 'qwen_dashscope',
# 'api_key': os.getenv('DASHSCOPE_API_KEY'),
# Use a custom endpoint compatible with OpenAI API:
'model_server': 'http://localhost:8000/v1', # api_base
'api_key': 'EMPTY',
# Other parameters:
# 'generate_cfg': {
# # Add: When the response content is `<think>this is the thought</think>this is the answer;
# # Do not add: When the response has been separated by reasoning_content and content.
# 'thought_in_content': True,
# },
}
# Define Tools
tools = [
{'mcpServers': { # You can specify the MCP configuration file
'time': {
'command': 'uvx',
'args': ['mcp-server-time', '--local-timezone=Asia/Shanghai']
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
},
'code_interpreter', # Built-in tools
]
# Define Agent
bot = Assistant(llm=llm_cfg, function_list=tools)
# Streaming generation
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)을 모두 확장하여 더 높은 수준의 지능을 달성했습니다. 사고 모드와 비사고 모드를 원활하게 통합하여 사용자가 사고 예산을 유연하게 제어할 수 있도록 했습니다. 또한 다양한 언어에 대한 지원을 확대하여 글로벌 접근성을 강화했습니다.
앞으로도 다양한 측면에서 모델을 개선해 나갈 계획입니다. 여기에는 데이터 확장, 모델 크기 증가, 컨텍스트 길이 확장, 양식 확장, 장기적 추론을 위한 환경 피드백을 통한 RL 발전 등 몇 가지 주요 목표를 달성하기 위해 모델 아키텍처와 훈련 방법론을 개선하는 것이 포함됩니다. 우리는 모델 훈련에 중점을 두던 시대에서 에이전트 훈련에 중점을 두는 시대로 전환하고 있다고 믿습니다. 다음 단계에서는 모든 사람의 업무와 생활에 의미 있는 발전을 가져올 것입니다.