恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
InternVL3_5-2B-Flash双路压缩管线详解:pixel_shuffle实现1024→256→64 Token极致压缩
首页
资讯中心
/
InternVL3_5-2B-Flash双路压缩管线详解:pixel_shuffle实现1024→256→64 Token极致压缩
InternVL3_5-2B-Flash双路压缩管线详解:pixel_shuffle实现1024→256→64 Token极致压缩
发布时间:2026/10/20 4:40:57
【免费下载链接】InternVL3_5-2B-Flash项目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-2B-Flash点击查看免费下载InternVL3_5-2B-Flash 是开源多模态大模型 InternVL3.5 家族的轻量高效版本其核心创新是双路视觉 Token 压缩管线通过 pixel_shuffle 将每个图像分块tile的 1024 个视觉 Token 压缩到 256 或 64 个配合内置的 Visual Resolution RouterViR逐块路由在视觉输入减少约 50% 的情况下保持接近 100% 的原版性能。本文带你完整看懂这条1024→256→64压缩管线的每一环实现。 一句话认识 InternVL3_5-2B-Flash项目说明模型构成InternViT-300M视觉编码器 MLP 投影 Qwen3-1.7B语言模型总计约 2.3B 参数核心创新双路压缩管线 逐 tile 路由ViR对应官方训练中的 Visual Consistency LearningViCO阶段解决的问题视觉 Token 数量大导致 LLM 预填充prefill开销高、推理慢推理入口开启flash_mode后generate()自动路由到generate_flash模型的关键配置都在 config.json 末尾几行flash_mode: true、downsample_ratio: 0.5、flash_relative_threshold: 0.1、flash_absolute_threshold: 0.5。 为什么必须压缩视觉 Token 的膨胀问题InternVL 系列采用动态高分辨率策略任意图像会被切成若干 448×448 的 tile最多 12 个外加一张缩略图见 config.json 中max_dynamic_patch: 12。而 ViT 的 patch 尺寸为 14因此每个 tile 产生 (448 ÷ 14)² 32 × 32 1024 个视觉 Token一张图用满 12 个 tile 缩略图时仅图像输入就有13000 个 Token文本还没开始呢。LLM 自回归推理的成本几乎与输入 Token 数成正比这正是Flash版本要动刀的地方——在送进语言模型之前把视觉 Token 数量砍下去。 三档 Token 规模1024 → 256 → 64整个压缩体系基于同一个基础操作pixel_shuffle。它本质是一次无损的张量重排——把空间上相邻的若干特征格子的通道合并到一个 Token 上空间分辨率下降、单 Token 通道维上升总信息量不变只是表达更浓缩了。档位pixel_shuffle 缩放因子输出网格每 tile Token 数单 Token 通道维后续投影ViT 原始输出—32×3210241024—标准路2560.516×162561024×4 4096mlp1 → 2048极速路640.250.5²8×8641024×16 16384mlp2 → 20481024InternViT24 层hidden 1024见 modeling_intern_vit.py对单个 tile 的原始输出去掉 CLS 位后就是 32×32 网格。256InternVL3.5 标准版的做法缩放因子取downsample_ratio 0.54 个相邻格子的通道合并Token 数降为 1/4。64Flash 新增的更狠一档缩放因子直接取 0.5² 0.25相当于两次 pixel_shuffleToken 数降为 1/16。由于 64 路每个 Token 要背16384 维通道256 路是 4096 维所以配套的投影 MLP 也不同256 路用两层的 mlp164 路用更深的三层 mlp2中间维度 4096把浓缩后的宽通道压回 LLM 的 2048 维输入空间。 双路压缩管线全流程拆解双路管线的核心是extract_feature_flash整个流程分三步第一步ViT 统一抽取 1024 特征所有 tile 先过一遍视觉编码器拿到每 tile 1024 个 1024 维特征。注意 ViT 只跑一次——后面无论路由结果如何都不需要重跑视觉编码器。第二步双路 pixel_shuffle 并行预备在同一份 1024 特征上代码同时预备出两种压缩表示均在torch.no_grad()下完成不产生额外梯度开销vit_embeds_256pixel_shuffle(0.5) → 256 个 Token → mlp1vit_embeds_64pixel_shuffle(0.25) → 64 个 Token → mlp2这一步的计算量相比 LLM 预填充 256 个 Token 的开销几乎可以忽略属于提前备好货。第三步ViR 路由器给每个 tile 打分路由器由两个组件构成CrossAttentionPooling用一个可学习的 query token通过 4 轮交叉注意力把每个 tile 的 1024 个特征投票成 1 个汇总向量——相当于先看整块内容再决策。Gating4 个残差 MLP block 做特征细化最后接一个 2 分类的 gate 层输出 softmax 概率probs[:, 0]/probs[:, 1]。概率probs[:, 0]越高说明该 tile 语义越稀疏简单如纯色背景、大面积留白可以放心压到 64反之信息密集的 tile文字、细节应保留 256。⚖️ 路由决策相对 绝对双阈值判定打分之后真正的取舍发生在generate_flash中判定条件有两条必须同时满足才压缩到 64相对阈值gate quantile(gate 全集, 0.1) 绝对阈值gate 0.5相对阈值flash_relative_threshold: 0.1取整批 tile 打分分布的 10% 分位数落在最低 10% 的 tile 一律不压——相当于给最没把握的一批留后路。绝对阈值flash_absolute_threshold: 0.5两分类 softmax 概率和为 1 0.5意味着路由器必须占多数票才动手。判定通过后compress_visual_tokens_in_sentence会做最后一件关键事把该 tile 在句子里占位的 256 个IMG_CONTEXTTokentoken id 见 added_tokens.json物理删除其中的 192 个只保留 64 个位置再填入 64 路特征。注意这不是算了但不省——序列长度真正缩短了attention 计算量随之下降。⚙️ 核心配置参数速查参数取值作用定义位置flash_modetrue开启 Flash 模式generate()走双路管线config.jsondownsample_ratio0.5256 路缩放因子64 路为其平方 0.25config.jsonflash_relative_threshold0.1相对分位数阈值10% 分位config.jsonflash_absolute_threshold0.5绝对概率下限config.jsonps_versionv2pixel_shuffle 版本v2 修正了 v1 宽高未换回导致的图像转置问题configuration_internvl_chat.pymax_dynamic_patch12单图最大 tile 数决定压缩收益上限config.json 快速上手加载即用Flash 逻辑已内置在模型里加载方式与普通 InternVL3.5 一致无需额外开关trust_remote_codeTrue会加载本仓库的自定义代码from transformers import AutoModel, AutoTokenizer model AutoModel.from_pretrained( OpenGVLab/InternVL3_5-2B-Flash, torch_dtypetorch.bfloat16, trust_remote_codeTrue, use_flash_attnTrue, ).eval().cuda() tokenizer AutoTokenizer.from_pretrained(OpenGVLab/InternVL3_5-2B-Flash, trust_remote_codeTrue, use_fastFalse)之后正常调用model.chat(...)即可双路压缩与逐 tile 路由全程自动完成用户无感知。✅ 小结双路并行、按需取用256 路与 64 路特征在同一次前向中并行算好路由器ViR按 tile 的语义丰富度决定走哪一路简单区域用 64、复杂区域保 256。压缩是真省被选中压缩的 tile 会实际删除 192 个占位 Token序列变短LLM 预填充成本真实下降。双阈值保险相对分位数 绝对概率的双重判定避免路由器误伤信息密集的图像块。收益明确官方数据显示该机制使视觉 Token 减少约 50%同时保持接近 100% 的 InternVL3.5 原版性能是端侧与低算力部署的利器。如果你想继续深挖推荐按 README.md 中的 Model Architecture 与 Visual Consistency Learning 两节对照 modeling_internvl_chat.py 的extract_feature_flash、Gating、generate_flash三个函数逐行阅读即可完整还原1024→256→64的每一步。赞分享【免费下载链接】InternVL3_5-2B-Flash项目地址https://ai.gitcode.com/OpenGVLab/InternVL3_5-2B-Flash点击查看免费下载相关推荐InternVL3_5-30B-A3B-Flash视觉Token压缩pixel_shuffle到ViR路由的源码逐行走读InternVL3_5 30B A3B Flash视觉Token压缩pixel_shuffle到ViR路由的源码逐行走读 想弄清楚 InternVL3_5 3InternVL3_5-1B-Flash 核心源码逐行解读pixel_shuffle 双路压缩与 Token 裁剪如何砍掉 50% 视觉 TokenInternVL3_5 1B Flash 核心源码逐行解读pixel_shuffle 双路压缩与 Token 裁剪如何砍掉 50% 视觉 Token InteViCO视觉一致性学习揭秘InternVL3_5-14B-Flash从256到64 Token的压缩训练原理ViCO视觉一致性学习揭秘InternVL3_5 14B Flash从256到64 Token的压缩训练原理 InternVL3_5 14B Flash 是上一篇如何追踪被重命名的文件Markdown Preview的FileWatcher原子保存检测技巧详解下一篇Modern Web Guidance CSS布局实战容器查询、:has()与滚动驱动动画的Agent友好写法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考