【免费下载链接】InternVL3_5-8B-Flash项目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-8B-Flash点击查看免费下载InternVL3_5-8B-Flash 是 OpenGVLab 开源的多模态大模型Multimodal LLM属于 InternVL3.5 系列中面向推理效率的 Flash 变体。它引入视觉分辨率路由器ViR, Visual Resolution Router对每个图像分块实时决定用 64 还是 256 个视觉 token 表示在视觉 token 数平均减少约 50% 的同时保持接近 100% 的基础模型性能。源码中三大核心机制分别是pixel_shuffle空间压缩、Gating路由决策与generate_flash推理流水线。本文不堆砌代码面向新手逐一讲清它们的实现原理。一、模型结构总览三大件与一个Token 漏斗 InternVL3_5-8B-Flash 沿用经典的 ViT – MLP – LLM 三段式架构详见 README.md 的 Model Architecture 章节组件作用关键数字ViT 视觉编码器InternViT将每个 448×448 分块编码为 1024 个视觉 tokenpatch 14×14 → 32×32 网格即 1024 个位置MLP 投影器mlp1/mlp2把视觉 token 投影到语言模型维度256-token 通路用mlp164-token 通路用mlp2LLM 语言模型Qwen3-8B基于视觉文本 embedding 生成回答隐藏维度 4096两个新手必须理解的背景知识动态分块Dynamic Tiling长边图像会被切成最多 12 个 448×448 分块并额外附加一张缩略图见 config.json 的min_dynamic_patch/max_dynamic_patch与use_thumbnail。每个分块独立走下面描述的token 漏斗。Token 漏斗 1024 → 256 → 64ViT 对每个分块输出 1024 个 tokenmodeling_intern_vit.py 的InternVisionModelInternVL3.5 基础版先压缩到256Flash 版再根据路由结果把部分分块进一步压到64。二、pixel_shuffle 精读空间换通道的三行张量重排 实现位置modeling_internvl_chat.py。pixel_shuffle本质是计算机视觉里的经典space-to-depth空间转深度操作核心思想一句话把相邻 2×2 的 token 合并成 1 个 token把省下的空间分辨率换成通道宽度——信息没有丢弃空间分辨率降了每个 token 的通道数翻倍。以scale_factor0.5为例输入为单分块特征[B, 32, 32, 1024]先按高减半、通道翻倍重排[B, 32, 16, 2048]并交换宽高两维再做一次宽减半、通道再翻倍得到[B, 16, 16, 4096]展平后即256 个 token每个 4096 维。Flash 版把压缩率叠乘scale_factor downsample_ratio ** 2 0.25同一套操作得到64 个 token每个 16384 维。两条通路对比通路scale_factor每分块输出 token单 token 通道数投影器基础通路InternVL3.50.52564096mlp1Flash 压缩通路0.256416384mlp2投影器定义在 modeling_internvl_chat.pymlp1是两层 Linear4096→4096mlp2是三层更宽的 Linear16384→8192→4096两者都把输出统一到 LLM 的 4096 维从而保证无论走哪条通路LLM 看到的 token 维度一致。 一个小细节ps_version参数控制最后是否把 H/W 换回原位。v1会输出转置图像源码中甚至有告警提示本模型 config.json 使用v2无需担心。三、Gating 路由路由器如何决定这块图要不要压缩动机来自 README.md 的 Visual Consistency Learning 章节不同图像分块的语义密度差异极大——纯色天空几乎可以极限压缩但公式、表格的文字区域一旦压缩就会明显掉信息。ViR 因此把压缩率选择建模为二分类问题类别 0压缩到 64 token高压缩率 1/16类别 1保留 256 token低压缩率 1/4路由由两个模块完成均在 modeling_internvl_chat.py① CrossAttentionPoolingL79-L132——给分块写摘要用一个可学习的 query 向量通过多层交叉注意力反复读取该分块全部 1024 个 token最终把 1024 个 token 池化成一个 1024 维的摘要向量。每个分块独立处理相当于给路由器提供了一份这块图的信息量报告。实现上的细节第 2 层起的注意力层复用同一组权重。② GatingL36-L76——输出二分类概率摘要向量先经过 4 个残差 MLP 块1024→4096→1024GELU Dropout LayerNorm充分混合再经一个 2 路 Linear softmax输出两个专家概率probs[0]是压缩到 64 token的信心分probs[1]是保留 256 token的信心分。③ 双重阈值决策在generate_flash内执行relative_threshold_value torch.quantile(gate_result[:, 0], 0.1) gate_result (gate_result[:, 0] relative_threshold_value) (gate_result[:, 0] 0.5)绝对阈值 0.5压缩概率至少要 0.5保证路由器有把握才动手相对阈值10% 分位数概率最低的后 10% 分块一律不压缩相当于给整张图留了安全垫避免极端情况把全图都压掉。两个阈值均可配置见 config.json 的flash_relative_threshold: 0.1与flash_absolute_threshold: 0.5。四、generate_flash 全流程从图像输入到 50% Token 节省 ⚡入口是 generate_flash外层 generate 读取配置里的flash_mode为true时走 Flash 分支否则走普通的generate_normal256 token 固定压缩即 extract_feature 通路。完整流水线共 5 步双份特征提取extract_feature_flashViT 先输出每分块 1024 token随后同一次前向里同时算出 64-token 与 256-token 两版特征路由器再为每个分块输出二分类概率逐分块决策按上一节的双阈值规则给每个分块打上压缩 / 保留标记句级占位符压缩compress_visual_tokens_in_sentenceprompt 中每个分块原本是 256 个连续的IMG_CONTEXT占位符由num_image_token决定L157对需要压缩的分块只保留前 64 个槽位、标记删除其余 192 个并同步修正 attention mask 的位置索引特征回填把选中通路64 或 256的特征按分块顺序写入占位符LLM 生成把压缩后的 embedding 序列交给 Qwen3-8B 做自回归生成。Token 节省的本质LLM 的 prefill 计算量与 KV cache 占用都与序列长度成正比视觉 token 减半意味着这部分开销近似减半——这正是 Flash 版在接近 100% 性能下显著提速的来源。 两个进阶点generate_flash支持传入visual_features参数直接接收外部算好的视觉特征配合 README 中的 Decoupled Vision-Language DeploymentDvDREADME.md可将 ViT/MLP/路由器部署在视觉服务器上、语言服务器只跑 LLM训练侧的forward()L294-L371则固定走 256-token 通路路由与压缩只作用于推理路径。五、关键配置与文件索引快速定位相关代码 核心参数速查config.json参数值含义flash_modetrue启用generate_flash分支flash_relative_threshold0.1路由相对阈值10% 分位数flash_absolute_threshold0.5路由绝对阈值downsample_ratio0.5基础 pixel_shuffle 压缩比例ps_versionv2保证空间维度顺序正确min_dynamic_patch/max_dynamic_patch1/12动态分块数量范围force_image_size448分块边长像素源码文件索引文件内容modeling_internvl_chat.py主模型Gating路由、CrossAttentionPooling、pixel_shuffle、generate_flashmodeling_intern_vit.pyInternViT 视觉编码器embedding、注意力、编码器层configuration_internvl_chat.py模型配置类downsample_ratio、ps_version等默认值config.json本模型实例化的全部推理参数conversation.py对话模板internvl2_5 模板README.md使用方式、ViCO 训练策略与 DvD 部署方案总结InternVL3_5-8B-Flash 的快不是靠缩水而是靠按需——pixel_shuffle提供了 256 / 64 两档无损的空间压缩手段Gating路由器基于每个分块的语义密度做出二选一路由generate_flash把两者串成一条推理流水线最终在视觉 token 减少约 50% 的情况下几乎不损失回答质量。理解了这三段源码也基本掌握了当前多模态大模型动态视觉分辨率这一方向的核心实现范式。赞分享【免费下载链接】InternVL3_5-8B-Flash项目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-8B-Flash点击查看免费下载相关推荐InternVL3_5-8B-Flash 架构解析ViT–MLP–LLM 范式、Qwen3 底座与 InternViT-300M 全解InternVL3_5 8B Flash 架构解析ViT–MLP–LLM 范式、Qwen3 底座与 InternViT 300M 全解 InternVL3_5InternVL3_5-8B-Flash推理提速秘籍DvD视觉-语言分离部署与4.05×加速原理InternVL3_5 8B Flash推理提速秘籍DvD视觉 语言分离部署与4.05×加速原理 InternVL3_5 8B Flash 是 OpenGVLInternVL3_5-8B-Flash微调实战SWIFT与XTuner多模态微调全流程指南InternVL3_5 8B Flash微调实战SWIFT与XTuner多模态微调全流程指南 InternVL3_5 8B Flash 是 InternVL3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考