---
title: Qwen3-8b的变化和能力初探
tags:
  - llm
categories:
  - model-testing
date: 2025-04-29T00:00:00.000Z
topic:
  - qwen3
  - model-test
  - llm
  - moe
url: 'https://blog.phimes.top/posts/2025/04/29/qwen3-model-test-llm-moe'
---
# Qwen3介绍

## 前言

2025年4月29日，通义千问团队正式发布了最新一代大语言模型Qwen3。Qwen官网给出个报告也可以管窥阿里团队在前后训练上下的功夫，Qwen3除了模型本身能力的提升外，包括**思考模式的创新**、更强大的多语言支持以及增强的Agent能力。

## 更新概要

### 概要速览

![image.png](https://image.phimes.top/img/20250501133721.webp)

### 模型规格

Qwen3系列推出了多种规格的模型：

1. **大型MoE模型**：

   - Qwen3-235B-A22B：拥有2350亿总参数和220亿激活参数的llm  
   - Qwen3-30B-A3B：拥有300亿总参数和30亿激活参数的小型MoE模型

  2. **Dense模型**：

   - Qwen3-32B  
   - Qwen3-14B  
   - Qwen3-8B  
   - Qwen3-4B  
   - Qwen3-1.7B  
   - Qwen3-0.6B

  所有模型支持最长128K的上下文长度，并且能够处理119种语言和方言。

### 主要技术亮点

- 多种思考模式的无缝切换（思考模式与非思考模式）
- 更大规模的预训练数据（约36万亿个token，几乎是Qwen2.5的两倍）
- 强化的Agent和代码能力
- 优化的训练流程（四阶段后训练过程）
### Qwen3的预训练过程

Qwen3的预训练过程相比前代模型有了显著升级：

1. **数据集扩展**：Qwen3使用的数据量达到约36万亿个token，几乎是Qwen2.5（18万亿token）的两倍，覆盖了119种语言和方言。
 
2. **数据收集与增强**：  
   - 从网络和PDF文档中收集数据  
   - 使用Qwen2.5-VL从文档中提取文本，并用Qwen2.5改进提取内容的质量  
   - 利用Qwen2.5-Math和Qwen2.5-Coder这两个专家模型合成数学和代码领域的数据

3. **三阶段预训练**：

   - 第一阶段(S1)：在超过30万亿个token上进行预训练，上下文长度为4K token  
   - 第二阶段(S2)：增加知识密集型数据的比例，在额外的5万亿个token上进行预训练  
   - 第三阶段(S3)：使用高质量的长上下文数据将上下文长度扩展到32K token

凭借模型架构的改进、训练数据的增加以及更有效的训练方法，较小参数的Qwen3 Dense基础模型性能甚至可以与参数更多的Qwen2.5基础模型相当。例如，Qwen3-1.7B/4B/8B/14B/32B-Base分别与Qwen2.5-3B/7B/14B/32B/72B-Base表现相当。

### Qwen3的后训练

![](https://image.phimes.top/img/20250501093811.webp)

  为了开发能够同时具备思考推理和快速响应能力的混合模型，Qwen3团队实施了一个创新的四阶段后训练流程：

 1. **长思维链冷启动**：  
   - 使用多样化的长思维链数据对模型进行微调  
   - 覆盖数学、代码、逻辑推理和STEM问题等多种任务和领域  
   - 旨在为模型配备基本的推理能力

1. **长思维链强化学习**：  
   - 开展大规模强化学习  
   - 利用基于规则的奖励机制  
   - 增强模型的探索和深入思考能力

3. **思维模式融合**：  
   - 在包含长思维链数据和常用指令微调数据的组合数据集上进行模型微调  
   - 将非思考模式整合到思考模型中  
   - 确保推理和快速响应能力的无缝结合

4. **通用强化学习**：  
   - 在20多个通用领域的任务上应用强化学习  
   - 包括指令遵循、格式遵循和Agent能力等  
   - 进一步增强模型的通用能力并纠正不良行为

### think软开关

事实上，我觉得这才是最好用的地方的。过去工程实践中，我们通常选择Qwen2.5的32B/14B/7B等非reasoner模型。但当需要同时部署多个版本（如qwq或deepseek版的qwen）或应对特殊需求时，有限的显卡资源就成为瓶颈。现在通过`软开关`机制，可以灵活控制思考模式，显著节省显卡资源。

1. **全局设置**：通过`enable_thinking`参数控制是否启用思考模式
#### transformer启动

  ```python  
   text = tokenizer.apply_chat_template(  
       messages,  
       tokenize=False,  
       add_generation_prompt=True,  
       enable_thinking=True  # 默认为True  
   )  
   ```

#### vllm启动

```shell
vllm serve Qwen/Qwen3-8B --enable-reasoning --reasoning-parser deepseek_r1
```

2. **动态软切换**：在多轮对话中通过添加`/think`和`/no_think`指令来逐轮切换思考模式

   ```python  
   # 例如用户可以发送这样的消息来切换模式  
   user_input_2 = "请快速回答这个简单问题 /no_think"  
   user_input_3 = "现在请详细思考这个复杂问题 /think"

   ```

## model-testing

### 特定任务：

NLP任务是我最常做的，尝试一个非常简单的prompt，看看抽取任务：
#### 输入

```python
system_prompt = "我需要你用json格式为我抽取下列内容中的人物、关系并生成摘要：" 

user_prompt = """
大瓜总是引人注目，尤其是当瓜的背后充斥着复杂的故事与隐秘的联系。今天的热点新闻，依旧绕不开那颗挂在中日友好医院的瓜，只不过焦点已从肖飞的私生活转向了董小姐那条非同寻常的道路。她的故事，比肖飞的风头更加吸引眼球，且更易触动社会的神经。对于那些窥探公众人物私生活的民众来说，董小姐所走的路，似乎更加耐人寻味，仿佛是一条没有尽头的迷宫，里面充满了权力、资源与名利的博弈。 有些细心的网友，甚至开始深挖她的家族背景。董小姐的父母，并非普通的医生或教授，而是拥有非凡资源与社会地位的中坚人物。更令人震惊的是，她的爷爷，也是医学界的泰斗，是权威中的权威。细心的人发现，董小姐从2002年起便开始与母亲合作发表科研论文。如果我们依据一些网友的推测，董袭莹的出生年份是1996年，那时她才不过6岁，这样的天赋，足以让人目瞪口呆。 曾经也有网友提出疑问，董小姐的父母虽然身居高位，但与医学界似乎没有直接关系，那么董袭莹能够在医院内一路畅行无阻，凭的到底是什么呢？有消息称，她的父亲所在的国企承包了北京多家医院的基建项目，而她母亲，虽然与医学无关，却参与了若干医学课题的评审，甚至有网友曝光，董小姐的父亲所在的国企在她攻读博士的几年里，损失了巨额资金。 一切迹象表明，董小姐的父母，为了她的未来，毫不保留地投入了所有资源。从她的进步轨迹来看，董小姐确实不负重托。仅仅两年学医，她便敢亲自站上手术台；博士毕业后，她已能参与诊疗指南的编写，并名列第一作者。最令人惊叹的是，她在医学领域的规培速度，堪称火箭般的进展。更有甚者，曾有网友爆料她立志要“睡遍胸外科男医生”，直到最后怀上了肖飞的孩子。这些信息像是一颗颗重磅炸弹，不断引爆网络的热议。 回顾这段时间的风波，我们不禁想起那些曾经引发舆论风暴的二代三代。记得不久前，故宫奔驰大G事件还未平息，北极鲶鱼与周公子的金句更是充斥在社交媒体上，令无数人瞠目结舌。周公子的一些名言，似乎比以前更有分量了。然而，若是细想，这些人背后的“家世”，是他们一路走来不可忽视的资本。今天的舆论风暴，不禁让人反思起历史的教训。 也许我们可以感恩当年计划生育政策的推行，至少在这些显赫的家族中，独生子女成为了普遍现象。若是按旧时达官贵人家族那样，十个八个孩子，个个走上权力的直通车，布满了各大要津，那普通人的生存空间，恐怕早已被彻底挤压。历史上，类似的情况屡见不鲜。古时汉末魏晋之际，无论家族如何庞大，凭借察举制和九品中正制的权力筛选，家族子弟都能顺利登上权力的顶峰。 然而，这种“自我繁殖”的制度最终会带来什么后果呢？当一个社会无法给寒门子弟提供上升的通道时，必然会阻碍其社会的正常更新。正如古代的王朝，逐渐陷入了内耗与腐化，最终被历史的洪流所淹没。后来，尽管科举制逐渐兴起，但门荫制度依旧根深蒂固。即便在宋朝，号称“科举王朝”，通过科举上位的官员也仅占三分之一，其他人则通过门荫走上仕途。即使如此，这种现象总算限制了门荫出身的过多扩张，给了寒门士子一些喘息的空间。 再回到董小姐的情况。即便她背后有如此强大的家族支撑，但最终也未能突破家族所赋予的边界。她仅仅是凭借父母的托举，在医疗界过得还算顺利，周公子不过在交通行业谋得一份差事，至于北极鲶鱼，则完全可以忽略不计。如今，不仅仅是医生，许多行业的精英们都在将自己的孩子培养成接班人，无论是娱乐圈还是学术界，资源的传递几乎成了一个自然法则。 这些现象背后，无非是人们希望通过自己的社会资源来保障后代的未来，而不仅仅是财富的继承。在这个过程中，我们看到了他们所占据的特权，也看到了普通人被逐步挤压的上升空间。尽管如此，我们依然应当坚信，即使这些人有着强大的背景，仍然无法忽视一个事实——普通人的努力依然可以改变命运。而社会中真正的公平，或许会在新的力量中孕育。希望我们每个人，无论背景如何，都能不负韶华，勇敢地走出属于自己的精彩人生。
"""
```

总token是1618个

think的时间是22.5秒  
![image.png](https://image.phimes.top/img/20250501175405.webp)

#### 输出结果

从结果上看可以说准确度已经很不错了。对于一些简单任务，`system prompt`再约束一下json格式可能就更好了。

```json
{
  "人物": {
    "董小姐": {
      "身份": "中日友好医院相关人员，医学领域快速发展的代表人物",
      "背景": "父母为医学界相关人物，父亲在国企承包医院基建，母亲参与医学评审"
    },
    "肖飞": {
      "身份": "董小姐的伴侣",
      "关联": "与董小姐育有一子"
    },
    "董袭莹": {
      "身份": "董小姐母亲",
      "背景": "医学界相关人物，与董小姐合作发表科研论文"
    },
    "董某": {
      "身份": "董小姐父亲",
      "背景": "国企高管，负责医院基建项目"
    },
    "爷爷": {
      "身份": "医学界泰斗",
      "背景": "权威医学专家，家族背景深厚"
    },
    "周公子": {
      "身份": "社会热点人物，二代现象代表"
    },
    "北极鲶鱼": {
      "身份": "社会热点人物，二代现象代表"
    }
  },
  "关系": {
    "家族支持": [
      {
        "人物": "董小姐",
        "关联": "董袭莹（母亲）",
        "描述": "父母投入资源，董袭莹自2002年起与其合作发表科研论文"
      },
      {
        "人物": "董袭莹",
        "关联": "董某",
        "描述": "父母通过国企承包医院基建和医学评审工作为董小姐提供资源"
      },
      {
        "人物": "董小姐",
        "关联": "爷爷",
        "描述": "其祖父为医学泰斗，家族背景在医疗领域具有影响力"
      }
    ],
    "私人关系": [
      {
        "人物": "董小姐",
        "关联": "肖飞",
        "描述": "两人育有一子，且存在个人情感与事业发展的复杂关联"
      }
    ],
    "社会现象对比": [
      {
        "人物": "董小姐",
        "关联": "周公子、北极鲶鱼",
        "描述": "作为同类事件的案例，折射出特定群体通过家庭资源获取社会地位的现象"
      }
    ]
  },
  "摘要": {
    "核心事件": "围绕董小姐在中日友好医院引发的关注，揭示其家族背景与医疗界资源的深层关联。",
    "关键细节": "董小姐父母通过国企基建项目与医学评审角色赋予其职业优势，2002年起与母亲合作科研论文，博士阶段快速晋升临床领域。其与肖飞的子女关系进一步引发舆论争议。",
    "社会反思": "反映二代特权现象在当代社会的延续，对比历史上的家族政治权力模式，引发对社会上升通道公平性的讨论。尽管存在资源倾斜，文本仍强调普通人努力的价值。"
  }
}

```

> [!question]  
> 22.5秒的思考时间，我不能接受怎么办? no_think也能有这么好的效果么？

我在刚才原样的输入最后就加入了`no_think`测试了一下：

![image.png](https://image.phimes.top/img/20250501180624.webp)

时间上看，`no_think`模式下首字延迟只有271ms。73的token输出也达到了理想性能。

#### no_think的输出结果

基本也正确，摘要和输出上可能没有`think`模式下严谨，但是这个准确率下的快速输出。NLP任务越来越好做了。

```json
{
  "人物": [
    {
      "姓名": "董小姐",
      "身份": "中日友好医院相关人员，医学界活跃人物",
      "背景": "家族背景显赫，父母为高地位人物，祖父是医学泰斗"
    },
    {
      "姓名": "肖飞",
      "身份": "公众人物，与董小姐有私人关系",
      "背景": "私生活曾引发关注，与董小姐有子女关系"
    },
    {
      "姓名": "董袭莹",
      "身份": "董小姐可能的本名或亲属",
      "背景": "早年参与科研论文发表，博士毕业，参与诊疗指南编写，规培速度极快"
    },
    {
      "姓名": "周公子",
      "身份": "公众人物，曾引发舆论风暴",
      "背景": "出身显赫家族，涉及交通行业"
    },
    {
      "姓名": "北极鲶鱼",
      "身份": "公众人物，曾引发舆论关注",
      "背景": "可能为某某家族成员，处境相对次要"
    }
  ],
  "关系": [
    {
      "人物1": "董小姐",
      "人物2": "肖飞",
      "关系类型": "私人关系（可能是情侣或伴侣）",
      "描述": "董小姐与肖飞有子女关系，引发了公众对其私生活的关注"
    },
    {
      "人物1": "董袭莹",
      "人物2": "董小姐",
      "关系类型": "亲属关系",
      "描述": "董袭莹可能是董小姐的本名或妹妹，早年便参与科研，显示出家族扶持的痕迹"
    },
    {
      "人物1": "董小姐",
      "人物2": "其父母",
      "关系类型": "家族支持关系",
      "描述": "董小姐的父母提供资源支持，包括科研、学术发展及医疗界的影响力"
    },
    {
      "人物1": "董小姐",
      "人物2": "其祖父",
      "关系类型": "家族传承",
      "描述": "其祖父是医学泰斗，可能对董小姐的学术背景产生影响"
    },
    {
      "人物1": "周公子",
      "人物2": "其家族",
      "关系类型": "家族背景支持",
      "描述": "周公子因家族背景在交通行业获得资源与地位"
    },
    {
      "人物1": "北极鲶鱼",
      "人物2": "其家族",
      "关系类型": "家族背景支持",
      "描述": "北极鲶鱼可能是某家族成员，家族背景为其提供了资源"
    }
  ],
  "摘要": "本文围绕董小姐在中日友好医院引发的热点事件展开讨论，揭示其背后复杂的家族背景与社会资源支持。董小姐父母拥有深厚的行业资源和社会地位，其中父亲涉足医院基建，母亲参与医学评审，为她提供了极大的便利。董袭莹从2002年起便与母亲合作发表科研论文，博士毕业后迅速在医学界获得成就，引发公众对她是否依赖家族背景的猜测。文中同时提到肖飞、周公子和北极鲶鱼等公众人物，指出他们同样得益于家族资源和社会地位。文章通过对比这些‘二代’人物的现象，反思社会资源的不平等传递，以及由此引发的阶层固化问题。尽管如此，作者仍强调普通人努力的重要性，并相信社会公平终将在新力量中得到实现。"
}

```

## 从Qwen3-8B的看看区别

### 从config文件看

#### qwen3的generation_config.json

```json
{
    "architectures": [
        "Qwen3ForCausalLM"
    ],
    "attention_bias": false,
    "attention_dropout": 0,
    "bos_token_id": 151643,
    "eos_token_id": 151645,
    "head_dim": 128,
    "hidden_act": "silu",
    "hidden_size": 4096,
    "initializer_range": 0.02,
    "intermediate_size": 12288,
    "max_position_embeddings": 40960,
    "max_window_layers": 36,
    "model_type": "qwen3",
    "num_attention_heads": 32,
    "num_hidden_layers": 36,
    "num_key_value_heads": 8,
    "rms_norm_eps": 0.000001,
    "rope_scaling": null,
    "rope_theta": 1000000,
    "sliding_window": null,
    "tie_word_embeddings": false,
    "torch_dtype": "bfloat16",
    "transformers_version": "4.51.0",
    "use_cache": true,
    "use_sliding_window": false,
    "vocab_size": 151936
}
```

#### qwen2.5-7B

```json
{
    "architectures": [
        "Qwen2ForCausalLM"
    ],
    "attention_dropout": 0,
    "bos_token_id": 151643,
    "eos_token_id": 151645,
    "hidden_act": "silu",
    "hidden_size": 3584,
    "initializer_range": 0.02,
    "intermediate_size": 18944,
    "max_position_embeddings": 32768,
    "max_window_layers": 28,
    "model_type": "qwen2",
    "num_attention_heads": 28,
    "num_hidden_layers": 28,
    "num_key_value_heads": 4,
    "rms_norm_eps": 0.000001,
    "rope_theta": 1000000,
    "sliding_window": 131072,
    "tie_word_embeddings": false,
    "torch_dtype": "bfloat16",
    "transformers_version": "4.43.1",
    "use_cache": true,
    "use_sliding_window": false,
    "vocab_size": 152064
}
```

#### 对比一下看区别

![image.png](https://image.phimes.top/img/20250501162311.webp)

**蓝色**是我们看到的新的参数

- `attention_bias`: 没有了注意力偏执
- `head_dim`: 明确指定了128个注意力头
- `rope_scaling`: 动态旋旋编码应该是个预留的

**绿色**部分几个重要变化值来说
- `hidden_size`: 隐藏层更多了。可以说模型的表达能力也更强了。当然8B也比7B大。
- `max_position_embeddings`: 从32768到了40960。之前在**最长上下文**文章说过这是模型默认的最长上下文长度，其直接影响在`vllm`部署时，面对性能有限配置，可以通过vllm参数的`max_model_len`来控制`kv cache`长度来使用。
- `max_window_layers`: 这个要结合`num_hidden_layers`来看，`qwen3-8b`有36层，而**最大滑动窗口注意力层数**也是36

## 结语

我是一只很推崇`qwen`系列的模型，因为工作关系，为保证本地数据的隐私性，在这上面做微调或者构建agent都是非常常见的情况。`qwen3`的其他能力上还没有深度测试，但是8B这个级别，有40000的上下文，又能通过软开关切换思考不思考的模式，无疑又是一次提效。

但是不得不说，模型的基座能力越来越强，或许简单的`post-trainning`不再那么又意义了。进一步革了我们这种向上忽悠人的命。苦乐参半吧。
