InternVL Liger Kernels优化实战:显存占用大幅降低的秘诀
2026/9/16 10:55:06 网站建设 项目流程

InternVL Liger Kernels优化实战:显存占用大幅降低的秘诀

【免费下载链接】InternVL[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型项目地址: https://gitcode.com/GitHub_Trending/in/InternVL

InternVL是上海AI实验室开源的接近 GPT-4o 表现的多模态对话模型家族(CVPR 2024 Oral),从 1B 小模型一路覆盖到 240B 巨兽。想自己微调 InternVL 的朋友常卡在同一个坎上:显存不够用。而仓库内置的Liger Kernels优化,只需在训练命令里加一个参数--use_liger True,就能在不改一行模型代码的前提下大幅压缩训练显存占用——这正是本文要讲的秘诀。

一、Liger Kernels 是什么?为什么能省显存

训练大模型时,最"吃显存"的往往不是参数本身,而是前向计算中产生的中间激活张量:标准的 RMSNorm、SwiGLU、CrossEntropy 等算子会各自生成多个临时张量,逐层累积,动辄比模型参数本身还大。

Liger Kernels的思路是:用 Triton 把这些算子融合成单块 GPU kernel 执行。以 SwiGLU 为例,标准实现会分配 W1、W2 激活、乘积、最终结果等 4 份临时张量;融合版一次读取、原地计算,显存占用可减少约 50%,速度还能提升 2~3 倍。RMSNorm、LayerNorm、CrossEntropy 等核心算子同理。

对 InternVL 来说,收益直接体现在:

  • ✅ 同等 GPU 上可用更大的 batch size,训练吞吐更高
  • ✅ 训练 78B、241B 级别大模型时,更容易在有限卡数上跑起来
  • ✅ 无需修改模型源码,训练精度不受影响

二、快速上手:三步启用 Liger Kernels

1. 安装依赖

先安装 Liger Kernels 库(需要 PyTorch 2 以上):

pip install liger-kernel

2. 训练脚本加一个参数

InternVL 的训练入口 internvl_chat_finetune.py 已内置use_liger开关,在任意训练命令里追加即可:

python internvl_chat/internvl/train/internvl_chat_finetune.py \ --model_name_or_path /path/to/InternVL2_5-8B \ --data_path /path/to/train_data.json \ --use_liger True \ ...

3. 验证是否生效

训练日志开头若看到Liger kernel applied to InternViT一类提示,说明融合算子已替换成功。

💡 官方所有 InternVL 2.5 / 3.0 的 stage2 与 MPO 训练脚本已默认开启该参数,直接照着跑即可,例如 internvl2_5_38b_qwen2_5_32b_dynamic_res_stage2.sh。

三、原理解析:一行参数背后的"猴子补丁"

--use_liger True在代码里做了什么?看 internvl_chat_finetune.py 中的处理逻辑:

if model_args.use_liger: from internvl.patch import apply_liger_kernel_to_internvit from liger_kernel.transformers import ( apply_liger_kernel_to_llama, apply_liger_kernel_to_qwen2) apply_liger_kernel_to_llama() apply_liger_kernel_to_qwen2() # apply_liger_kernel_to_internvit()

它通过monkey patch(猴子补丁)技术,把 Llama / Qwen2 等语言模型中RMSNormSwiGLUCrossEntropyLoss等类原地替换成 Liger 的融合版本——权重、结构、接口完全不变,只是底层执行更快、更省。

InternVL 的视觉塔 InternViT 同样支持:补丁函数定义在 internvit_liger_monkey_patch.py,它会把视觉塔中的rms_norm/layer_norm替换为LigerRMSNormLigerLayerNorm,并从 patch/init.py 统一导出。

小贴士:若你在微调 InternViT 也想要显存收益,把上面代码中被注释的apply_liger_kernel_to_internvit()启用即可。

四、实战组合拳:让显存再降一个台阶

Liger Kernels 不是孤立存在的,InternVL 官方脚本中它常与其他优化叠加使用,效果更佳:

优化手段说明参考位置
Liger Kernels融合算子,压缩激活显存本文主题
Flash Attention 2注意力显存 O(n²) → O(n)internvl_chat_finetune.py
DeepSpeed ZeRO分片优化器状态/梯度/参数zero_stage3_config.json
Packed Training样本拼接,减少 padding 浪费patch/init.py

以 38B 模型的 stage2 脚本为例,它同时开启了 Flash Attention、ZeRO-3 和 Liger,这套组合是官方在有限 GPU 上训练 38B~78B 大模型的"标准答案",值得直接参考。

五、常见问题 FAQ

Q1:开了--use_liger True会影响训练精度吗?不会。Liger 是数学上等价的融合实现,输出与标准算子在数值误差范围内一致,属于"免费午餐"型优化。

Q2:小模型(1B/2B)有必要开吗?小模型本身显存压力不大,开启后收益主要体现在吞吐提升(同样的卡跑更大 batch),成本为零,建议默认开启。

Q3:internvl_chat_gpt_oss 目录支持吗?GPT-OSS 变体暂不支持,其训练脚本中该参数会直接抛出NotImplementedError,见 internvl_chat_gpt_oss 的 finetune 脚本,请勿在该分支启用。

六、总结:一张清单回顾秘诀

  • 🎯核心操作pip install liger-kernel+ 训练命令加--use_liger True
  • 🔍原理:Triton 融合 kernel 替代 RMSNorm/SwiGLU/CrossEntropy,激活显存减半
  • 🐒机制:monkey patch 原地替换算子类,零侵入模型代码
  • 🚀组合:与 Flash Attention 2、DeepSpeed ZeRO、Packed Training 叠加,冲击 78B/241B 大模型训练
  • 📂关键文件:internvl_chat/internvl/train/internvl_chat_finetune.py、internvl_chat/internvl/patch/internvit_liger_monkey_patch.py、requirements/internvl_chat.txt

显存不再是微调 InternVL 的拦路虎——加上这一行参数,把省下的显存留给更大的 batch 吧!🚀

【免费下载链接】InternVL[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型项目地址: https://gitcode.com/GitHub_Trending/in/InternVL

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询