跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 29 — Llama2 7B vs. Llama3 8B (词表、attention 及 mlp)

    视频摘要更新 2026-08-02置信度 high待阅读原始来源 ↗#深度#大模型#课程#personal-chatgpt

    本讲由真实视频转录与作者 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 当成另一套格式使用。

    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。

    • Llama 2:vocab_size = 32000
    • Llama 3:vocab_size = 128256

    输入 embedding shape 从 32000×4096 增至 128256×4096,输出 LM head 也同样扩张。课程估算 Llama 3 的这两块合计已接近 1B 参数。其收益是更丰富的多语言/代码 token 覆盖,代价是大词表矩阵显著增大。

    共同点:

    • hidden_size = 4096
    • num_heads = 32
    • head_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

    num_key_value_groups=328=4\text{num_key_value_groups}=\frac{32}{8}=4

    即 4 个 Q 头共享 1 个 KV 头。课程口述中间曾用“8 个 Q/4 个 KV”的抽象例子;实际 Llama 3 8B 配置以 32/8、4:1 为准。

    两者都使用门控 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 参数。

    Attention projection:

    q_proj: hidden_size -> num_heads * head_dim
    k_proj: hidden_size -> num_kv_heads * head_dim
    v_proj: hidden_size -> num_kv_heads * head_dim
    o_proj: hidden_size -> hidden_size

    单层 K/V 投影参数差(忽略 bias):

    2×4096×(40961024)2\times4096\times(4096-1024)

    这解释了 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 训练。
    • 参数量差异说明架构预算分配,不直接证明哪一处单独造成能力提升。
    • 前接第 21 讲:GQA 的抽象与源码机制,本讲用真实 Llama 2/3 shape 验证。
    • 前接第 25–26 讲:第 25 讲介绍 Llama 3;第 26 讲解释大词表/tokenizer 的压缩收益。
    • 后接第 30 讲:从架构对比切回 RLHF Reward Modeling 理论。
    1. 两个模型哪些全局维度相同?
    2. Llama 3 8B 的 K/V projection 为什么是 4096→1024
    3. 32 个 Q 头、8 个 KV 头对应怎样的共享比例?
    4. 为什么 BF16 8B 模型实际运行显存会超过 16GB?
    5. 8B 比 7B 多出的参数主要分布在哪些模块?
    • 滴答清单抓取时学习状态:未完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。