《大模型的文件形态:Qwen3 文件结构与计算流程深度拆解》

在这里插入图片描述

作者:吴佳浩

撰稿时间:2026-2-26

最后更新:2026-2-27

测试模型: Qwen3-8B

Qwen3 模型目录

架构说明书

config.json

网络层数 维度 注意力头数

决定模型结构

参数张量

safetensors

注意力权重 QKV

FFN 权重 gate/up/down

Embedding 和 LM Head

存储所有学习到的知识

编解码规则

tokenizer.json

vocab.json + merges.txt

文字与 token id 双向转换

BPE 分词 151936词表

生成控制

generation_config.json

temperature top_p top_k

控制输出的随机性

引言:

不知道有多少同学在使用大模型时,认真思考过一个问题:

大模型,究竟是由什么组成的?

我们每天调用接口,输入一段文字,几秒钟后得到一段看似“聪明”的回答。
它能写代码、能分析问题、能推理、能翻译,甚至能模拟人的思考方式。

但当我们把视角从“使用者”切换到“工程师”,问题就变了:

  • 模型真的“会思考”吗?
  • 那些参数到底存在哪里?
  • 为什么一个文件夹可以装下 80 亿个参数?
  • 一堆 .safetensors 文件,是如何变成智能行为的?

如果把模型下载到本地,你会发现——
它并不是一个“神秘黑盒”。

它只是:

  • 一份结构描述文件
  • 一堆巨大的矩阵权重
  • 以及一条固定的计算路径

当输入经过这条路径时,输出自然出现。

换句话说:

大模型不是魔法,它只是被高度工程化的数学。

这篇文章,我们就以 Qwen3 为例,拆开模型目录,
从文件结构、参数分布,到推理流程与数学本质,
彻底看看——

大模型,究竟是如何“被装进一个文件夹里的”。

前置说明:

本文以 Qwen3 系列模型为例,系统讲解大语言模型目录结构、参数本质与推理原理。


1.Qwen3?

Qwen3 是阿里巴巴通义实验室发布的大语言模型系列,涵盖从 0.6B 到 235B 的多个规模版本,支持文本生成、代码、数学推理等任务。(其实国内的开源狂魔他比较有代表性,我个人用的他家的系列也比较多 所以就以它举例了!)

典型型号:

  • Qwen3-0.6B
  • Qwen3-1.7B
  • Qwen3-4B
  • Qwen3-8B
  • Qwen3-14B
  • Qwen3-32B
  • Qwen3-30B-A3B(MoE 架构)
  • Qwen3-235B-A22B(MoE 架构)

2. 模型目录结构

当你从 HuggingFace 或 ModelScope 下载 Qwen3 模型后,会得到一个目录,结构如下:

Qwen3-8B/
├── config.json
├── generation_config.json
├── tokenizer.json
├── tokenizer_config.json
├── vocab.json
├── merges.txt
├── model.safetensors.index.json
├── model-00001-of-00005.safetensors   (4 GB)
├── model-00002-of-00005.safetensors   (3.99 GB)
├── model-00003-of-00005.safetensors   (3.96 GB)
├── model-00004-of-00005.safetensors   (3.19 GB)
├── model-00005-of-00005.safetensors   (1.24 GB)
├── README.md
└── LICENSE

这些文件从功能上可以归为四类:

Qwen3-8B 模型目录

架构说明书
config.json

参数张量文件
*.safetensors

输入编码规则
tokenizer.*

生成控制参数
generation_config.json

隐藏层维度: 4096
层数: 32
注意力头数: 32

权重矩阵
约 16GB(float16)

文字 → token id
token id → 文字

temperature
top_p / top_k
max_new_tokens


3. 核心文件详解

3.1 config.json — 架构说明书

这个文件告诉框架(如 Transformers)如何把参数矩阵拼装成完整的神经网络。

{
  "model_type": "qwen3",
  "hidden_size": 4096,
  "num_hidden_layers": 32,
  "num_attention_heads": 32,
  "num_key_value_heads": 8,
  "intermediate_size": 22016,
  "max_position_embeddings": 32768,
  "vocab_size": 151936,
  "rms_norm_eps": 1e-06,
  "rope_theta": 1000000.0,
  "torch_dtype": "bfloat16"
}

关键字段解读:

  • hidden_size: 每个 token 经过模型后的向量维度,8B 模型为 4096
  • num_hidden_layers: Transformer 层数,8B 模型为 32 层
  • num_attention_heads: 多头注意力的头数
  • num_key_value_heads: GQA(分组查询注意力)中 KV 头数,8 表示用了 GQA 压缩
  • vocab_size: 词表大小,Qwen3 约 15 万词
  • rope_theta: RoPE 位置编码的基础频率

没有 config.json,你只有一堆无法解读的数字矩阵。


3.2 safetensors — 参数张量集合

这是模型的"真正内容",存储了所有可学习参数的数值。

什么是 Tensor(张量)?

0维

1维

2维

N维

标量 Scalar

3.14

向量 Vector

[1, 2, 3, 4]

矩阵 Matrix

4096 x 4096

张量 Tensor

任意维度

在 Qwen3 中,safetensors 存储的主要参数类型:

safetensors 文件

Embedding 层
token嵌入矩阵
151936 x 4096

Attention 层 x32

MLP 层 x32

LayerNorm 参数

LM Head
输出词表映射

q_proj.weight
[4096 x 4096]

k_proj.weight
[1024 x 4096](GQA)

v_proj.weight
[1024 x 4096](GQA)

o_proj.weight
[4096 x 4096]

gate_proj.weight
[22016 x 4096]

up_proj.weight
[22016 x 4096]

down_proj.weight
[4096 x 22016]

为什么文件这么大?

以 Qwen3-8B 为例:

参数量:约 80 亿(8B)
每个参数精度:bfloat16 = 2 字节
磁盘大小:80亿 × 2 字节 ≈ 16 GB

文件分片原因:单个文件超过 4-5GB 时,HuggingFace 会自动分片为多个 .safetensors 文件,由 model.safetensors.index.json 记录每个参数在哪个分片里。

safetensors vs pytorch_model.bin
pytorch_model.bin   →  Python pickle 格式,存在安全风险,加载慢
safetensors         →  专为 ML 设计,内存映射,加载快,安全

Qwen3 默认使用 safetensors 格式。


3.3 Tokenizer — 语言编解码规则

Tokenizer 不是模型参数,它是一套独立的文字与 token id 双向转换规则。

Detokenizer 模型 Tokenizer 用户输入 Detokenizer 模型 Tokenizer 用户输入 "Qwen3很强" [14364, 19, 17, 42, 185, 209, 16714] [36894, 12, 88, 209, ...] "Qwen3确实非常出色"

Qwen3 使用的是基于 BPE(字节对编码)的分词方案,词表大小约 151,936。

主要文件:

  • tokenizer.json:完整的词表和合并规则,核心文件
  • vocab.json:token 到 id 的映射表
  • merges.txt:BPE 合并规则
  • tokenizer_config.json:tokenizer 类型、特殊配置及特殊 token 定义(如 <|im_start|><|im_end|>,Qwen3 将其合并在此文件中)

Qwen3 的 ChatML 格式模板:

<|im_start|>system
你是一个有帮助的助手。<|im_end|>
<|im_start|>user
你好<|im_end|>
<|im_start|>assistant
你好!有什么可以帮你的?<|im_end|>

3.4 generation_config.json — 生成控制

这个文件控制模型如何"采样"输出:

{
  "temperature": 0.7,
  "top_p": 0.8,
  "top_k": 20,
  "repetition_penalty": 1.05,
  "max_new_tokens": 8192
}
  • temperature:值越低输出越确定,值越高越随机;0 表示完全贪心解码
  • top_p:核采样,只从累积概率达到 p 的 token 中采样
  • top_k:只从概率最高的 k 个 token 中采样
  • repetition_penalty:惩罚重复出现的 token

Qwen3 支持 Thinking 模式(类似 o1),可通过 enable_thinking=True 开启,此时模型会在 <think>...</think> 标签内输出推理过程。


4. 模型推理的完整流程

贪心/top-k/top-p

未结束

用户输入文本

Tokenizer 编码

token id 序列\n[1, 9668, 11, ...]

Embedding 层\nid -> 4096维向量

第1层 Transformer Block

第2层 Transformer Block

...

第32层 Transformer Block

RMS Norm 归一化

LM Head 线性层\n4096 -> 151936

Softmax 得到概率分布

采样策略

选出下一个 token

Detokenizer 解码

输出文字

每个 Transformer Block 的内部结构:

输入 x\nshape: seq_len x 4096

RMS Norm

Multi-Head Attention\nGQA + RoPE

残差连接\nx + Attn

RMS Norm

SwiGLU FFN\n4096 -> 22016 -> 4096

残差连接\n+ FFN

输出\nshape: seq_len x 4096


5. Qwen3 的关键技术特性

5.1 GQA(分组查询注意力)

标准 MHA 与 GQA 的对比:

GQA(Qwen3方式)

4个Q共享1个KV

32个Q头

8个K头

8个V头

标准 MHA(旧方式)

32个Q头

32个K头

32个V头

GQA 的好处:显著减少 KV Cache 内存占用,推理速度更快。


5.2 RoPE(旋转位置编码)

Qwen3 使用 RoPE 而非传统的绝对位置编码:

传统位置编码:position 1 → 固定向量加到 embedding 上
RoPE:通过旋转矩阵编码相对位置关系,天然支持长上下文外推

Qwen3 的 rope_theta = 1,000,000,支持最长 32,768 token 上下文(部分版本支持 131,072)。


5.3 MoE 架构(Qwen3-30B-A3B / 235B-A22B)

混合专家模型(Mixture of Experts):

激活 3B 参数

激活 3B 参数

跳过

输入 token

Router 路由器

Expert 1

Expert 2

Expert 3 ... N

输出

Qwen3-235B-A22B 表示:总参数 235B,但每次推理只激活 22B,计算量大幅降低,推理效率接近 22B 模型。


6. 参数规模与资源需求

不同版本 Qwen3 的资源对照:

Qwen3-0.6B   →  约 1.2 GB   →  CPU 或入门 GPU
Qwen3-1.7B   →  约 3.4 GB   →  4GB 显存 GPU
Qwen3-4B     →  约 8 GB     →  8GB 显存 GPU
Qwen3-8B     →  约 16 GB    →  24GB 显存 GPU(如 RTX 3090)
Qwen3-14B    →  约 28 GB    →  2x A100 40G 或量化后单卡
Qwen3-32B    →  约 64 GB    →  4x A100 40G
Qwen3-235B   →  约 470 GB   →  多节点推理 / 量化压缩

计算公式:

磁盘大小(GB)= 参数量(B)× 精度字节数
  bfloat16:每参数 2 字节 → 8B × 2 = 16 GB
  int8:    每参数 1 字节 → 8B × 1 = 8 GB
  int4:    每参数 0.5字节 → 8B × 0.5 = 4 GB

7. 从数学角度的本质

整个推理过程可以用一个公式概括:

y = f(x; θ)

其中:

  • x:输入的 token id 序列
  • θ:所有参数矩阵(存储在 safetensors 中)
  • f:网络结构(由 config.json 定义)
  • y:输出的概率分布

参数 θ 在推理阶段是完全冻结的,不会更新。所有的"智能"都已经被编码在这些数值中,通过训练阶段的梯度下降学习而来。


8. 总结

Qwen3 模型目录

架构说明书

config.json

网络层数 维度 注意力头数

决定模型结构

参数张量

safetensors

注意力权重 QKV

FFN 权重 gate/up/down

Embedding 和 LM Head

存储所有学习到的知识

编解码规则

tokenizer.json

vocab.json + merges.txt

文字与 token id 双向转换

BPE 分词 151936词表

生成控制

generation_config.json

temperature top_p top_k

控制输出的随机性

一句话总结:

模型目录 = 架构说明书(config) + 神经网络参数张量集合(safetensors) + 输入编解码规则(tokenizer) + 生成采样配置(generation_config)

模型的"智能"本质上是数十亿个参数矩阵中数值的精确组合,通过海量数据训练后冻结在 safetensors 文件里,推理时按照 config 定义的结构依次执行矩阵乘法,最终产生输出。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐