说明

  • 文中部分内容和数据来自于网络资料仅供学习和交流使用。

一 框架基本介绍

1.1 LLaMA-Factory

  • LLaMA-Factory是一个功能全面的通用微调平台,支持超过450种文本模型和150种多模态模型。它提供了从预训练到SFT、DPO、PPO等完整的训练链路,具有友好的Web界面和灵活的配置文件。该框架设计简洁易用,适合从初学者到专业开发者的各种用户群体,尤其适合需要快速搭建微调流程的场景。
  • 官网链接https://github.com/hiyouga/LLaMA-Factory
  • 社区链接:GitHub Issues/Discussions

1.2 Unsloth

  • Unsloth专注于速度优化,通过Triton重写和手动反向传播等技术,实现了比传统框架更快的训练速度和更高的内存效率。它支持LoRA/QLoRA等轻量化训练方法,分为免费版和Pro版。免费版适合个人开发者和小型项目,Pro版则提供更多高级功能但需要联网验证。
  • 官网链接https://unsloth.ai/
  • 社区链接https://discord.gg/unslothai

1.3 EasyR1

  • EasyR1是一个专注于强化学习的微调框架,支持GRPO、Reinforce++、ReMax、RLOO等多种强化学习算法。它主要针对Llama、Qwen、DeepSeek等系列模型,提供了多节点分布式支持,适合需要深度强化学习优化的场景,如复杂对话系统和Agent训练。

官网链接https://github.com/internLM/EasyRL
社区链接:GitHub Issues/Discussions

1.4 Axolotl

1.5 Swift

  • Swift是一个全链路解决方案,支持450+文本模型和150+多模态模型,提供了从数据处理到训练、推理部署的完整流程。它集成了Liger-Kernel和UnSloth等优化技术,具有良好的训练效率和内存利用率,适合需要端到端解决方案的团队。
  • 官网链接https://github.com/modelscope/swift
  • 社区链接:GitHub Issues/Discussions

1.6 XTuner

  • XTuner是一个高效轻量的微调框架,主要支持InternLM、Llama、ChatGLM等模型。它通过自动算子分发等技术,实现了8GB GPU即可微调7B模型的高效性能。XTuner适合资源受限但需要高效微调的场景,如个人开发者和小型团队。

官网链接https://github.com/InternLM/xtuner
社区链接:GitHub Issues/Discussions

1.7 PEFT+DeepSpeed

  • PEFT+DeepSpeed是一个底层组件组合方案,PEFT提供了参数高效微调技术,DeepSpeed则提供了分布式训练和内存优化。这种组合方案具有100%的技术控制度,适合需要深度定制和性能优化的场景,但需要深入理解底层原理和大量代码开发。

  • PEFT官网链接https://github.com/huggingface/peft

  • DeepSpeed官网链接https://www.deepspeed.ai/

  • 社区链接:GitHub Issues/Discussions

二 框架全方位对比

2.1 框架核心特性

框架 核心定位 支持模型数量 训练方式 分布式支持 数据安全 收费模式
LLaMA-Factory 通用微调平台 450+文本+150+多模态 预训练/SFT/DPO/PPO/KTO/ORPO ✅ 原生支持 ✅ 完全本地 完全免费
Unsloth 速度优化 主流LLM LoRA/QLoRA ❌ 免费版不支持 ⚠️ Pro版需联网 免费版+Pro版
EasyR1 强化学习专用 Llama/Qwen/DeepSeek系列 GRPO/Reinforce++/ReMax/RLOO ✅ 多节点支持 ✅ 完全本地 完全免费
Axolotl 灵活配置 主流开源模型 全参/LoRA/QLoRA ✅ 支持 ✅ 完全本地 完全免费
Swift 全链路解决方案 450+文本+150+多模态 全方位训练方式 ✅ 支持 ✅ 完全本地 完全免费
XTuner 高效轻量 InternLM/Llama/ChatGLM等 预训练/SFT/Agent微调 ✅ 多节点支持 ✅ 完全本地 完全免费
PEFT+DeepSpeed 底层组件 理论上所有 自定义实现 ✅ 完全可控 ✅ 完全本地 完全免费

2.2 训练效率与性能

框架 训练速度 内存效率 GPU利用率 特殊优化
LLaMA-Factory ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ FlashAttention-2, Unsloth集成, NEFTune
Unsloth ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ Triton重写, 手动反向传播, 零精度损失
EasyR1 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ HybridEngine, vLLM SPMD, 无填充训练
Axolotl ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ xformers, Flash Attention, multipacking
Swift ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ Liger-Kernel, UnSloth集成
XTuner ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 自动算子分发, 8GB微调7B
PEFT+DeepSpeed ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ZeRO优化, 参数卸载, 自定义优化

2.3 功能完整性对比

框架 预训练 SFT RLHF/DPO 多模态 量化训练 推理部署 Web界面
LLaMA-Factory
Unsloth
EasyR1 ⚠️ 基础 ✅ 专业 ✅ 视觉
Axolotl
Swift
XTuner
PEFT+DeepSpeed

2.4 数据安全与合规性

框架 离线部署 数据本地化 外部依赖 企业合规 审计能力
LLaMA-Factory ✅ 完全支持 ✅ 100%本地 ✅无强制依赖 ✅ 高 ✅ 完整日志
Unsloth免费版 ✅ 支持 ✅ 本地 ✅ 无 ✅ 高 ⚠️ 有限
Unsloth Pro版 ⚠️ 需联网验证 ⚠️ 部分限制 ⚠️ 许可证验证 ❌ 低 ❌ 受限
EasyR1 ✅ 完全支持 ✅ 100%本地 ✅ 无强制依赖 ✅ 高 ✅ 完整日志
Axolotl ✅ 完全支持 ✅ 100%本地 ✅ 无强制依赖 ✅ 高 ✅ 完整日志
Swift ✅ 完全支持 ✅ 100%本地 ✅ 无强制依赖 ✅ 高 ✅ 完整日志
XTuner ✅ 完全支持 ✅ 100%本地 ✅ 无强制依赖 ✅ 高 ✅ 完整日志
PEFT+DeepSpeed ✅ 完全支持 ✅ 100%本地 ✅ 无强制依赖 ✅ 高 ✅ 完全可控

2.5 成本结构分析

框架 许可费用 开发成本 维护成本 培训成本 扩展成本 总体TCO
LLaMA-Factory 免费 ⭐⭐⭐⭐⭐
Unsloth免费版 免费 高(需升级) ⭐⭐⭐
Unsloth Pro版 订阅制 ⭐⭐
EasyR1 免费 ⭐⭐⭐⭐
Axolotl 免费 ⭐⭐⭐
Swift 免费 ⭐⭐⭐⭐
XTuner 免费 ⭐⭐⭐⭐
PEFT+DeepSpeed 免费 ⭐⭐

2.6 PEFT+DeepSpeed组合方案分析

对比维度 PEFT+DeepSpeed 现成框架(LLaMA-Factory等)
技术控制度 完全可控,每个参数都可调整 受框架封装限制
性能优化 可针对特定硬件深度优化 通用优化,可能不是最优
问题定位 需要深入理解底层原理 框架提供错误处理
开发效率 需要大量代码开发 配置文件即可使用
维护复杂度 需要跟踪多个库版本兼容性 框架统一管理依赖
扩展性 可以添加任何自定义功能 受框架功能限制
团队要求 需要深度ML工程师 普通工程师即可

2.7 内存使用效率对比

模型规模 PEFT+DeepSpeed ZeRO-3 LLaMA-Factory Unsloth EasyR1
7B模型 16GB (优化后) 20GB 10GB 18GB
13B模型 28GB (优化后) 35GB 18GB 32GB
30B模型 65GB (优化后) 80GB 38GB 75GB
70B模型 150GB (优化后) 180GB 85GB 160GB

2.8 框架选择决策

企业类型 数据安全(40%) 技术控制(25%) 成本效益(20%) 上手难度(15%) 推荐方案
大型金融 极高 PEFT+DeepSpeed
大型科技 极高 EasyR1+自研
中型制造 极高 XTuner
小型企业 极高 极高 LLaMA-Factory
医疗机构 极高 LLaMA-Factory+EasyR1

2.9 总结

  • 通过对7种主流大模型微调框架的全面对比,我们可以得出以下结论:
  1. LLaMA-Factory:是一个功能全面、易用性高的通用微调平台,适合大多数场景,尤其是需要快速搭建微调流程的用户。
  2. Unsloth:在速度和内存效率方面表现出色,适合对训练速度要求高的场景,但Pro版的联网验证可能限制其在某些企业环境中的使用。
  3. EasyR1:专注于强化学习,适合需要深度强化学习优化的场景,如复杂对话系统和Agent训练。
  4. Axolotl:配置灵活,适合有经验的开发者,但开发和维护成本较高。
  5. Swift:提供全链路解决方案,适合需要端到端解决方案的团队。
  6. XTuner:高效轻量,适合资源受限的场景,如个人开发者和小型团队。
  7. PEFT+DeepSpeed:技术控制度最高,但开发和维护成本也最高,适合需要深度定制和性能优化的大型企业。

2.10 使用建议

  1. 根据团队能力选择

    • 团队规模小、ML经验有限:优先选择LLaMA-Factory或XTuner
    • 有专业ML团队:可以考虑Axolotl或PEFT+DeepSpeed
    • 需要强化学习:选择EasyR1
  2. 根据资源情况选择

    • GPU资源有限:选择Unsloth或XTuner
    • 拥有多个GPU节点:可以考虑支持分布式训练的框架,如EasyR1、XTuner或PEFT+DeepSpeed
  3. 根据业务需求选择

    • 需要快速迭代:LLaMA-Factory
    • 需要强化学习优化:EasyR1
    • 需要多模态支持:LLaMA-Factory或Swift
  4. 数据安全考虑

    • 对数据安全要求极高:选择完全本地部署的框架,如LLaMA-Factory、EasyR1、Axolotl、Swift、XTuner或PEFT+DeepSpeed
    • 避免使用需要联网验证的框架版本,如Unsloth Pro版
  5. 性能优化建议

    • 优先使用LoRA/QLoRA等轻量化训练方法
    • 充分利用各框架提供的特殊优化功能,如FlashAttention-2、Triton重写等
    • 针对特定硬件进行优化,如使用PEFT+DeepSpeed组合方案
  6. 模型选择建议

    • 小规模模型(7B-13B):适合大多数场景,训练成本低
    • 大规模模型(30B-70B):适合对模型性能要求高的场景,但训练成本较高
  7. 部署建议

    • 训练完成后,考虑使用专门的推理框架进行部署,如vLLM、TensorRT-LLM等
    • 对于需要低延迟推理的场景,可以考虑模型量化和蒸馏技术

2.11 未来发展趋势

  1. 更高效的训练方法:随着硬件和软件技术的不断发展,训练效率将继续提高,内存使用将进一步降低。
  2. 更好的易用性:框架将提供更友好的用户界面和更简单的配置方式,降低使用门槛。
  3. 更全面的多模态支持:随着多模态大模型的普及,各框架将加强对多模态模型的支持。
  4. 更强大的强化学习能力:强化学习将成为微调的重要方向,各框架将提供更丰富的强化学习算法。
  5. 更好的分布式支持:随着模型规模的不断增大,分布式训练将成为标配,各框架将进一步优化分布式训练性能。

三 Unsloth多卡并行训练功能缺失

  • 可以通过一些方法“曲线救国”,充分利用多卡资源。

3.1 Unsloth 免费版不直接支持多卡

  • Unsloth 的核心优势在于其针对单张 GPU 进行了极其极致的优化,包括手写 GPU 内核、动态计算优化等,从而实现了比传统方法(如 HF Transformers)更快的训练速度和更低的显存占用。这些优化目前主要集中在单卡并行计算上。

  • 要实现高效的多卡训练,通常需要复杂的分布式通信(如 PyTorch 的 DDP)、数据分片和同步策略。将这些与 Unsloth 现有的单卡优化内核无缝集成,并保证其加速效果和精度,在技术上是一个不小的挑战。因此,官方目前的策略是先在单卡上做到极致,再逐步扩展分布式能力。其企业版或未来版本可能会提供更好的多卡支持,但开源版本目前确实需要借助其他工具。

3.2 使用双卡训练的几种解决方案

  • 虽然 Unsloth 自身不支持多卡,但你可以通过以下几种方式在双卡上利用它。下图概括了这些方案及其适用场景,你可以根据自己的需求快速了解:

方案一: 数据并行

方案二: 模型并行

方案三: 混合策略

方案四: 替代工具

双卡训练需求

选择方案

核心思路
使用 Accelerate/DeepSpeed 进行分布式

操作方式
accelerate launch / deepspeed 启动训练

优点
兼容性好、生态成熟、社区支持丰富

缺点
配置较复杂、无法直接利用
Unsloth 的单卡极致加速

适用场景
需要严格模型对齐、
熟悉分布式训练的用户

核心思路
将大模型切分到不同卡上

操作方式
手动或借助工具切分模型

优点
理论上可训练超大模型

缺点
工程复杂度高、通信开销大、
需修改模型代码、与Unsloth兼容性存疑

适用场景
科研探索、极端需求、
愿意投入大量时间调试

核心思路
1卡跑Unsloth训练
另1卡跑推理/辅助任务

操作方式
进程间通信或脚本调度

优点
简单直接、资源利用率高、
能最大化利用Unsloth的单卡优势

缺点
并行任务需独立管理、
非严格意义上的“训练加速”

适用场景
需要同时训练和推理、
数据预处理和后处理并行

核心思路
选择原生支持多卡的工具

操作方式
改用 LLaMA-Factory / Colossal-AI

优点
原生支持多卡、
无需额外配置、社区实践多

缺点
无法享受Unsloth的极致单卡加速

适用场景
追求多卡训练的稳定性和效率、
不执着于Unsloth

3.2.1 方案一:使用 Accelerate 或 DeepSpeed 进行数据并行(最主流)

  • 目前最推荐、社区最广泛实践的方法。Unsloth 官方也明确支持通过 Accelerate 和 DeepSpeed 等库来实现多GPU配置。

核心思路

  1. Unsloth 负责单卡优化: Unsloth 仍然负责在每个 GPU 上进行其擅长的单卡计算优化。
  2. Accelerate/DeepSpeed 负责分布式协调: Accelerate 或 DeepSpeed 负责管理多 GPU 之间的通信、数据分片(Data Parallel)、梯度同步等分布式逻辑。
  • 操作步骤概览
# 1. 安装依赖
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install accelerate deepspeed
# 2. 使用 accelerate launch 启动训练脚本(而不是 python)
accelerate launch --num_processes=2 your_unsloth_training_script.py
# 或者使用 deepspeed
deepspeed --num_gpus=2 your_unsloth_training_script.py --deepspeed ds_config.json

关键配置要点

  • 启动方式:必须使用 accelerate launchdeepspeed 命令启动脚本,不能直接用 python 运行。
  • 模型加载:在加载模型时,通常需要移除 device_map="auto" 参数(由 Accelerate 自动分配),或者将其设为 "balanced"。让 Accelerate 来管理设备分配。
  • 训练配置:在 SFTConfigTrainingArguments 中,设置 per_device_train_batch_size(每个卡上的批大小),总批大小 = per_device_train_batch_size * num_processes。同时开启gradient_checkpointing=True 以节省显存。

💡 小贴士:Hugging Face 的 Accelerate 库旨在简化分布式训练的配置,它与 TrainerSFTTrainer 有深度集成。你可以通过 accelerate config 命令快速生成配置文件,它会一步步引导你设置多GPU环境。

优点

  • 兼容性好:利用了成熟的分布式训练框架。
  • 生态丰富:有大量的教程和社区经验可以参考。
  • Unsloth 仍在工作:在每个 GPU 内部,Unsloth 的优化依然生效,只是由外部框架来协调多卡。
    缺点
  • 配置有一定复杂性:相比单卡训练,需要理解一些分布式概念。
  • 加速效果:整体的训练速度提升不会是单卡的两倍(存在通信开销),但肯定比只用一张卡快。

3.2.2 方案二:模型并行(Pipeline Parallelism)

  • 如果遇到模型大到单张卡无法放下的情况,数据并行就失效,这时就需要模型并行。
  • 核心思路:将模型的不同层(或者模型参数)切分到不同的 GPU 上,流水线式地处理数据。

操作方式

  1. 这通常需要对模型代码进行修改,或使用专门支持模型并行的库(如 DeepSpeed 的 pipeline 模式、Megatron-LM)。
  2. 你可以尝试将模型用 device_map 手动分配到不同的卡上,但这与 Unsloth 的加载方式可能存在冲突,需要非常小心地调试。

优点:理论上可以训练非常大的模型,不受单卡显存限制。
缺点工程复杂度极高:调试非常困难,通信开销可能巨大,导致实际加速比不理想。
与 Unsloth 兼容性存疑:Unsloth 的优化内核是为单卡设计的,强行进行模型并行可能会破坏其优化逻辑,甚至无法运行。不推荐普通用户尝试

3.2.3 方案三:混合策略(1卡训练 + 1卡推理/辅助)

  • 一种非常实用且巧妙的“双卡利用”思路,虽然它不是在“训练”时并行,但能有效提升整体工作效率。

核心思路

  • GPU 0:运行 Unsloth 的训练任务。
  • GPU 1:同时运行推理服务(如用 vLLM、Text-Generation-Inference)、数据预处理、日志记录、模型评估或生成训练数据。

操作方式

  1. 分别编写两个独立的脚本:train.pyinference_service.py(或 data_preprocess.py)。
  2. train.py 中,通过环境变量 CUDA_VISIBLE_DEVICES=0 或代码中指定 device=0,确保训练只在 GPU 0 上运行。
  3. inference_service.py 中,通过 CUDA_VISIBLE_DEVICES=1device=1,确保推理只在 GPU 1 上运行。
  4. 使用命令行工具(如 nohup python train.py & nohup python inference_service.py &)或进程管理工具(如 supervisor)同时启动两个脚本。

优点

  • 简单直接:无需修改复杂的分布式代码。
  • 资源利用率高:两块卡都能满载工作,不会浪费
  • Unsloth 优势最大化:完全在单卡上发挥其极致加速效果。

缺点

  • 并不是在同一个训练任务中并行加速两个进程。
  • 需要手动协调两个进程的调度和数据流。

⚠️ 注意:确保你的主板电源供应和散热足以支撑两块卡同时高负载运行。


3.2.4 方案四:使用替代框架(如 LLaMA-Factory、Colossal-AI)

  • 如果有对多卡训练的需求,且希望有更好的原生支持,可以考虑直接使用原生就设计并优化了多卡训练的框架
  • 核心思路:放弃 Unsloth,转而使用 LLaMA-Factory 或 Colossal-AI 等工具。

优点

  • 原生支持多卡:配置简单,通常只需几行代码或一个配置文件即可开启多卡并行。
  • 社区实践丰富:这些工具在多卡训练方面有大量的实践案例和教程。
    缺点
  • 无法享受 Unsloth 的极致单卡加速:在单卡场景下,它们的训练速度和显存优化通常不如 Unsloth。

3.3 解决方案对比与选择建议

特性维度 方案一:Accelerate/DeepSpeed 方案二:模型并行 方案三:混合策略 方案四:替代框架
实现复杂度 ⭐⭐⭐ (中等) ⭐⭐⭐⭐⭐ (极高) ⭐ (简单) ⭐⭐ (较低)
多卡训练加速比 ⭐⭐⭐⭐ (接近理论值,有通信开销) ⭐⭐ (取决于模型和实现) 不直接加速训练任务 ⭐⭐⭐⭐ (通常较好)
Unsloth 优化保留 部分保留 (每个卡内) 可能完全丢失 完全保留 (训练卡) 完全无
模型显存需求 适用于模型能单卡放下 适用于模型单卡放不下 无特殊要求 无特殊要求
调试难度 ⭐⭐⭐ (需熟悉分布式概念) ⭐⭐⭐⭐⭐ (非常困难) ⭐ (主要是进程管理) ⭐⭐ (相对简单)
推荐指数 ⭐⭐⭐⭐⭐ (首选推荐) ⭐⭐ (仅特殊场景) ⭐⭐⭐⭐ (实用主义之选) ⭐⭐⭐ (放弃Unsloth时)

🎯 选择建议

  1. 如果你需要严格的多卡数据并行训练优先选择方案一。这是最符合你需求、官方支持、社区实践最多的方案。投入一点时间学习 Accelerate 的配置是值得的。
  2. 如果你遇到显存瓶颈(模型太大)模型能单卡放下,用方案一;模型单卡放不下,可谨慎尝试方案二,但要做好踩坑的准备,或考虑使用专门为超大规模模型设计的框架(如 Megatron-LM)。
  3. 如果你更看重整体工作效率而非单次训练速度强烈推荐方案三。这是一种非常“聪明”的硬件利用方式,能让你同时推进多个任务,总体效率更高。
  4. 如果你对分布式训练配置感到困惑,或希望有最简单的多卡体验可以考虑方案四,暂时放弃 Unsloth 的单卡优势,换取更简单的多卡训练流程。

3.4 总结

Unsloth 免费版不直接支持多卡分布式训练,但这不意味着双卡没用。方案一(使用 Accelerate/DeepSpeed)是解决你“双卡训练”问题最标准、最可靠的路径

在尝试任何方案前,请务必:

  • 确保你的环境配置正确:Unsloth 对 CUDA 和 PyTorch 版本有特定要求,务必使用兼容的版本。
  • 从最小示例开始:不要一上来就上大数据集和大模型。先用一个小模型、小数据集验证你的多卡配置是否生效。
  • 善用监控工具:使用 nvidia-smiwatch -n 1 nvidia-smi 或像 py3nvml 这样的工具实时监控你的 GPU 显存占用和利用率,判断并行是否真的在工作。
  • 查阅官方文档和社区:Unsloth 和 Accelerate 的官方文档是你最好的朋友。遇到问题,先去 GitHub Issues 里搜一搜,很可能别人也遇到过。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐