【免费下载链接】InternVL3-78B-Pretrained
InternVL3-78B-Pretrained 是 OpenGVLab 开源的780 亿参数多模态大模型(MLLM)预训练版本,采用经典的ViT-MLP-LLM架构范式,将 6B 视觉编码器 InternViT 与 Qwen2.5-72B 语言模型通过 MLP 投影器融合,原生支持图像、视频与多模态混合数据的预训练。本文带你完整拆解它的三大核心组件、动态分辨率机制与关键源码文件,帮助新手快速理解多模态模型的"视觉-语言"融合原理。🔍
什么是 InternVL3-78B-Pretrained?
先明确它和普通版的区别,这直接影响你的使用场景:
| 版本 | 特点 | 适合场景 |
|---|---|---|
| InternVL3-78B-Pretrained(本文主角) | 仅完成原生多模态预训练,未做 SFT 与 MPO 后训练 | 二次开发、微调、学术研究 |
| InternVL3-78B | 预训练 + SFT + MPO 后训练 | 直接对话、开箱即用 |
💡 如果你不确定选哪个版本,官方建议直接使用经过后训练的完整版;只有在需要做定制化微调或复现训练流程时,才需要这份预训练权重。
它是 InternVL 系列(1.0 → 1.5 → 2.0 → 2.5 → 3)的第三代旗舰模型,相比前代,InternVL3 不仅提升了多模态感知与推理能力,还将能力扩展到工具调用、GUI 智能体、工业图像分析、3D 视觉感知等领域。
整体架构:ViT-MLP-LLM 三段式范式
InternVL3-78B-Pretrained 延续了 InternVL 系列一贯的"ViT - MLP - LLM"架构,可以理解为"眼睛 - 翻译官 - 大脑"的三层流水线:
图片 → [ViT 视觉编码器] → [MLP 投影器] → [LLM 语言模型] → 文本输出 InternViT-6B mlp1 Qwen2.5-72B整个模型只有三大部件,组合逻辑清晰地体现在 modeling_internvl_chat.py 的__init__中:
- vision_model:
InternVisionModel,负责"看" - language_model:
Qwen2ForCausalLM,负责"想和说" - mlp1:连接两者的桥梁,负责"翻译"
下面逐一剖析。👇
视觉组件:InternViT-6B-448px
视觉编码器是增量预训练的InternViT-6B(配置见 config.json 中的vision_config),核心参数如下:
| 参数 | 值 | 说明 |
|---|---|---|
image_size | 448 | 输入图片尺寸 |
patch_size | 14 | 每个视觉 token 覆盖 14×14 像素块 |
num_hidden_layers | 45 | Transformer 层数 |
hidden_size | 3200 | 隐藏层维度 |
num_attention_heads | 25 | 注意力头数 |
model_type | intern_vit_6b | 约 6B 参数规模 |
它的实现代码在 modeling_intern_vit.py 中,内置了 FlashAttention-2 支持(modeling_intern_vit.py 的FlashAttention类),可显著加速长序列的注意力计算。
桥梁组件:MLP 投影器 + Pixel Shuffle 降采样
这是整个架构最巧妙的部分。ViT 输出的特征维度(3200)和 LLM 的维度(8192)不一致,需要mlp1投影器做对齐。它的结构非常简洁(modeling_internvl_chat.py):
LayerNorm → Linear(12800→8192) → GELU → Linear(8192→8192)注意输入维度是3200 × 4 = 12800,这是因为在送入 MLP 之前,模型先执行了pixel unshuffle(像素重排降采样)(modeling_internvl_chat.py):
- 将相邻 2×2 个视觉 token 的特征拼接到一起
- token 数量降为原来的1/4,单 token 维度升为 4 倍
- 大幅压缩了送入 LLM 的视觉 token 数,直接决定推理显存占用
每张 448×448 切片产生的 token 数由 modeling_internvl_chat.py 计算:
num_image_token = (448 // 14) ** 2 * (0.5 ** 2) # = 256语言组件:Qwen2.5-72B
语言模型选用Qwen2.5-72B作为初始化底座(config.json 中的llm_config),关键规格:
| 参数 | 值 | 说明 |
|---|---|---|
num_hidden_layers | 80 | Transformer 层数 |
hidden_size | 8192 | 隐藏层维度 |
num_attention_heads | 64 | 注意力头数 |
num_key_value_heads | 8 | GQA 分组查询注意力,省显存 |
max_position_embeddings | 32768 | 支持 32K 上下文 |
vocab_size | 151674 | 词表大小(多语言) |
rope_scaling | dynamic ×2.0 | 动态 RoPE 缩放,长上下文外推 |
6B 的"眼睛" + 72B 的"大脑" ≈78B 总参数,这就是模型名称 78B 的由来。权重被切分为 33 个 safetensors 分片(如 model-00001-of-00033.safetensors),分片映射记录在 model.safetensors.index.json 中,加载时框架会自动完成拼装。
动态分辨率:一张图可以切成 1~12 块 🧩
InternVL3-78B-Pretrained 不支持"固定死"的图片输入尺寸,而是采用动态分辨率策略(config.json 中dynamic_image_size: true):
- 按图片原始长宽比,将其切分为448×448 的网格切片(tile)
- 切片数在
min_dynamic_patch=1到max_dynamic_patch=12之间动态变化 - 同时额外附加一张448×448 缩略图(
use_thumbnail: true),兼顾全局与局部细节
这意味着:小图只消耗 1 块 token 预算,复杂大图(如文档、图表)最高可动用 12 块,既保住细节又控制开销。仓库中的示例图片 examples/image1.jpg 正是官方推理示例的输入素材:
上图即为
examples/image1.jpg,官方 Quick Start 会用它做"描述图片"任务演示。
V2PE:让长上下文更敏锐的位置编码 📐
InternVL3 的一大升级是引入了V2PE(Variable Visual Position Encoding,可变视觉位置编码):
- 给视觉 token 分配更小、更灵活的位置增量(对比文本 token 的常规步长)
- 效果:视觉 token 在 32K 长上下文"挤占"更少的有效位置预算
- 官方消融实验显示,V2PE 带来了多数评测指标的显著提升,小位置增量 δ 即可达到最优
配合 Qwen2.5-72B 的动态 RoPE(rope_scaling: dynamic, factor: 2.0),InternVL3-78B-Pretrained 在多图、视频等超长多模态场景下表现更稳定。
关键文件地图:源码在哪里?📂
这个仓库本身是权重 + 自定义推理代码的完整交付,目录结构非常清爽,核心文件如下:
| 文件 | 作用 |
|---|---|
| config.json | 模型总配置,含vision_config与llm_config两套子配置 |
| configuration_internvl_chat.py | 组合式配置类InternVLChatConfig(configuration_internvl_chat.py) |
| modeling_internvl_chat.py | 主模型InternVLChatModel:特征提取、token 融合、chat 接口 |
| modeling_intern_vit.py | InternViT 视觉编码器实现 |
| conversation.py | 对话模板管理(本模型使用internvl2_5模板) |
| tokenizer.json、vocab.json、merges.txt | Qwen2.5 系分词器资产 |
| model.safetensors.index.json | 33 个权重分片的索引映射 |
视觉特征如何融入文本?核心在 modeling_internvl_chat.py 的extract_feature方法:ViT 输出 → 去掉 CLS 向量 → pixel shuffle 降采样 → MLP 投影,然后 forward 会用这些视觉 embedding替换输入序列中的<IMG_CONTEXT>占位 token,实现"图文同序列"。
快速上手:加载与推理 ⚡
使用transformers>=4.37.2加载(需trust_remote_code=True加载仓库内的自定义代码):
import torch from transformers import AutoTokenizer, AutoModel model = AutoModel.from_pretrained( "OpenGVLab/InternVL3-78B-Pretrained", torch_dtype=torch.bfloat16, low_cpu_mem_usage=True, use_flash_attn=True, trust_remote_code=True).eval().cuda()显存参考(来自 README Quick Start):
- 8-bit 量化:2 张 80GB GPU
- bf16 全精度:至少 3 张 80GB GPU
由于 78B 体量庞大,README 还给出了多卡切分策略split_model:将 80 层 LLM 按 GPU 数均分,且把 ViT、MLP、首尾层都固定到第一张卡上,避免多设备张量报错。
为什么值得研究这个预训练版?
- 🧬原生多模态预训练(Native Multimodal Pre-Training):语言与视觉在单一阶段统一学习,图文、视频、交错序列混合训练,无需额外的对齐/桥接模块
- 📊文本能力不降反升:官方对比显示,经过多模态预训练的 InternVL3 系列,纯文本表现甚至优于 Qwen2.5 系列基础模型
- 🛠️微调友好:随机初始化的 MLP 投影器 + 成熟的 ViT/LLM 底座,是二次开发的理想起点;SWIFT、XTuner 等主流微调框架均支持
总结
InternVL3-78B-Pretrained 用一个优雅的三段式架构回答了"视觉模型如何接入大语言模型"这个核心问题:
- InternViT-6B用 448px 动态分辨率"看清"图像,pixel shuffle 把 token 数压到 1/4
- MLP 投影器以极小的参数量完成 3200 维到 8192 维的空间映射
- Qwen2.5-72B在 32K 上下文里融合图文,V2PE 保障长序列下的感知精度
理解了这个"ViT → MLP → LLM"的范式,你就掌握了当前主流开源多模态大模型的通用解剖图——这正是 InternVL3 系列对社区的最大价值之一。
【免费下载链接】InternVL3-78B-Pretrained
相关推荐
InternVL3-78B-Instruct架构拆解:ViT-MLP-LLM范式、MLP投影器与forward源码逐行解读
InternVL3 78B Instruct架构拆解:ViT MLP LLM范式、MLP投影器与forward源码逐行解读 InternVL3 78B Inst
InternVL2_5-78B架构深度解析:ViT-MLP-LLM范式与pixel_shuffle如何压缩视觉Token
InternVL2_5 78B架构深度解析:ViT MLP LLM范式与pixel_shuffle如何压缩视觉Token 🔍 InternVL2_5 78B
InternVL3-1B-Pretrained 架构剖析:ViT-MLP-LLM 范式如何串联视觉与语言
InternVL3 1B Pretrained 架构剖析:ViT MLP LLM 范式如何串联视觉与语言 InternVL3 1B Pretrained 是 O
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考