【免费下载链接】InternVL2_5-78B-MPO
InternVL2_5-78B-MPO 是一款基于 ViT-MLP-LLM 架构的开源多模态大模型,融合了 6B 视觉编码器 InternViT 与 72B 语言模型 Qwen2.5-72B-Instruct,擅长图文理解、多图对比和视频问答。本文带你完成它的多卡部署、8-bit 省显存量化和 LMDeploy 服务化上线,让 78B 级别的多模态模型真正跑起来 🚀
为什么值得部署 InternVL2_5-78B-MPO?
InternVL2_5-78B-MPO 是 InternVL 2.5 系列经混合偏好优化(MPO, Mixed Preference Optimization)增强后的旗舰版本。相比基座模型,它在 MMStar、OCRBench、MathVista 等基准上都有明显提升,官方综合均分从 75.2 提升到 76.6,尤其 OCR 与数学推理能力增强显著。
官方示例图片 examples/image1.jpg,可直接用于测试多模态对话
它的核心能力包括:
| 能力 | 说明 |
|---|---|
| 动态分辨率 | 按 448×448 分块切图,最多 12 块,细节保留更好 |
| 多图对话 | 支持拼接图与独立图两种多图输入方式 |
| 视频理解 | 按帧抽取图像,进行视频多轮问答 |
| 纯文本对话 | 不传图片时退化为纯文本 LLM 对话 |
模型结构定义在 modeling_internvl_chat.py,视觉编码器定义在 modeling_intern_vit.py,对话模板在 conversation.py,配置见 config.json。
准备工作:下载模型与硬件需求
下载模型文件
git clone https://gitcode.com/OpenGVLab/InternVL2_5-78B-MPO模型权重以 33 个 safetensors 分片存放(如 model-00001-of-00033.safetensors),由 model.safetensors.index.json 索引加载,总大小约 150GB 以上,请预留足够磁盘空间。
显存需求速查表
这是新手最常踩坑的地方,先记住这张表(官方 Quick Start 中的建议):
| 加载方式 | 硬件需求 |
|---|---|
| 16-bit(bf16)多卡 | 至少3 张 80GB显卡 |
| 8-bit 量化(load_in_8bit) | 至少2 张 80GB显卡 |
| 单卡 | 80GB 单卡放不下完整权重,不推荐 |
💡 提示:需要安装
transformers>=4.37.2,模型依赖自定义代码,加载时必须加trust_remote_code=True。
多卡部署:最关键的 device_map 技巧
78B 模型放不进一张卡,官方在 README.md 的 Quick Start 中给出了一个手动切分device_map的方案,值得理解其中的两个精髓:
- 首卡减半分配:第 0 号 GPU 还要承载 ViT 视觉编码器、MLP 投影层和 LLM 的嵌入层,所以按"半张卡"计算 LLM 层数;
- 首尾层同卡:LLM 的最后一层与
lm_head都放在第 0 号卡,避免多卡推理时张量不在同一设备导致的报错。
核心思路是:80 层 LLM 按 GPU 数量切分,split_model函数返回的device_map告诉 transformers 每一层放在哪张卡:
device_map = split_model('InternVL2_5-78B') # 按 GPU 数量自动切层 model = AutoModel.from_pretrained( path, torch_dtype=torch.bfloat16, low_cpu_mem_usage=True, use_flash_attn=True, # 开启 FlashAttention,省显存提速 trust_remote_code=True, device_map=device_map).eval()3 卡 bf16 部署时,第 0 卡约承载 ViT + 投影层 + 部分 LLM 层,第 1、2 卡各承载约 33 层 LLM,整模型均衡落盘。
省显存量化:8-bit 加载只需 2 张 80GB 卡
显存不够时的首选方案是 BNB 8-bit 量化加载。相比 bf16 全精度,权重大小约减半,硬件门槛从 3 张 80GB 降到 2 张 80GB。只需在加载参数中加一个开关:
model = AutoModel.from_pretrained( path, torch_dtype=torch.bfloat16, load_in_8bit=True, # 开启 8-bit 量化 low_cpu_mem_usage=True, use_flash_attn=True, trust_remote_code=True, device_map=device_map).eval()量化后注意事项:
device_map仍需用上面的多卡切分方案,不要只用单卡.cuda();- 8-bit 量化会轻微影响生成质量,对精度敏感的数学推理场景建议用 bf16 + 3 卡方案;
- 官方明确建议:
load_in_8bit=True配两张 80GB 卡,load_in_8bit=False至少三张 80GB 卡。
跑通第一次对话:图文问答实战
模型加载后,用model.chat接口即可对话。以仓库自带的示例图为例(图片加载逻辑见 README.md 的load_image函数):
pixel_values = load_image('./examples/image1.jpg', max_num=12).to(torch.bfloat16).cuda() generation_config = dict(max_new_tokens=1024, do_sample=True) # 单图问答 question = '<image>\nPlease describe the image shortly.' response = model.chat(tokenizer, pixel_values, question, generation_config) print(response)几个新手友好的要点:
- 多轮对话:传
history=history保持上下文,首次调用加return_history=True拿到 history; - 多图对话:将两张图的
pixel_values沿 dim=0 拼接,独立图模式需传num_patches_list告知每张图的切块数; - 视频问答:
load_video按num_segments抽帧,问题中用Frame1: <image>\nFrame2: <image>...格式占位,示例视频见 examples/red-panda.mp4; - 流式输出:结合
TextIteratorStreamer在子线程中生成,逐字打印,体验接近 ChatGPT。
生产级上线:用 LMDeploy 一键服务化
自研推理代码适合原型验证,要对外提供 API 服务,推荐官方推荐的 LMDeploy 部署方案,把 78B 多模态模型像普通 LLM 一样服务化:
pip install lmdeploy>=0.6.4一条命令启动兼容 OpenAI 接口的推理服务,--tp 4表示张量并行 4 卡:
lmdeploy serve api_server OpenGVLab/InternVL2_5-78B-MPO --server-port 23333 --tp 4启动后,用标准 OpenAI SDK 即可调用:
from openai import OpenAI client = OpenAI(api_key='YOUR_API_KEY', base_url='http://0.0.0.0:23333/v1') model_name = client.models.list().data[0].id response = client.chat.completions.create( model=model_name, messages=[{'role': 'user', 'content': [ {'type': 'text', 'text': 'describe this image'}, {'type': 'image_url', 'image_url': {'url': '<图片地址>'}} ]}], temperature=0.8, top_p=0.8)LMDeploy 还支持批量 prompt 推理与多图会话,多图会消耗更多输入 token,记得调大session_len(官方示例使用 8192)。
新手避坑清单
| 问题 | 解决办法 |
|---|---|
| 加载报自定义类错误 | 加trust_remote_code=True,并升级transformers>=4.37.2 |
| 多卡推理设备不匹配报错 | 使用官方split_model的 device_map,勿手动.cuda() |
| OOM 显存不足 | 换 8-bit 量化或增加 GPU 数量;图片max_num从 12 调小 |
| 多图回答混乱 | 独立图模式必须传num_patches_list |
| 服务响应慢 | 开启 FlashAttention;上线改用 LMDeploy + tp 多卡并行 |
总结
InternVL2_5-78B-MPO 让开源阵营拥有了 78B 级、经过偏好优化的多模态理解能力。落地路径非常清晰:3 张 80GB 卡跑 bf16 全精度 → 显存吃紧就 8-bit 量化 2 卡起步 → 生产环境用 LMDeploy 一条命令服务化。配合动态分辨率、多图与视频理解能力,它可以支撑文档 OCR、图文客服、视频分析等真实业务场景。如果你正在评估大参数多模态模型的私有化部署,这套方案值得直接套用。
【免费下载链接】InternVL2_5-78B-MPO
相关推荐
InternVL2_5-78B多卡部署指南:device_map拆分78B大模型的3个关键细节
InternVL2_5 78B多卡部署指南:device_map拆分78B大模型的3个关键细节 InternVL2_5 78B 是书生(InternVL)2.5
Jujutsu (jj) Git 兼容性全解:Git 后端、Colocated 工作区与格式映射机制
Jujutsu jj Git 兼容性全解:Git 后端、Colocated 工作区与格式映射机制 Jujutsu(jj)提供了两种存储提交的后端,其中一种直接建
InternVL2_5-Pretrain-Models 部署指南:26B~78B 多卡推理、FlashAttention-2 加速与显存优化技巧
InternVL2_5 Pretrain Models 部署指南:26B~78B 多卡推理、FlashAttention 2 加速与显存优化技巧 InternV
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考