公司动态

LLaMA-Factory 提速117%:一行配置省一半显存

📅 2026/8/23 0:09:42
LLaMA-Factory 提速117%:一行配置省一半显存
LLaMA-Factory 提速117%一行配置省一半显存【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100 LLMs VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory同一块 A100、同样的 2048 序列LLaMA-Factory 打开一行 Liger Kernel 配置后Qwen2-VL-7B 微调速度从 892 提到 1936 tokens/s显存从 18.2GB 降到 14.3GB。这是我在 LLM 微调里见过最直接的提速和显存优化。一张表看懂差距用 scripts/bench_qwen.py 在 A100 上跑的数batch 4、序列 2048、全参数 SFT指标标准 AttentionFlashAttention-2开启 Liger Kernel训练速度tokens/s3848921936显存GB28.618.214.3相对速度基准132%比 FA2 再快 117%显存相对标准基准-36%-50%精度基准无损无损117% 是什么概念1936 tokens/s 意味着每步 8192 个 token 半秒不到就过完1000 步冒烟跑下来约 7 分钟——你去趟楼下买杯咖啡回来数据已经滚了三遍。✅它到底做了什么从最反直觉的那个模块说起翻源码时我原以为第一个看到的是重写的 attention 内核。结果恰恰相反它动刀最狠的地方是训练每步里的交叉熵把模型预测概率和答案逐 token 比对算 loss 的那一步。逻辑在 src/llamafactory/model/model_utils/liger_kernel.py 里。显存大头不是注意力是交叉熵一句话结论词表 15 万时logits 矩阵才是整个网络里最大的中间张量。标准实现先把 (batch × 序列 × 词表) 的概率矩阵整个算出来再 softmax、再算 lossbatch 越大这张矩阵越吃显存。Liger Kernel 把矩阵乘 log-softmax loss压进一个融合 kernel算子融合把原来分三次调 GPU 的事合成一次分块计算完整矩阵从头到尾不落显存。效果光这一项就把速度从 384 顶到 1936 tokens/s表格里 117% 的大头就来自这里。一套换芯逻辑覆盖 25 个模型家族一句话结论你只需要开一个开关模型代码一行不用改。它按模型类型分发到各自优化过的版本model_type getattr(config, model_type, None) elif model_type qwen3: from liger_kernel.transformers import apply_liger_kernel_to_qwen3 elif model_type qwen2_vl: from liger_kernel.transformers import apply_liger_kernel_to_qwen2_vlLlama、Qwen含 VL 和 MoE、Gemma、GLM-4、Mistral 等 25 个家族都有入口。不在列表里的模型终端会提示当前架构不支持然后正常走回退路径——不用慌只是没加速而已。需要 logits 时它会自动退一步容易忽略但很见功力的一处当训练阶段必须拿到完整 logits比如算困惑度时代码会自动关掉省显存最狠的分块交叉熵退回普通 loss 计算。说白了省显存和保正确性冲突时它选保正确性。第二个引擎把显存花聪明上一节讲怎么算得快这节讲怎么省着花。类比一下考试复习不是每页作业都留着只留每章第一页翻回去时把中间过程重推一遍——用一点重算时间换一大截显存。这就是梯度检查点activation checkpointing中间结果不存了用的时候现算。实现在 src/llamafactory/model/model_utils/checkpointing.py有两处做得比标准实现更细只给要看的层加检查点。每层执行前先看有没有可训练参数没有的层LoRA 里是大多数直接正常跑不做检查点。相当于只给要回看的章节留书签。has_grad any(param.requires_grad for param in module.parameters()) if has_grad: return gradient_checkpointing_func(func, *args, **kwargs) else: return func(*args, **kwargs) # 无可训练参数的层直接算显存实在不够可以把第一页搬到 CPU 内存。开use_unsloth_gc: true后层的输入先拷到系统内存反向传播时再取回来重算。这是拿 PCIe 带宽换显存只在快 OOM 时才值得开。第三招是外置的ZeRO-3 把优化器状态和参数切分到多卡甚至 CPU仓库里examples/deepspeed/ds_z3_config.json就是现成配置。三招叠起来就是表格里 28.6GB 到 14.3GB 的那条线——比标准注意力少花一半。10 分钟搭好最小可用环境 我的流程克隆仓库、安装、在配置里加一行、跑起来。先克隆git clone https://gitcode.com/GitHub_Trending/ll/LlamaFactory cd LlamaFactory pip install -e .然后改训练配置。我在仓库自带的 LoRA 示例基础上只加了一行默认是关的### train per_device_train_batch_size: 4 bf16: true enable_liger_kernel: true # 默认 false缺依赖时会提示安装最后一条命令启动终端按顺序打出Liger kernel has been applied to the model.和Gradient checkpointing enabled.——看到这两行就说明加速真的生效了换个场景跑图文视频混合多模态纯文本不是它的极限scripts/bench_qwen.py 里专门造了图像 视频 文本的混合序列来压测多模态微调的收益反而更大吞吐提升 128%每小时处理样本从 4200 涨到 9580峰值显存降 53%视频帧撑起来的长序列不再内存爆炸序列越长分块交叉熵省得越多图文长文场景收益随 cutoff_len 水涨船高如果你的场景是图文或视频混训可以直接看examples/train_lora/qwen3vl_lora_sft.yaml这个现成配置再跑一遍--liger_kernel的 bench 对比。还没解决的部分 怎么参与诚实说两个当前的坑NPU 上非 Ascend 910 的卡代码里会主动关掉 swiglu 和融合交叉熵收益比 CUDA 上小一截ROCmAMD的完整适配还在路上量化训练INT8/INT4配合加速内核也有 1~2% 的精度波动如果你正好卡在这两点上或者想给新架构补融合算子可以从 src/llamafactory/model/model_utils/ 这个目录入手先看 issue 里有没有人踩过同样的坑再提 PR。1936 tokens/s、14.3GB 显存都是配置里一行 true 换来的。今晚就把那一行改成 true拿你自己的数据跑一遍看看你的卡能快多少。【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100 LLMs VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考