用途
360-LLaMA-Factory 是由 360 智脑团队开发的开源项目,基于广泛使用的 LLM 后训练框架 LLaMA-Factory,加入了序列并行(Sequence Parallelism,简称 SP),特别是 zigzag-ring-attention,以支持长上下文训练。其目的是解决多模态 LLM 处理更长 token 序列时的训练瓶颈。项目是 LLaMA-Factory 的直接替代品,在未启用 SP 时行为与原版完全一致。
主要能力
- 支持大多数后训练方法,包括 SFT 和 DPO(及其变体)。
- 已支持 Qwen3 的序列并行(目前仅默认 zigzag-ring)。
- 已支持 Qwen-VL 模型(Qwen-2/2.5-VL)的序列并行(目前仅默认 zigzag-ring)。
- 已添加并测试 DeepSpeed Ulysses,正确性和速度经过验证。
- 提供全参数后训练长度基准:在 8 x A800 使用 SP、zero3-offload 和梯度检查点(无其他优化)下,全参数 SFT 最大长度可达 210k(7B)和 128k(72B);全参数 DPO 可达 84k(7B)和 46k(72B)。
- 通过对比中间值和损失曲线(SP=1 与 SP=2)验证了正确性,SFT 和 DPO 损失曲线高度重叠。
- 速度测试:7B 模型 28k 序列长度下,DeepSpeed Ulysses 与 zigzag ring 训练速度几乎相同,约 15 分钟 64 步。
使用方式
- 安装:可使用全新 Python 环境安装,或在已有较新 LLaMA-Factory 环境中安装最多两个额外依赖并切换至此代码库。
- 序列并行程度由参数
sequence_parallel_size控制,表示处理一个训练数据序列所需的 GPU 数量,默认 1(不启用 SP)。需设置为大于 1 的整数,通常为 2、4、8 或 16,且需整除总 GPU 数。 - 参数
cutoff_len现严格表示训练序列长度,可设为数据最大长度;数据会自动填充并预处理以适配 SP。 - 可在配置 YAML 文件中设置这两个参数,也可在命令行设置。参考
360-example.sh查看 SFT 和 DPO 示例脚本。 - 支持多节点训练,可使用 DeepSpeed 启动。
适用场景
- 需要对长序列数据进行后训练(SFT、DPO 等)的大模型研究与开发。
- 多模态大模型的长上下文训练。
- 希望以参数化方式方便地结合 unsloth 或 liger-kernel 等优化工具。
限制
- 因 Ring Flash Attention 限制,序列并行下暂不支持
attention_dropout参数;若启用序列并行时该参数非零,会被重置为零。 - 目前 Qwen3 和 Qwen-VL 的 SP 仅支持默认 zigzag-ring 模式。
- 未启用 SP 时与原版 LLaMA-Factory 行为一致。
- 其他 SP 模式(如 llama3 风格)仍在计划中。
- 损失计算中 zigzag ring attention 首次前向传播存在数值不稳定性,已通过覆盖
training_step()执行一次无效果的空前向解决。 - 当前部分优化项(如预计算参考模型 logits、logits.float()/contiguous() 优化、与 unsloth/liger kernel 全面兼容、train/pt、rm、kto 的 SP 支持等)仍在待办列表中。