首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
InternVL3_5-2B-Flash双路压缩管线详解:pixel_shuffle实现1024→256→64 Token极致压缩
📅 2026/10/20 4:40:55
✍️ 爱科研究院
👁 阅读 3,247
【免费下载链接】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),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/20 4:40:55
REA Agent 逆向时如何压住 token 成本:4 个实操控制点
2026/10/20 4:40:55
大模型训练全流程解析:从数据准备到分布式调优实战
2026/10/20 4:40:55
大模型训练实战指南:分布式并行、显存优化与LoRA微调
2026/10/20 5:26:06
Claude API协议逆向解析:前端通信链路与请求合规验证
2026/10/20 5:26:06
MySQL时区参数time_zone全解析:原理、配置与排查实战
2026/10/20 5:26:06
手写迷你神经网络:零依赖实现深度学习核心原理
2026/10/20 5:26:06
普通对话 vs 工作流 vs Agent:大模型应用选型指南
2026/10/20 5:26:06
PAT乙级1107题解析:从统计模拟到边界处理全攻略
2026/10/20 5:21:06
榜单第一不等于实战能打:从Argon看大模型代码能力评价误区
2026/10/20 1:05:26
WSL下STM32开发板烧录指南:USB透传与OpenOCD实操
2026/10/20 1:05:26
ROS2工业级开发:实时性、资源适配与可交付验证体系
2026/10/20 1:05:26
STM32+华为云IoT+Qt构建智能家居远程控制系统全解析
2026/10/19 14:00:16
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/19 2:04:59
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/19 15:41:50
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/20 2:24:03
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/20 2:23:57
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/20 2:23:53
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)