尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

InternVL Liger Kernels优化实战:显存占用大幅降低的秘诀 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/InternVLInternVL是上海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 Kernels1. 安装依赖先安装 Liger Kernels 库需要 PyTorch 2 以上pip install liger-kernel2. 训练脚本加一个参数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 等语言模型中RMSNorm、SwiGLU、CrossEntropyLoss等类原地替换成 Liger 的融合版本——权重、结构、接口完全不变只是底层执行更快、更省。InternVL 的视觉塔 InternViT 同样支持补丁函数定义在 internvit_liger_monkey_patch.py它会把视觉塔中的rms_norm/layer_norm替换为LigerRMSNorm与LigerLayerNorm并从 patch/init.py 统一导出。小贴士若你在微调 InternViT 也想要显存收益把上面代码中被注释的apply_liger_kernel_to_internvit()启用即可。四、实战组合拳让显存再降一个台阶Liger Kernels 不是孤立存在的InternVL 官方脚本中它常与其他优化叠加使用效果更佳优化手段说明参考位置Liger Kernels融合算子压缩激活显存本文主题Flash Attention 2注意力显存 O(n²) → O(n)internvl_chat_finetune.pyDeepSpeed ZeRO分片优化器状态/梯度/参数zero_stage3_config.jsonPacked Training样本拼接减少 padding 浪费patch/init.py以 38B 模型的 stage2 脚本为例它同时开启了 Flash Attention、ZeRO-3 和 Liger这套组合是官方在有限 GPU 上训练 38B~78B 大模型的标准答案值得直接参考。五、常见问题 FAQQ1开了--use_liger True会影响训练精度吗不会。Liger 是数学上等价的融合实现输出与标准算子在数值误差范围内一致属于免费午餐型优化。Q2小模型1B/2B有必要开吗小模型本身显存压力不大开启后收益主要体现在吞吐提升同样的卡跑更大 batch成本为零建议默认开启。Q3internvl_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),仅供参考
返回列表