多卡跑不动?InternVL3-38B-Instruct split_model 多 GPU 切分原理与实战指南
【免费下载链接】InternVL3-38B-Instruct项目地址https://ai.gitcode.com/OpenGVLab/InternVL3-38B-Instruct点击查看免费下载InternVL3-38B-Instruct 是 OpenGVLab 开源的 38B 参数多模态大模型MLLM由 6B 视觉编码器 InternViT-6B Qwen2.5-32B 语言模型组成。单张消费级甚至 48G 专业卡都装不下它官方在 README.md 中给出了split_model多 GPU 切分方案。本文带你从零理解这套多卡部署原理device_map是怎么算出来的、为什么第一张卡按半张卡对待、首尾层为什么必须同卡最后给出一套可直接上手的加载与推理流程帮助你用多张 80GB GPU 稳定跑起这个模型。为什么单卡跑不动 InternVL3-38B-Instruct先算一笔显存账组成部分参数量bf16 权重占用LLM 语言模型Qwen2.5-32B~32B~64 GBViT 视觉编码器InternViT-6B~6B~12 GBMLP 投影层 推理 KV Cache—数 GBbf16 加载总计约 80 GB 以上单张 80GB 显卡连权重都放不下更别提激活值与 KV Cache38B 模型总参数model-00001-of-00016.safetensors 等 16 个分片可用 model.safetensors.index.json 查看各参数分布远超单卡容量。因此必须用张量级/层级的多卡切分model parallel把 LLM 的 64 个 Transformer 层config.json 中num_hidden_layers: 64拆到多张 GPU 上。split_model 切分原理拆解官方split_model函数的完整代码见 README.md。它的核心逻辑可以拆成 4 步第 1 步读取 LLM 层数确定每卡层数world_size torch.cuda.device_count() # 可见 GPU 数 num_layers config.llm_config.num_hidden_layers # 38B 为 64 num_layers_per_gpu math.ceil(num_layers / (world_size - 0.5))注意分母是world_size - 0.5——第一张卡被当成半张卡。因为 ViT 视觉编码器~12GB固定放在 GPU 0 上挤占了大量显存所以 GPU 0 只能承担约一半的 LLM 层数num_layers_per_gpu[0] math.ceil(num_layers_per_gpu[0] * 0.5)以 3 张 80GB 卡为例每卡约 64 / 2.5 ≈ 26 层GPU 0 承担 13 层 ViT 首尾层GPU 1、GPU 2 各承担 26 层负载大致均衡。第 2 步逐层写入 device_mapfor i, num_layer in enumerate(num_layers_per_gpu): for j in range(num_layer): device_map[flanguage_model.model.layers.{layer_cnt}] i layer_cnt 1生成的是一张层号 → 卡号的映射表例如 3 卡时GPU承载模块GPU 0ViT、mlp1、embed_tokens、lm_head、layers 0~12、最后一层 63GPU 1layers 13~38GPU 2layers 39~62第 3 步ViT 与投影层固定到 GPU 0device_map[vision_model] 0 device_map[mlp1] 0图片先进入 GPU 0 的 ViT 做特征提取再经 MLP 投影送入 LLM 第一层也在 GPU 0数据流向最顺跨卡传输量最小。第 4 步关键首层与尾层同卡device_map[language_model.model.embed_tokens] 0 device_map[language_model.lm_head] 0 device_map[flanguage_model.model.layers.{num_layers - 1}] 0README 对此有明确解释README.md这样做是为了避免多 GPU 推理时张量不在同一设备导致的报错——嵌入层产出、最后一层与 lm_head 消耗的张量必须同设备把首尾层闭环到同一张卡上就不会出现Expected all tensors to be on the same device这类错误。硬件配置速查几张卡才够README 在 Inference 章节 给出了官方建议加载方式最低硬件要求load_in_8bitTrueBNB 8-bit 量化2 × 80GB GPUload_in_8bitFalsebf16 全精度3 × 80GB GPU 提示8-bit 量化会把权重压到约 38GB两张 80GB 卡分压后仍有充裕空间放 KV Cachebf16 则三卡起步。实战加载模型并跑通推理以下流程基于 transformers官方要求transformers4.37.2完整可运行代码在 README.md。1. 用 split_model 生成 device_map 并加载模型device_map split_model(InternVL3-38B) model AutoModel.from_pretrained( path, torch_dtypetorch.bfloat16, low_cpu_mem_usageTrue, use_flash_attnTrue, trust_remote_codeTrue, device_mapdevice_map).eval()2. 加载图片与对话pixel_values load_image(./examples/image1.jpg, max_num12).to(torch.bfloat16).cuda() generation_config dict(max_new_tokens1024, do_sampleTrue) question image\nPlease describe the image shortly. response model.chat(tokenizer, pixel_values, question, generation_config)仓库自带的 examples/ 目录包含示例图片与视频如 examples/red-panda.mp4可直接验证单图对话、多图对比、视频理解等场景。常见坑与排查清单问题原因与对策tensors not on the same device报错首尾层未同卡。确认device_map中embed_tokens、lm_head与最后一层都指向 GPU 0GPU 0 显存爆、其他卡空闲忘了 ViT 占 12GB第一张卡要按半卡计算层数即world_size - 0.5的算法卡数不够导致加载失败bf16 至少 3 × 80GB可改用load_in_8bitTrue降为 2 × 80GBtrust_remote_code缺失InternVL3 使用自定义建模代码 modeling_internvl_chat.py配置入口 configuration_internvl_chat.py加载时必须传trust_remote_codeTrue想显式指定某些卡用CUDA_VISIBLE_DEVICES0,1,2控制可见 GPUsplit_model会自动按可见卡数计算进阶生产部署可换用 LMDeploysplit_model方案适合验证与小规模推理。如果要做高并发服务官方推荐使用 LMDeploy见 README.mdlmdeploy serve api_server OpenGVLab/InternVL3-38B \ --chat-template internvl2_5 --server-port 23333 --tp 2它通过 Tensor Parallelism--tp 2实现张量并行配合 OpenAI 兼容接口吞吐和稳定性都优于手动切层方案。总结InternVL3-38B-Instruct 的多卡部署核心就是三句话64 层 LLM 逐层切分split_model按world_size - 0.5均分层数生成device_map第一张卡按半卡算ViT mlp1 固定在 GPU 0所以它少分一半 LLM 层首尾层必须同卡embed_tokens、lm_head、最后一层都放 GPU 0规避跨设备张量报错。记住这套原理后无论是 2 卡量化还是 3 卡全精度你都能自行调整分配策略把这个 38B 多模态模型稳稳跑起来。赞分享【免费下载链接】InternVL3-38B-Instruct项目地址https://ai.gitcode.com/OpenGVLab/InternVL3-38B-Instruct点击查看免费下载相关推荐批量推理提速指南InternVL3-38B-Instruct batch_chat 批处理实战批量推理提速指南InternVL3 38B Instruct batch_chat 批处理实战 InternVL3 38B Instruct 是 OpenGV原生多模态预训练原理InternVL3-38B-Instruct 为何文本能力反超 Qwen2.5原生多模态预训练原理InternVL3 38B Instruct 为何文本能力反超 Qwen2.5 InternVL3 38B Instruct 是 Open显存紧张也能跑InternVL3-38B-Pretrained 8位量化与多卡部署避坑指南显存紧张也能跑InternVL3 38B Pretrained 8位量化与多卡部署避坑指南 InternVL3 38B Pretrained 是 Intern上一篇深蓝词库转换一站式输入法词库跨平台迁移工具下一篇7个技巧让Fiji成为你的科研效率倍增器从图像分析到成果发表的7天蜕变指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CodeX使用技巧5:把auth.json改到TaoToken,统一Key调用多模型

CodeX使用技巧5:把auth.json改到TaoToken,统一Key调用多模型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 16:21:31 阅读更多 →
CSharp 实战:PivotGridControl 与 ChartControl 联动数据看板搭建

CSharp 实战:PivotGridControl 与 ChartControl 联动数据看板搭建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 16:21:31 阅读更多 →
i茅台自动预约助手:零门槛完整指南提升茅台预约成功率

i茅台自动预约助手:零门槛完整指南提升茅台预约成功率

i茅台自动预约助手:零门槛完整指南提升茅台预约成功率 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法) 项目地址: https://…

2026/10/18 16:21:31 阅读更多 →

最新新闻

Fluent管道仿真:压降与壁面剪切力数值计算全流程指南

Fluent管道仿真:压降与壁面剪切力数值计算全流程指南

简介:面向流体仿真初学者与相关工程人员的Fluent管道仿真案例包,围绕直管稳态流动中的压降与壁面剪切力计算展开,项目基于有限元方法完成几何建模、网格划分与求解设置,可用于验证达西公式、分析壁面剪应力分布规律,并…

2026/10/18 18:01:50 阅读更多 →
Git多人协作实战:分支策略、提交规范与冲突处理完整指南

Git多人协作实战:分支策略、提交规范与冲突处理完整指南

这几天我带着组里的几个新同学做了一次完整的Git多人项目开发流程演练,从分支规划、日常提交、合并请求,到冲突处理、CI门禁,把一条真实团队日常走了一遍。演练结束后我自己也把整个流程重新捋了一遍,发现很多东西如果不亲手跑一次…

2026/10/18 18:01:50 阅读更多 →
Python脚本一键获取QQ号全部群组列表:原理、实现与避坑指南

Python脚本一键获取QQ号全部群组列表:原理、实现与避坑指南

简介:一套面向Python爬虫初学者及数据分析师的轻量脚本工具,用于根据指定QQ号批量查询其加入的全部群组信息,免去逐群手动翻看资料的重复劳动。其中qq_count.py负责快速校验目标账号有效性并初步感知其活跃群关系,qq_count_detail…

2026/10/18 18:01:50 阅读更多 →
Linux磁盘空间排查:用du与df快速定位文件夹占用

Linux磁盘空间排查:用du与df快速定位文件夹占用

先说说这个标题背后的真实场景。绝大多数人搜这句话的时候,服务器磁盘已经快满了,或者某个业务目录增长异常,需要立刻定位到底哪个文件夹在吃空间。我自己处理过的磁盘告警少说也有几十次,从一句话的需求出发,实际上要…

2026/10/18 18:01:50 阅读更多 →
科技项目管理办法编写指南:从框架到验收的落地要点

科技项目管理办法编写指南:从框架到验收的落地要点

简介:《科技项目管理办法.doc》是一份面向企业科技管理人员、项目负责人及研发团队的制度规范文档,用于解决科技项目从立项到验收全流程的管理依据问题。文档围绕“统一规划、集中管理、缜密实施”原则展开,明确了发电关键技术、电站建设运行…

2026/10/18 18:01:50 阅读更多 →
Git多人项目开发流程实战:分支模型、代码评审与冲突处理

Git多人项目开发流程实战:分支模型、代码评审与冲突处理

很多同学学会 Git 的第一天,基本都是从git commit和git push开始。一个人写仓库怎样都好说,今天merge明天rebase,大不了reset回滚,反正卷宗里只有自己一个人,怎么折腾都有救。可一旦进入“Git 多人项目开发流程演练”的…

2026/10/18 18:00:49 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →