资料摘要:personal chatgpt 29 — Llama2 7B vs. Llama3 8B (词表、attention 及 mlp)
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
两者都为 32 层、hidden size 4096、32 个 Q 头、head dim 128 的 decoder-only Transformer,骨架基本一致;约 1.29B 参数差主要来自三处再分配:Llama 3 词表从 32K 增至 128,256,使输入 embedding 与 LM head 大增;MLP intermediate size 从 11,008 增至 14,336;attention 则通过 8 个 KV 头的 GQA,把 K/V projection 从 4096 输出降到 1024,反向节省参数和 KV Cache。
1. Meta 原始权重与 Hugging Face 权重
Section titled “1. Meta 原始权重与 Hugging Face 权重”课程先比较两种发布形式:
- Meta 原始版:构造官方
Transformer,再load_state_dict加载.pth。 - Hugging Face 版:
AutoModelForCausalLM.from_pretrained读取分片权重及*.index.json映射。
两者参数含义接近,但 key 命名、分片和加载入口不同,不能直接把某套 state dict 当成另一套格式使用。
2. 真实加载与参数量
Section titled “2. 真实加载与参数量”notebook:
llama2 = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-2-7b-hf", torch_dtype=torch.bfloat16, device_map="auto",)llama3 = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3-8B", torch_dtype=torch.bfloat16, device_map="auto",)真实统计:
- Llama 2 7B:
6,738,415,616 - Llama 3 8B:
8,030,261,248
BF16 权重粗略为每参数 2 字节,因此仅模型权重约 13.5GB 与 16.1GB;课程口头近似为 14GB 与 16GB。device_map="auto" 把层分到两张 4090。
3. 词表与 embedding / LM head
Section titled “3. 词表与 embedding / LM head”- Llama 2:
vocab_size = 32000 - Llama 3:
vocab_size = 128256
输入 embedding shape 从 32000×4096 增至 128256×4096,输出 LM head 也同样扩张。课程估算 Llama 3 的这两块合计已接近 1B 参数。其收益是更丰富的多语言/代码 token 覆盖,代价是大词表矩阵显著增大。
4. Attention:MHA 到 GQA
Section titled “4. Attention:MHA 到 GQA”共同点:
hidden_size = 4096num_heads = 32head_dim = 128- Q/O projection 仍为
4096→4096
差异:
- Llama 2 7B:
num_key_value_heads = 32,K/V 各为4096→4096。 - Llama 3 8B:
num_key_value_heads = 8,K/V 各为4096→1024。
即 4 个 Q 头共享 1 个 KV 头。课程口述中间曾用“8 个 Q/4 个 KV”的抽象例子;实际 Llama 3 8B 配置以 32/8、4:1 为准。
5. MLP:增加 intermediate size
Section titled “5. MLP:增加 intermediate size”两者都使用门控 FFN:
down_proj = self.down_proj( self.act_fn(self.gate_proj(x)) * self.up_proj(x))对应 Meta 代码:
self.w2(F.silu(self.w1(x)) * self.w3(x))- Llama 2:
11008 / 4096 = 2.6875 - Llama 3:
14336 / 4096 = 3.5
Llama 3 把 GQA 节省的一部分参数预算转向更大的 MLP,同时大词表又显著增加 embedding/output 参数。
公式 / 代码要点
Section titled “公式 / 代码要点”Attention projection:
q_proj: hidden_size -> num_heads * head_dimk_proj: hidden_size -> num_kv_heads * head_dimv_proj: hidden_size -> num_kv_heads * head_dimo_proj: hidden_size -> hidden_size单层 K/V 投影参数差(忽略 bias):
这解释了 Llama 3 为何在扩大词表和 MLP 的同时,attention 参数仍可能更小。
00:42:区分 Meta 与 Hugging Face 权重格式。02:02:Meta 版自动使用 BF16 的加载路径。05:32:用 BF16、device_map=auto加载模型。05:55:说明自动模型并行。07:27:统计真实参数量 6.7B 与 8.03B。08:00:词表 32K 与 128,256。08:44:embedding + LM head 接近 1B 参数。09:08:MLP intermediate size 11,008 vs 14,336。09:40:K/V projection 4096 vs 1024。11:18:回顾 GQA 的质量/效率折中。13:00:确认层数、hidden size、head dim 相同。15:32:确认 Llama 3 32/8 = 4:1 分组。16:00:进入 gate/up/down MLP 前向。18:12:总结三类参数变化。
- 两个模型均为 gated repo,需要 Hugging Face 授权、token 和足够磁盘/网络。
- notebook 输出警告:旧版 RTX 4000 驱动存在 P2P 问题,可能影响
device_map=auto多 GPU 推理;该环境不能作为理想吞吐基准。 - BF16 的“参数数×2 字节”仅估算权重;运行还需要 allocator、激活、KV Cache 和框架开销。
device_map=auto是推理分层,不等于高效 tensor parallel 训练。- 参数量差异说明架构预算分配,不直接证明哪一处单独造成能力提升。
与前后讲关系
Section titled “与前后讲关系”- 前接第 21 讲:GQA 的抽象与源码机制,本讲用真实 Llama 2/3 shape 验证。
- 前接第 25–26 讲:第 25 讲介绍 Llama 3;第 26 讲解释大词表/tokenizer 的压缩收益。
- 后接第 30 讲:从架构对比切回 RLHF Reward Modeling 理论。
- 两个模型哪些全局维度相同?
- Llama 3 8B 的 K/V projection 为什么是
4096→1024? - 32 个 Q 头、8 个 KV 头对应怎样的共享比例?
- 为什么 BF16 8B 模型实际运行显存会超过 16GB?
- 8B 比 7B 多出的参数主要分布在哪些模块?
- 视频:Llama2 7B vs. Llama3 8B (词表、attention 及 mlp)
- 转录:🔒 personal chatgpt 29 视频转录
- 课件 / 代码:🔒 llama2_7b_llama3_8b.ipynb
- 滴答清单抓取时学习状态:未完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。