资讯动态

InternVL3.5-2B-Pretrained架构深度拆解:ViT-MLP-LLM范式与Pixel Shuffle特征压缩原理

发布时间:2026/10/18 5:02:20 来源:尧图企业网站定制
【免费下载链接】InternVL3_5-2B-Pretrained项目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-2B-Pretrained点击查看免费下载InternVL3.5-2B-Pretrained 是上海 AI Lab 开源的 2.3B 参数多模态大模型预训练底座采用经典的ViT-MLP-LLM三段式架构InternViT-300M 视觉编码器 两层 MLP 适配器 Qwen3-1.7B 语言模型。它的最大技术亮点是Pixel Shuffle 特征压缩——在不增加任何可学习参数的情况下把每个图像切片的 1024 个视觉 token 压缩到 256 个大幅降低 LLM 侧的计算开销。本文带你从配置文件到源码逐层拆解这套架构。快速上手30秒认识这个模型在深入架构前先用一张表认清这个模型的家底组件型号参数量关键规格视觉编码器 ViTInternViT-300M-448px0.3B24 层hidden 1024patch 14输入 448×448视觉压缩Pixel Shuffle MLP极少1024 token → 256 token语言模型 LLMQwen3-1.7B2.0B28 层hidden 204840K 上下文合计—2.3Bbf16 精度单卡 A100 可跑⚠️ 注意Pretrained后缀表示该权重只完成了CPT多模态持续预训练阶段尚未做 SFT 指令对齐。想直接对话请选同系列的Instruct版本本仓库适合用于理解架构和二次预训练。如需本地获取权重git clone https://gitcode.com/OpenGVLab/InternVL3_5-2B-Pretrained整体架构ViT-MLP-LLM 三段式数据流InternVL 系列始终坚持 ViT–MLP–LLM 范式整个前向过程可以概括为 5 步切图图片被动态切成 1~12 个 448×448 的切片tile每个切片独立送入 ViT提特征InternViT 把每个切片编码为 32×32 1024 个 patch 特征维度 1024Pixel Shuffle 压缩重排张量形状得到 16×16 256 个 token维度 4096MLP 适配mlp1模块把 4096 维特征投影到 LLM 的 2048 维词嵌入空间注入与生成视觉特征替换掉文本序列中的IMG_CONTEXT占位 tokenQwen3 自回归生成回答主模型类定义在 modeling_internvl_chat.py三大组件在__init__中拼装完成。ViT 视觉编码器InternViT-300M视觉塔配置声明在 config.json 的vision_config字段对应实现为 modeling_intern_vit.py 中的InternVisionModelPatch 嵌入一个Conv2d(3, 1024, kernel14, stride14)卷积直接把图像切成 14×14 像素块并投影到 1024 维见 modeling_intern_vit.py。448÷14 32因此每个切片产生 32×32 1024 个 patch再拼上一个可学习的 CLS token编码器24 层 Transformer16 个注意力头前馈中间维度 4096使用 LayerNorm 与 0.1 的 drop_path注意力支持 FlashAttentionuse_fa3: true带 QK-Norm 选项见 modeling_intern_vit.py位置编码可学习位置嵌入 双三次插值bicubic interpolation支持任意分辨率的切片这正是动态高分辨率的基础MLP 适配器4096 → 2048 的翻译官ViT 输出 1024 维特征而 Qwen3 的词嵌入空间是 2048 维二者之间靠mlp1衔接。源码在 modeling_internvl_chat.py层类型输入 → 输出1LayerNorm4096 → 40962Linear4096 → 20483GELU2048 → 20484Linear2048 → 2048注意输入维度是4096 而不是 1024——因为 Pixel Shuffle 先把 4 个相邻 patch 的通道拼在一起1024 × 4 4096。downsample_ratio0.5是理解这个设计的钥匙。LLMQwen3-1.7B语言模型部分直接复用 Qwen3-1.7Bconfig.json 中llm_config的关键参数参数值说明num_hidden_layers2828 层 Transformerhidden_size2048与 mlp1 输出对齐num_attention_heads/num_key_value_heads16 / 8GQA 分组查询注意力intermediate_size6144前馈网络宽度max_position_embeddings4096040K 长上下文rope_theta1000000旋转位置编码基频多模态融合的核心技巧在 modeling_internvl_chat.py不新增任何交叉注意力层而是直接把视觉特征当作 embedding 塞进输入序列LLM 用标准因果注意力统一处理图文 token架构上极其简洁。Pixel Shuffle 特征压缩原理详解这是 InternVL3.5 效率设计的精髓。完整实现在 modeling_internvl_chat.py 的pixel_shuffle方法没有任何可学习参数纯粹是三次张量 reshape/permute 重排。压缩过程图解以单个 448 切片为例ViT 输出 (1, 32, 32, 1024) 32×32 个 patch每个 1024 维 │ 第1步 view把高度维拆成 (16 × 0.5)通道维拆成 (1024 ÷ 0.5 2048) ▼ (1, 32, 16, 2048) │ 第2步 permute交换宽高轴顺序 ▼ (1, 16, 32, 2048) │ 第3步 view把宽度维与通道再合并 → 16×16 个 token每个 4096 维 ▼ Pixel Shuffle 后 (1, 16, 16, 4096) 256 个 token每个 4096 维直观理解把 32×32 的 patch 网格按 2×2 分组每组的 4 个 patch 特征首尾拼接成一个超级 token。信息总量守恒1024 个 ×1024 维 256 个 ×4096 维但喂给 LLM 的 token 数减少了 4 倍——而 LLM 的自注意力开销与 token 数的平方成正比所以压缩 4 个 token 能省下约 16 倍的注意力计算。关键数字怎么来的每个切片送进 LLM 的 token 数由 modeling_internvl_chat.py 一行公式决定num_image_token (image_size // patch_size)² × downsample_ratio² (448 // 14)² × 0.5² 1024 × 0.25 256也就是说1 个 448 切片 256 个视觉 token开启最大 12 切片 缩略图时一张图最多占 13 × 256 3328 个 token。ps_version 的小细节配置中ps_version: v2见 configuration_internvl_chat.py值得留意v1 版本在重排后没有把宽高轴换回来会导致图像特征被转置v2 通过一次额外的permute(0,2,1,3)修正了这个问题源码警告信息见 modeling_internvl_chat.py。完整特征提取流水线extract_feature方法modeling_internvl_chat.py把上述环节串起来ViT 前向取last_hidden_state1 个 CLS 1024 个 patch tokenvit_embeds[:, 1:, :]丢弃 CLS tokenreshape 成(32, 32, 1024)空间布局pixel_shuffle压缩为(16, 16, 4096)展平为(256, 4096)后经mlp1得到(256, 2048)按顺序注入文本序列的IMG_CONTEXT位置动态高分辨率一张图到底喂几个切片固定 448 分辨率会损失细节InternVL 的做法是动态切块根据原图宽高比从候选比例中选出最接近的网格如 2:1、3:1切成最多 12 块 448 小图再附加 1 张全图缩略图。相关开关都在 config.json 里配置项值含义dynamic_image_sizetrue启用动态分辨率min_dynamic_patch1最少 1 个切片max_dynamic_patch12最多 12 个切片use_thumbnailtrue附加缩略图保留全局信息文本侧的占位协议由 added_tokens.json 定义的特殊 token 完成img151669开头/img151670结尾中间填充256 × 切片数个IMG_CONTEXT151671。对话模板逻辑见 conversation.py 中的internvl2_5模板modeling_internvl_chat.py 的chat方法负责把image占位符展开成对应数量的视觉 token 序列。预训练阶段CPT 做了什么InternVL3.5-2B-Pretrained位于官方四阶段训练管线的第一个位置CPT本权重→ SFT → MPO离线RL→ GSPO在线RLCPT 阶段的核心做法详见 README.md 的 Pre-Training 章节基座合并视觉塔 InternViT-300M-448px-V2_5 语言塔 Qwen3-1.7B通过 merge 方式组合全参数联合更新ViT、MLP、LLM 一起训损失函数为标准 next token prediction但前缀可以是文本 token 或图像 token平方根平均重加权按 1/√N 对每条样本的 NTP 损失加权避免偏袒长/短回复随机 JPEG 压缩增广提升真实场景鲁棒性训练语料MMPR-v1.2、MMPR-Tiny 两个多模态语料库模型权重全部存放在 model.safetensors 中词表为 vocab.json151,936 词位 merges.txt对话行为由 generation_config.json 控制。配置文件导航读懂每个 .py 的分工文件角色关键内容config.json总配置vision_config、llm_config、downsample_ratioconfiguration_intern_vit.pyViT 配置类InternVisionConfigpatch/层数/头数configuration_internvl_chat.py组合配置类InternVLChatConfigdownsample_ratio0.5等modeling_intern_vit.py视觉编码器InternVisionModel、Patch 嵌入、FlashAttentionmodeling_internvl_chat.py主模型InternVLChatModel、pixel_shuffle、chatconversation.py对话模板internvl2_5模板、system message 管理added_tokens.json特殊 tokenimg//img/IMG_CONTEXT及数学、工具 token给二次开发者的建议如果要做视觉微调只需关注vision_model与mlp1的权重名若只关心指令能力LLM 侧权重可直接对照 Qwen3-1.7B 结构理解。总结为什么这套设计值得学习✅架构极简没有复杂的跨模态注意力桥ViT 特征经 MLP 投影后直接并入 LLM 输入流好训、好部署、好推理✅压缩零成本Pixel Shuffle 纯重排、无可学习参数token 数降 4 倍而信息无损是用形状换序列长度的教科书操作✅动态分辨率1~12 切片自适应 缩略图在细节与全局之间取得平衡✅规格透明所有关键超参downsample_ratio、max_dynamic_patch、ps_version都明文写在 config.json 中架构与配置一一对应InternVL3.5-2B-Pretrained 证明了小体量多模态模型也能通过精巧的 token 压缩策略把算力花在最刀刃的地方。理解了 ViT-MLP-LLM 与 Pixel Shuffle 这套范式你就掌握了 InternVL 全系列从 1B 到 241B的共同骨架。赞分享【免费下载链接】InternVL3_5-2B-Pretrained项目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-2B-Pretrained点击查看免费下载相关推荐InternVL2_5-4B-MPO架构深度拆解ViT-MLP-LLM范式与Pixel Shuffle动态分辨率机制揭秘InternVL2_5 4B MPO架构深度拆解ViT MLP LLM范式与Pixel Shuffle动态分辨率机制揭秘 InternVL2_5 4B MPOInternVL2_5-78B架构深度解析ViT-MLP-LLM范式与pixel_shuffle如何压缩视觉TokenInternVL2_5 78B架构深度解析ViT MLP LLM范式与pixel_shuffle如何压缩视觉Token InternVL2_5 78BInternVL3_5-30B-A3B-MPO 模型架构解析ViT–MLP–LLM 范式与 Qwen3 MoE 设计深度拆解InternVL3_5 30B A3B MPO 模型架构解析ViT–MLP–LLM 范式与 Qwen3 MoE 设计深度拆解 本文带你完整拆解开源多模态大模型上一篇CodexManager请求日志与费用统计详解如何追踪Token消耗、缓存命中率与请求耗时下一篇Week 2 实战基于 FastAPI SQLite Ollama 的 LLM 动作项抽取器modern-software-dev-assignments 课程实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑