☰
拆解p-MoD-LLaVA-v1.5-7B模型权重:734个张量与safetensors分片结构逐个讲
2026/10/23 18:58:17 网站建设 项目流程
  • 人工智能
  • 大模型
  • 多模态

【免费下载链接】p-MoD-LLaVA-v1.5-7B

项目地址:https://ai.gitcode.com/MCG-NJU/p-MoD-LLaVA-v1.5-7B
点击查看免费下载

p-MoD-LLaVA-v1.5-7B 是一个采用 Mixture-of-Depths(MoD,深度混合)架构的多模态大语言模型官方权重包。本文将带你逐个拆解它的 734 个张量、3 个 safetensors 分片以及索引文件model.safetensors.index.json的结构,帮助新手快速看懂"一个多模态模型权重包到底装了什么"。

📦 仓库文件一览:权重包由哪些文件组成

这个仓库是一个"纯模型权重包",没有训练代码,文件分工非常清晰:

文件作用
model-00001-of-00003.safetensors权重分片 1:词嵌入 + LLM 前 12 层
model-00002-of-00003.safetensors权重分片 2:LLM 中间层
model-00003-of-00003.safetensors权重分片 3:LLM 后段 + 视觉塔 + 投影层
model.safetensors.index.json分片索引:734 个张量 → 分片文件的映射表
config.json模型结构配置,含全部 MoD 专属参数
tokenizer.model / tokenizer_config.json分词器本体与配置(SentencePiece 格式)
generation_config.json默认生成参数(temperature 0.9、top_p 0.6 等)
README.md模型说明:基于 Vicuna-7B-v1.5 + CLIP ViT-L/14@336

🗺️ 总览:734 个张量的完整分类

对weight_map逐一归类后,734 个张量正好可以拆成 6 大块,一个不多一个不少:

权重区块张量数说明
词嵌入model.embed_tokens.weight1词表大小 32000
LLM 普通解码层(第 0~7 层)728 层 × 9 个张量
LLM MoD 解码层(第 8~31 层)26424 层 × 9 个张量 + 48 个 router 张量
视觉塔(CLIP ViT)39124 层 × 16 个张量 + 3 个嵌入 + 4 个 LayerNorm
多模态投影model.mm_projector4两层 MLP(mlp2x_gelu)的 weight + bias
输出头:lm_head.weight+model.norm.weight2语言模型输出投影 + 最终归一化
合计734总参数量约 13.16 GiB(bfloat16)

其中metadata.total_size记录的总字节数为14,126,002,224(约 14.1 GB),见 model.safetensors.index.json。

🔍 索引文件 model.safetensors.index.json 结构讲解

多分片模型的核心在于这份索引 JSON,它只有两部分(见 model.safetensors.index.json):

{ "metadata": { "total_size": 14126002224 }, "weight_map": { "lm_head.weight": "model-00003-of-00003.safetensors", "model.embed_tokens.weight": "model-00001-of-00003.safetensors" } }
  • metadata.total_size:所有张量字节数总和,可用于下载完整性校验;
  • weight_map:以"张量全名"为键、"所在分片文件名"为值,共 734 条映射。加载器就是靠它决定每个张量该去哪个分片文件里读取。

🧩 三大权重区逐个拆解

1️⃣ LLM 主干:32 层,前 8 层"普通"、后 24 层"MoD"

这是本模型最有特色的地方。从张量命名就能直接看出来:

普通层(第 0~7 层),每层 9 个张量,是标准 LLaMA 结构:

model.layers.0.input_layernorm.weight model.layers.0.self_attn.q_proj.weight # Q/K/V/O 四个投影 model.layers.0.self_attn.k_proj.weight model.layers.0.self_attn.v_proj.weight model.layers.0.self_attn.o_proj.weight model.layers.0.mlp.gate_proj.weight # SwiGLU 的 gate/up/down model.layers.0.mlp.up_proj.weight model.layers.0.mlp.down_proj.weight model.layers.0.post_attention_layernorm.weight

MoD 层(第 8~31 层),计算部分被包在decoder_layer子模块里,并且每层多出 2 个 router 张量(如 model.safetensors.index.json):

model.layers.10.decoder_layer.self_attn.q_proj.weight # 共 9 个,与普通层相同 model.layers.10.router.router.weight # MoD 路由器:决定视觉 token 是否跳过本层 model.layers.10.router.router.bias

也就是说,24 个 MoD 层 = 24 × 11 =264 个张量,其中 48 个就是 router 的权重和偏置。这正是 p-MoD 论文里"渐进式比例衰减"(Progressive Ratio Decay)的落点:越深的层,路由给视觉 token 的比例越低,从而把算力集中到文本 token 上。

2️⃣ 视觉塔:完整嵌入 CLIP,391 个张量

张量名前缀model.vision_tower.vision_tower.vision_model很长,但结构很规整:

  • 24 个编码器层(encoder.layers.0~23),每层 16 个张量:注意力 4 组投影(Q/K/V/out,各含 weight + bias)、MLP 2 个全连接(fc1/fc2,各含 weight + bias)、2 个 LayerNorm(layer_norm1/2,各含 weight + bias);
  • 3 个嵌入张量:patch_embedding.weight(图像切块投影)、position_embedding.weight、class_embedding;
  • 4 个归一化张量:pre_layernorm与post_layernorm的 weight + bias。

对应 config.json 中的mm_vision_tower为openai/clip-vit-large-patch14-336,且 config.json 中unfreeze_mm_vision_tower: true说明视觉塔在训练中被联合微调过。

3️⃣ 多模态投影层:只有 4 个张量

model.mm_projector是一个两层 MLP(config.json 中mm_projector_type: mlp2x_gelu),负责把 CLIP 输出的 1024 维视觉特征映射到 4096 维的 LLM 隐空间,全部家当就是:

model.mm_projector.0.weight / model.mm_projector.0.bias # 第 1 层 model.mm_projector.2.weight / model.mm_projector.2.bias # 第 2 层

📐 三个 safetensors 分片各自装了什么

按weight_map统计,三个分片的张量分布如下:

分片张量数主要内容
model-00001-of-00003.safetensors111词嵌入 + LLM 第 0~11 层
model-00002-of-00003.safetensors133LLM 第 11~23 层
model-00003-of-00003.safetensors490LLM 第 23~31 层 + 全部 391 个视觉塔张量 + 投影层 +lm_head+ 最终 norm

两个值得注意的细节:

  1. 第 11 层和第 23 层是"跨片"的——同一个层的不同张量被拆到了相邻两个分片里(例如第 11 层的k_proj在分片 1,down_proj却在分片 2)。这说明分片是按"文件大小顺序"切的,而不是按层对齐的。
  2. 分片 3 最大,因为视觉塔(CLIP ViT-L 约 3.5 亿参数)+ 投影层 + 输出头都放在了一起。

⚙️ 从 config.json 读懂 MoD 关键参数

MoD 的全部"超开关"都写在 config.json 里:

参数值含义
mod_target_layersshiftedcos_decay_0.85_0.15路由比例随深度按余弦曲线从 0.85 衰减到 0.15,即"渐进式比例衰减"
mod_target_layer_indices[8, 9, ..., 31]只有第 8~31 层启用 MoD 路由,共 24 层
mod_target_token_typevision_all路由决策只针对视觉 token
mod_weight_normtanh_0.2_1跳过层的输出用 tanh 归一化(缩放范围 0.2~1)
mod_router_factor0.5路由器打分系数
mod_bias_enabled / mod_special_inittrue/true启用 router bias,并做特殊初始化

其余是标准 7B 配置:hidden_size 4096、num_hidden_layers 32、num_attention_heads 32、vocab_size 32000,精度为 bfloat16,架构名为 PmodLlavaLlamaForCausalLM。

💡 新手上手:下载、校验与加载

  1. 下载:git clone https://gitcode.com/MCG-NJU/p-MoD-LLaVA-v1.5-7B(约 14.1 GB),或从模型平台直接下载同名权重文件;
  2. 校验:加载完成后,总字节数应等于metadata.total_size(14,126,002,224),张量总数应为 734,缺一个都说明文件不完整;
  3. 加载:用transformers的from_pretrained指向模型目录即可,加载器会自动读取 model.safetensors.index.json 并按weight_map分片取数,无需手动合并分片;
  4. 生成参数:默认 generation_config.json 已给出 temperature 0.9、top_p 0.6、max_length 4096,推理时可直接沿用。

📌 总结:一张表记住 734 个张量

区块张量数记住一句话
词嵌入 / 输出头 / 最终 norm3一进一出加一次收尾
LLM 普通层 0~772标准 LLaMA 结构,每层 9 张量
LLM MoD 层 8~31264每层多 2 个 router 张量,共 48 个
CLIP 视觉塔39124 层 × 16 + 嵌入与归一化
多模态投影4两层小 MLP

看懂了这个"目录结构",你再去拆解任何多分片 safetensors 模型包,都只需三步:读config.json看架构 → 读model.safetensors.index.json数张量 → 按前缀分区理解职责。

  • 人工智能
  • 大模型
  • 多模态

【免费下载链接】p-MoD-LLaVA-v1.5-7B

项目地址:https://ai.gitcode.com/MCG-NJU/p-MoD-LLaVA-v1.5-7B
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询