简介

本文是LLM微调金融大模型系列第四篇上部分,详细解析了大模型命名规范(以Qwen3为例),拆解了模型结构参数计算方法,包括嵌入层、注意力层和前馈网络的参数量计算。文章通过实例展示了如何计算4B模型的总参数量和各组件参数分布,为理解后续LoRA参数高效微调技术奠定基础,是金融大模型微调的必备知识储备。


先从模型的命名讲起

拿源神举例。

Qwen/Qwen3-4B-Instruct-2507 这个名称中就包含以下几个重要的内容:

  • 1、 Qwen (开发者/组织),这里是代表阿里巴巴的千问(Qwen)团队,其他比较常见的组织如下:
  • Meta-Llama (Meta AI)
  • Google (谷歌,如 Google/Gemma)
  • MistralAI (法国的一家AI初创公司)
  • 2、Qwen3 这个是模型的主要版号,一般让开发者关注这次是否是巨大更新,比如从 Qwen2.5 到 Qwen3 就比从 deepseek3.1 到 deepseek3.2 值得花更多的精力去关注。
  • 3、4B 这个是模型中最应该关注的指标,简单来说它代表了模型包含的参数量,之后会讲,这里不展开。
  • 关于参数量的这个位置,还透露出这个模型的架构。比如这个模型就属于Dense架构,当你提问的时候他会使用全部的参数进行回答。
  • 还有一种模型架构是MOE(Mixture-of-Experts)。模型内部由多个“专家子网络”组成。在进行计算时,一个“路由器”会根据输入内容,只选择性地激活一小部分(通常是2个)最相关的“专家”来参与计算。专家还分共享专家和独立专家,这里不展开。MOE 中的命名方式是 235B-A22B前边表示总参数是235B,后表表示每次任务激活的(Active)是22B。还有一种命名方式是8x7B这个就是告诉你每个专家是7B、一共有8个专家。
  • 4、 2507 25年7月。
  • 5、 Instruct 这个表示模型训练的程度。Instruction(指令)或有时也称 Instruct,意味着这个模型是指令微调过的。它被专门训练用来理解和遵循用户的指令,非常适合用于对话、问答、内容创作等交互式任务。
  • Base / Pretrained (基础/预训练模型): 例如 Qwen/Qwen3-4B-Base。这是最原始的模型版本,它在海量文本数据上完成了预训练,学会了语言的规律和世界知识,但不擅长直接与人对话或遵循指令。
  • Chat (对话模型): 这是 Instruction 的一个更具体的子类别,特指为多轮对话场景优化的模型。
  • Code (代码模型): 专门为编程任务(如代码生成、补全、解释、Debug)优化的模型。
  • 6、还有一些特定的模型比如VL 这里不再展开。

接下来我们打开这个模型的说明页,会在Model Overview中看到以下内容:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
Model Overview
Qwen3-4B-Instruct-2507 has the following features:
Type: Causal Language Models
Training Stage: Pretraining & Post-training
Number of Parameters: 4.0B
Number of Paramaters (Non-Embedding): 3.6B
Number of Layers: 36
Number of Attention Heads (GQA): 32 for Q and 8 for KV
Context Length: 262,144 natively.

然后再对这里的做逐个解释:

  • Causal Language Models 因果模型,表示根据前边的词预测后边的词,与之对应的是 BERT为代表的 Masked Language Models, 和 T5 (Google) 为代表的序列到序列模型 (Sequence-to-Sequence Models, Seq2Seq)。后两者在我之前讲为什么现代模型都是 Encoder-Only 中有介绍。简单回顾一下那篇文章的结论:因为因果模型的特殊性导致了 encoder 架构在LLM中不会明显加分。

    学习|假设面试官问:为什么当前LLM的主流架构都是Decoder-only?

  • Pretraining & Post-training 这个表示模型经过了指令跟随的微调。

  • 4.0B & 3.6B 4.0B (40亿)是模型的总参数量。3.6B (36亿)是非嵌入参数量。指的是模型的核心计算部分——也就是所有Transformer层(包含自注意力和前馈网络)的参数总和。4.0B - 3.6B = 0.4B (4亿)。这4亿参数就是嵌入层 (Embedding Layers) 的参数,负责将文字和模型内部的向量进行转换。

  • Number of Layers: 36模型的主体是由36层完全相同的Transformer Block堆叠而成的。层数越多,通常意味着模型能进行更深层次的思考和抽象,处理更复杂的逻辑。

  • Number of Attention Heads (GQA): 32 for Q and 8 for KV分组查询注意力 (Grouped-Query Attention, GQA)。

  • Context Length: 262,144 natively. 这个表示模型在优化前,原生(Natively)支持的文本长度。

  • 这里有个细节可能是后续产品经理需要考虑的内容。
  • 这个支持的最大长度构成并不是一般用户理解的:模型能一次性理解的最大长度。这个长度的计算应该是:上下文出现的所有Tokens。大概的计算公式包括: 历史对话(用户输入+模型输出) + 当前用户输入 + 检索的文档 + CoT推理过程 + 最终模型回复。然后上述的所有Token计算的都不仅仅是字数,而是字 + 字符(标点符号、空格、换行、模型训练的特殊字符)。
  • 因此这个长度可以直接读懂一本书,但是几轮交互下来模型的性能就会急剧下降,并不是厂家在这个数据计算上撒谎了,而是统计口径与我们一般的认知不同
  • Natively 表示原生,这里就代表可以支持后续工程拓展长度。

关于GQA,这里插入一张CS336的图,不展开讲了:

查看模型结构和计算参数

为了更加方便的我们去计算模型的参数,这里我们加载这个4B的模型,然后打印一下网络结构(不放代码了,请去公众号后台获取github链接自取),这里直接放一下网络结果:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
Qwen3ForCausalLM(
(model): Qwen3Model(
(embed_tokens): Embedding(151936, 2560)
(layers): ModuleList(
(0-35): 36 x Qwen3DecoderLayer(
(self_attn): Qwen3Attention(
(q_proj): Linear(in_features=2560, out_features=4096, bias=False)
(k_proj): Linear(in_features=2560, out_features=1024, bias=False)
(v_proj): Linear(in_features=2560, out_features=1024, bias=False)
(o_proj): Linear(in_features=4096, out_features=2560, bias=False)
(q_norm): Qwen3RMSNorm((128,), eps=1e-06)
(k_norm): Qwen3RMSNorm((128,), eps=1e-06)
)
(mlp): Qwen3MLP(
(gate_proj): Linear(in_features=2560, out_features=9728, bias=False)
(up_proj): Linear(in_features=2560, out_features=9728, bias=False)
(down_proj): Linear(in_features=9728, out_features=2560, bias=False)
(act_fn): SiLU()
)
(input_layernorm): Qwen3RMSNorm((2560,), eps=1e-06)
(post_attention_layernorm): Qwen3RMSNorm((2560,), eps=1e-06)
)
)
(norm): Qwen3RMSNorm((2560,), eps=1e-06)
(rotary_emb): Qwen3RotaryEmbedding()
)
(lm_head): Linear(in_features=2560, out_features=151936, bias=False)
)

首先,RMSNorm 和 RotaryEmbedding 中没有或者很少有可训练参数,因此在计算中忽略这两层。但是有两个有趣的事情:

  • 1、RotaryEmbedding 就是位置编码层,大模型靠这个来记住长文的上下层,而促进LLM上下文长度飞跃的技术是RoPE,是一个中国人提出并被几乎所有现代LLM采用,CS336也介绍了这个技术,这个人就是苏神(膜)
  • 2、在GPT3 中大家经常使用的是LayerNorm,但是后来发现它会有内存读取瓶颈,因此后续的大模型结构中一般会使用RMSNorm,具体的讨论还是去查看CS336,这里贴一张图。

然后网络中只剩3 个结构了:

  • 1、embed_tokenslm_head 一个是将 token 使用 查找表算法转为向量、和反之的层。所以你会发现这两个层是转置的关系。正因为这种配套的关系,在实际中常常使用权重绑定的方法,这两个层共用一套权重。
  • 这里提一下,Embedding 层处理的是经过 BEP 之后的 Tokens。
  • 所以个结构的参数量是:
  • 这与模型介绍页的0.4B 一致
  • 2、Qwen3Attention 对应 Multi-Head Attention 模块 , Qwen3MLP 则是 FFN,这里只是模块定义,不代表真正的数据流,Qwen3 应该是pre-Norm架构的。关于 pre-Norm 和 post-Norm 参考下图:

我们来计算 (self_attn): Qwen3Attention 模块中所有 Linear 层的参数。

q_proj: Linear(in_features=2560, out_features=4096)

计算: 2560 × 4096 = 10,485,760

k_proj: Linear(in_features=2560, out_features=1024)

计算: 2560 × 1024 = 2,621,440

v_proj: Linear(in_features=2560, out_features=1024)

计算: 2560 × 1024 = 2,621,440

o_proj: Linear(in_features=4096, out_features=2560)

计算: 4096 × 2560 = 10,485,760

多头注意力部分总参数量: 10,485,760 + 2,621,440 + 2,621,440 + 10,485,760 = 26,214,400 (即 2.61M)

接下来,我们计算 前馈神经网络(mlp): Qwen3MLP 模块中所有 Linear 层的参数。

gate_proj: Linear(in_features=2560, out_features=9728)

计算: 2560 × 9728 = 24,903,680

up_proj: Linear(in_features=2560, out_features=9728)

计算: 2560 × 9728 = 24,903,680

down_proj: Linear(in_features=9728, out_features=2560)

计算: 9728 × 2560 = 24,903,680

前馈网络部分总参数量: 24,903,680 + 24,903,680 + 24,903,680 = 74,711,040 (即 7.47M)

一共有36层,因此一共就是36 ×(2.61 + 7.47) = 3.62B

再加上最初计算的 Embedding的 0.39B,最后是4.01B,这个与我我们代码跑出来的结果:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
--- 参数量统计 ---
模型总参数量: 4.022B
可训练参数量: 4.022B
--- 抽样查看具体参数 ---
第0层Q投影矩阵的权重形状: torch.Size([4096, 2560])
矩阵的前2行前5列:
tensor([[-0.0014, -0.0125,  0.0090,  0.0039,  0.0019],
[ 0.0293, -0.0003, -0.0099, -0.0055,  0.0114]], device='cuda:0',
dtype=torch.bfloat16, grad_fn=<SliceBackward0>)

也与模型介绍页的内容是一致的。

这里还有一个需要注意的内容,这几个层的参数也是LoRA技术微调的部分,LoRA主要就是作用于self-Attention 和 FFN,这个后续会展开讲,这里贴一个最常用的LoRA配置感受一下:

ounter(lineounter(line
lora_target_modules: List[str] = [
'q_proj', 'k_proj', 'v_proj', 'o_proj', 'up_proj', 'down_proj', 'gate_proj']

如何学习AI大模型?

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

请添加图片描述
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

请添加图片描述

大模型全套视频教程

请添加图片描述

200本大模型PDF书籍

请添加图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

请添加图片描述

大模型产品经理资源合集

请添加图片描述

大模型项目实战合集

请添加图片描述

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

更多推荐