Qwen3: 더 깊이 생각하고, 더 빠르게 행동하다

ko생성일: 2025. 4. 29.

Qwen3 모델의 특징, 다국어 지원, 하이브리드 추론, 프리·포스트트레이닝 과정, 실사용 방법, 오픈소스/파트너십, 그리고 향후 개발 로드맵을 담은 공식 소개.

이미지 1: 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

이미지 3

2개의 MoE 모델(Qwen3-235B-A22BQwen3-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.6B2816 / 832K
Qwen3-1.7B2816 / 832K
Qwen3-4B3632 / 832K
Qwen3-8B3632 / 8아니오128K
Qwen3-14B4040 / 8아니오128K
Qwen3-32B6464 / 8아니오128K
모델레이어 수헤드(Q / KV)전문가 수(전체 / 활성)컨텍스트 길이
Qwen3-30B-A3B4832 / 4128 / 8128K
Qwen3-235B-A22B9464 / 4128 / 8128K

이러한 포스트트레인 모델들(예: 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가지 모드를 지원합니다:

  1. 사고(Thinking) 모드: 이 모드에서는 모델이 최종 답변을 주기 전 단계별로 논리적으로 추론합니다. 복잡한 문제, 심층적 사고가 필요한 경우에 적합합니다.
  2. 비사고(Non-Thinking) 모드: 신속하고 거의 즉각적 답변을 제공합니다. 깊이보다는 속도가 중요한 단순 질의에 적합합니다.

이 유연성 덕분에 사용자는 과업에 따라 모델의 "사고량"을 조절할 수 있습니다. 어려운 문제는 충분한 추론으로, 쉬운 문제는 빠른 응답으로 대응 가능합니다. 특히 두 모드의 통합은 모델의 사려 깊고 효율적인 사고 예산 제어 능력을 대폭 강화했습니다. 위 도표처럼 Qwen3는 할당된 컴퓨팅 추론 예산에 따라 스케일러블하고 매끄러운 성능 개선을 보입니다. 덕분에 사용자는 과업마다 예산을 손쉽게 세팅해 비용과 품질의 최적 균형을 달성할 수 있습니다.

이미지 4

  • 다국어 지원

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 컨텍스트용 고품질 장문 데이터로 긴 입력처리 성능을 확보하였습니다.

이미지 5

아키텍처 진화, 데이터 증가, 효율적 학습법 도입으로 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% 활성 파라미터만으로 구현, 훈련 및 추론 비용 모두 절감합니다.

포스트트레이닝

이미지 6

단계별 추론과 빠른 응답의 하이브리드 모델을 위해 4단계 트레이닝 파이프라인이 설계됐습니다: (1) 장문 Chain-of-Thought(추론) 콜드 스타트, (2) 추론 기반 RL, (3) 사고 모드 융합, (4) 범용 RL.

1단계에서는 수학·코딩·논리·STEM 등 다양한 과업의 장문 CoT 데이터로 모델을 파인튜닝해 기본적 추론능력을 길렀습니다. 2단계에서는 RL에 컴퓨팅 능력을 확장 투입, 규칙 기반 보상으로 탐사/exploit 능력을 강화했습니다. 3단계에서는 장문 CoT+일상 지시 튜닝 데이터를 결합한 파인튜닝으로 비사고(빠른응답) 능력을 결합, 자연스러운 reasoning-빠른응답 이중 능력을 구현했습니다. 4단계에서 20여 개 범용 과업을 RL로 학습해 모델의 전반적 능력을 강화하고 바람직하지 않은 행동을 수정했습니다. 이에는 명령/형식/에이전트 능력 등이 포함됩니다.

Qwen3로 개발하기

여기서는 다양한 프레임워크에서 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를 생성할 수 있습니다:

  • 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의 간단한 명령어 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은 친구들 없이는 의미가 없습니다! 더 많은 분과 기관이 커뮤니티에 동참해 Qwen의 발전에 기여하시길 환영합니다!

이미지 7

향후 계획

Qwen3는 AGI(범용인공지능)·ASI(초지능)로 가는 여정의 중요한 이정표입니다. 프리트레이닝과 RL 모두 대규모로 확장해 더 높은 지성을 달성하였고, 사고-비사고 모드를 유려하게 통합해 사용자 사고 예산 컨트롤의 유연성을 높였으며, 다양한 언어 지원을 통해 글로벌 접근성을 강화했습니다.

향후 계획은 모델 구조 및 학습 방식을 한층 다듬어

  • 데이터·모델 사이즈·맥락 길이 확장
  • 멀티모달리티 범위 증대
  • 환경 기반 피드백과 장기추론을 위한 RL 고도화를 이루고자 합니다.

우리는 이제 "모델 트레이닝의 시대"에서 "에이전트 트레이닝의 시대"로 넘어가고 있다고 봅니다. 다음 세대 Qwen은 모두의 일과 삶에 의미 있는 혁신을 가져올 것입니다.