跳到正文
原文
通义千问 Qwen:Blog·· 2025-03-06精选AI 评分70

通义千问发布 32B 参数推理模型 QwQ-32B,称强化学习使其比肩 DeepSeek-R1

QwQ-32B: Embracing the Power of Reinforcement Learning

文章要点
  • 1通义千问发布 32B 参数推理模型 QwQ-32B,官方称性能比肩 DeepSeek-R1(671B 参数,激活 37B)
  • 2模型以 Apache 2.0 协议在 Hugging Face 与 ModelScope 开放权重,也可经 Qwen Chat 使用
  • 3官方将调用工具、依据环境反馈调整推理的 Agent 能力集成进该推理模型
  • 4训练分两阶段强化学习,先以数学准确率校验和代码执行测试做奖励,再用通用奖励模型补足指令遵循等能力
决策要点

强化学习把比肩 DeepSeek-R1 的推理性能做进 32B 体量,强推理模型的算力与部署门槛随之明显下移。

  • 影响:自部署强推理模型的硬件预算有望随 32B 规模下降;Apache 2.0 允许商用,私有化部署路径明确;模型内置 Agent 能力,工具调用类场景可直接纳入试点评估。
  • 参考:可考虑选数学、代码类任务与现有 DeepSeek-R1 方案做一轮同题对比评测;若倾向私有化,先算出 32B 模型在现有 GPU 资源上的部署成本,再定试点范围。
  • 依据:性能比肩 DeepSeek-R1 为官方博客口径,暂无独立验证;对比基准含 o1-mini 与 DeepSeek 蒸馏模型,开放协议以 Hugging Face、ModelScope 页面为准。
正文 · AI 翻译

QWEN CHAT Hugging Face ModelScope 演示 DISCORD

扩展强化学习(RL)的规模,有潜力使模型性能超越传统的预训练和后训练方法。近期研究表明,RL 能够显著提升模型的推理能力。例如,DeepSeek R1 通过整合冷启动数据和多阶段训练,实现了最先进的性能,具备了深度思考与复杂推理能力。

我们的研究探索了强化学习(RL)的可扩展性及其对提升大语言模型智能的影响。我们很高兴地推出 QwQ-32B,这是一个拥有 320 亿参数的模型,其性能可与拥有 6710 亿参数(其中 370 亿被激活)的 DeepSeek-R1 相媲美。这一卓越成果凸显了当 RL 应用于在海量世界知识上预训练的强大基础模型时的有效性。此外,我们还将与智能体相关的能力融入推理模型,使其能够在使用工具的同时进行批判性思考,并根据环境反馈调整推理过程。这些进展不仅展示了 RL 的变革性潜力,也为在追求通用人工智能的道路上实现进一步创新铺平了道路。

QwQ-32B 已按照 Apache 2.0 许可证在 Hugging Face 和 ModelScope 上开放权重,并可通过 Qwen Chat 访问。

性能

我们在一系列旨在评估数学推理、编程能力和通用问题解决能力的基准测试中对 QwQ-32B 进行了评估。以下结果展示了 QwQ-32B 与其他领先模型的性能对比,包括 DeepSeek-R1-Distilled-Qwen-32B、DeepSeek-R1-Distilled-Llama-70B、o1-mini 以及原版 DeepSeek-R1。

强化学习

我们从一个冷启动检查点开始,实施了一种由基于结果的奖励驱动的强化学习(RL)扩展方法。在初始阶段,我们专门针对数学和编程任务扩展 RL。我们没有依赖传统的奖励模型,而是利用数学问题的准确性校验器来确保最终解的正确性,并使用代码执行服务器来评估生成的代码能否成功通过预定义的测试用例。随着训练轮次的推进,这两个领域的性能均呈现持续提升。在第一阶段之后,我们增加了另一个针对通用能力的 RL 阶段。该阶段使用来自通用奖励模型的奖励和一些基于规则的校验器进行训练。我们发现,这一阶段的 RL 训练只需少量步数,就能提升其他通用能力(如指令遵循、与人类偏好对齐以及智能体性能)的表现,同时数学和编程能力不会出现显著下降。

使用 QwQ-32B

以下是一些简要示例,演示如何通过 Hugging Face Transformers 和阿里云 DashScope API 使用 QwQ-32B。

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/QwQ-32B"

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "How many r's are in the word \"strawberry\""
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32768
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
from openai import OpenAI
import os

# Initialize OpenAI client
client = OpenAI(
    # If the environment variable is not configured, replace with your API Key: api_key="sk-xxx"
    # How to get an API Key:https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

reasoning_content = ""
content = ""

is_answering = False

completion = client.chat.completions.create(
    model="qwq-32b",
    messages=[
        {"role": "user", "content": "Which is larger, 9.9 or 9.11?"}
    ],
    stream=True,
    # Uncomment the following line to return token usage in the last chunk
    # stream_options={
    #     "include_usage": True
    # }
)

print("\n" + "=" * 20 + "reasoning content" + "=" * 20 + "\n")

for chunk in completion:
    # If chunk.choices is empty, print usage
    if not chunk.choices:
        print("\nUsage:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        # Print reasoning content
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content is not None:
            print(delta.reasoning_content, end='', flush=True)
            reasoning_content += delta.reasoning_content
        else:
            if delta.content != "" and is_answering is False:
                print("\n" + "=" * 20 + "content" + "=" * 20 + "\n")
                is_answering = True
            # Print content
            print(delta.content, end='', flush=True)
            content += delta.content

未来工作

这标志着 Qwen 在扩展强化学习以增强推理能力方面迈出的第一步。在这一历程中,我们不仅见证了规模化 RL 的巨大潜力,也认识到预训练语言模型中尚未发掘的可能性。在我们致力于开发下一代 Qwen 的过程中,我们坚信,将更强大的基础模型与由规模化计算资源驱动的 RL 相结合,将使我们更接近实现通用人工智能。此外,我们正在积极探索将智能体与 RL 相结合,以实现长程推理,致力于通过推理时间扩展释放更强大的智能。

来源:通义千问 Qwen:Blog · qwenlm.github.io