LLaMa-Factory 实战:WebUI 参数详解与分布式训练
介绍 LLaMA-Factory 的 WebUI 详细参数配置,涵盖基座模型、数据集、训练阶段(RLHF/DPO/KTO)、量化方法(bitsandbytes/HQQ/EETQ)、加速算法(FlashAttention-2/Unsloth/Liger Kernel)及 RoPE 插值。同时讲解 LoRA 模型合并与量化操作,以及分布式训练方案(DDP、DeepSpeed、FSDP)的配置与使用场景。

介绍 LLaMA-Factory 的 WebUI 详细参数配置,涵盖基座模型、数据集、训练阶段(RLHF/DPO/KTO)、量化方法(bitsandbytes/HQQ/EETQ)、加速算法(FlashAttention-2/Unsloth/Liger Kernel)及 RoPE 插值。同时讲解 LoRA 模型合并与量化操作,以及分布式训练方案(DDP、DeepSpeed、FSDP)的配置与使用场景。

文章整体分为八个章节,本篇覆盖第 6-8 章。
前三个章节是基础知识:
四五两个章节通过一个法律文书摘要项目介绍 LLaMA-Factory 进行 LoRA 微调训练、评估和部署的全流程。
六七八三个章节是对 LLaMA-Factory 的扩展介绍:
这一组参数定义了基座模型:
| 字段 | 说明 |
|---|---|
| 模型名称 | 这里是模型支持的所有基座模型的列表,模型本体需要自己手动下载。注意这里有部分模型的名称是不够明确的,例如 DeepSeek-R1-7B-Distill,这个名称只说明了模型把 DeepSeek-R1 当作教师模型,学习了它的推理数据,却没说明学生模型具体是哪个。 |
| 模型路径 | 模型在本地的存储路径。 |
| 检查点路径 | 如果是从某个检查点(checkpoint)继续训练,填写检查点在本地的存储路径。如果不是,置空。 |
| 对话模板 | 不同模型的对话模板会有差异,尽量选同系列模型,至少是相近模型的模板,否则有可能报错。 |
这一组参数定义了训练用的数据集
| 字段 | 说明 |
|---|---|
| 数据路径 | 本地存储训练数据和 dataset_info.json 文件的路径 |
| 数据集 | dataset_info.json 里定义的数据集名称 |
训练阶段的这几个选项不是并列关系
| 训练阶段 | 说明 |
|---|---|
| Pre-Training | 这是大模型的起步阶段 |
| Supervised Fine-Tuning | 有监督训练 |
| Reward Modeling | RLHF(人类反馈强化学习) 的第一步,训练奖励模型 |
| PPO | RLHF(人类反馈强化学习) 的第二步,通过奖励模型的反馈,调整自身策略 |
| DPO | 直接利用人类偏好数据微调 AI |
| KTO | 在训练 AI 时,会不对称地处理正负反馈(惩罚错误比奖励正确更严厉) |
下面详细说明一下 RLHF(Reward Modeling+PPO),DPO,KTO 这三种强化学习方法
RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)的训练方式是:
其中的 PPO(Proximal Policy Optimization,近端策略优化)是一种训练 AI 模型的强化学习算法,用于让 AI 通过'试错'学习最优策略。
核心思想是让初始模型尝试不同的动作,根据奖励模型的反馈(奖励/惩罚)调整策略。
关键点在于每次更新策略时,只允许小幅调整(避免'学崩',这也是'近端'这个词的由来),像给学习过程加了'安全绳'。
主要用途是 ChatGPT 的微调、游戏 AI、机器人控制等。
DPO(Direct Preference Optimization,直接偏好优化)是一种直接利用人类偏好数据微调 AI 的方法(无需复杂奖励模型)。
核心思想传统 RL(如 PPO)需要先训练一个'奖励模型',再调整 AI 策略;DPO 跳过这一步,直接用人类标注的'A 回答比 B 好'这类偏好数据训练。
优点更简单高效,适合对齐人类价值观(比如让 AI 回答更友善)。
主要用途是专攻'人类偏好'场景。可以看作 RLHF 的简化版本
KTO(Kahneman-Tversky Optimization,卡尼曼 - 特沃斯基优化)是一种结合行为经济学理论的 AI 训练方法,灵感来自诺贝尔奖得主卡尼曼的'前景理论'。
核心思想是人类对'损失'比'收益'更敏感(比如丢 100 元的痛苦 > 捡 100 元的快乐)。所以 KTO 在训练 AI 时,会不对称地处理正负反馈(惩罚错误比奖励正确更严厉)。
主要用途是快速纠正 AI 的不良行为(不文明用语、种族歧视、安全漏洞等)
问题: 1 怎样使用 LLaMA-Factory 做 RLHF 训练?
2 DPO 和 KTO 的使用场景是什么?


| 量化等级 | 说明 |
|---|---|
| none | 不做量化 |
| 8 | 8 位量化 |
| 4 | 4 位量化 |
下面对几种量化方法做简单说明
核心思想:把模型参数从 32 位浮点数压缩成 8 位整数或 4 位整数,大幅减少内存占用。
特点:
类比:像把高清电影压缩成 MP4:
核心思想:用数学优化方法动态分配量化位数,对重要参数保留高精度,次要参数狠压缩。
特点
类比:像搬家时打包行李:
核心思想:专为 GPU 推理加速设计的量化库,优化计算过程。
特点
类比:像 F1 赛车改装:
| 方法 | 易用性 | 压缩率 | 速度 | 典型用途 |
|---|---|---|---|---|
| bitsandbytes | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | 个人快速部署 |
| HQQ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐ | 手机/嵌入式设备 |
| EETQ | ⭐ | ⭐⭐ | ⭐⭐⭐⭐ | 企业级高性能推理 |
一句话总结:
bitsandbytesHQQEETQ问题:
1 bitsandbytes、HQQ、EETQ 三种量化方法的使用场景是什么?
注意:这里的 FlashAttention-2 用于训练和推理,Unsloth 用于训练,Liger Kernel 用于推理,他们不是并列关系,可以组合使用。
核心目标:优化 Transformer 的注意力计算(避免重复读写显存)。
原理
效果
类比:像学霸改进学习方法:
核心目标:让微调(Fine-tuning)大模型更快、更省显存。
原理
效果
类比:像给汽车加装涡轮增压:
核心目标:专为推理阶段设计的 GPU 加速库。
原理
效果
类比:像快餐店出餐流程优化:
| 技术 | 适用阶段 | 优化重点 | 典型用户 |
|---|---|---|---|
| FlashAttention-2 | 训练/推理 | 注意力计算 | 研究者、企业 |
| Unsloth | 训练 | 微调效率 | 个人开发者 |
| Liger Kernel | 推理 | 高并发吞吐量 | 云服务厂商 |
一句话总结:
问题:
1 FlashAttention-2、Unsloth、Liger Kernel 三种加速方法的原理和使用场景是什么?
RoPE(Rotary Position Embedding,旋转位置编码)
RoPE Scaling 是一种让 大语言模型(LLM) 处理 超长文本 的技术,就像给模型'加长记忆',让它能读懂更长的文章或对话。
四种 Scaling 方法对比
问题:
1 RoPE 的插值方法有哪些?使用场景是什么?
这一组是通用参数,几乎训练任何大模型都会用到
| 参数名称 | 说明 |
|---|---|
| 学习率 | 0.1 一般只用于探索,没人会真的用 0.01 从头训练的标准模型初始学习率 0.001 已经快接近优化目标时做细致调整时采用 0.0001 模型接近收敛时做微调 0.00005 预训练阶段的最后微调 |
| 训练轮数 | 学习的特性较简单,1 轮即可,如果数据集太小,不应选择太多轮数,可以考虑数据增强。 |
| 最大梯度范数 | 指定一个允许的最大梯度值,防止梯度爆炸 |
| 最大样本数 | 训练时从数据集里最多取这个数量的样本 |
| 计算类型 | fp32:单精度浮点数,32 位,计算准确、稳定,但速度慢、占显存最多。 fp16:半精度浮点数,16 位,显存省一半,计算速度快,但容易溢出。 bf16:脑浮点数,16 位,显存省一半,计算速度快,不容易溢出。 pure_bf16 纯 bf16 模式,16 位,显存占用最小,但需要硬件支持。 |
| 截断长度 | 输入样本的截断长度 |
| 批处理大小 | 根据显存的情况调整 |
| 梯度累计 | 批处理大小*梯度累计决定了梯度更新的频率 |
| 验证集比例 | 验证集占全体样本的比例 |
| 学习率调节器 | 模型训练的不同阶段需要不同的学习率,这个参数决定学习率的调节器,cosin 最常用 |
问题: 1 怎样选择学习率?
2 计算类型都有哪些?默认情况下用哪个?
3 批处理大小怎样选择?
4 处理完多少样本后做梯度更新?
这组参数里最重要的就是保存间隔和预热部署
这一组参数只有微调方法为 freeze 的时候才启用,指定哪些层和模块可以参与训练。
这一组参数只有微调方法为 lora 的时候才启用,指定哪些层和模块可以参与训练。
| 参数 | 说明 |
|---|---|
| LoRA 的秩 | LoRA 矩阵的秩 |
| LoRA 缩放系数 | LoRA 缩放系数的大小 |
| LoRA 随机丢弃 | LoRA 权重随即丢弃的概率 |
| LoRA+学习率比例 | 允许 A,B 两个矩阵的学习率不一样,在 LoRA+ 中,适配器矩阵 A 的学习率 ηA 即为优化器学习率。适配器矩阵 B 的学习率 ηB 为 λ * ηA。其中 λ 为 loraplus_lr_ratio 的值。 |
| 使用 rslora | 在 LoRA 训练的时候可以动态调整 LoRA 缩放系数 |
| 使用 DoRA | 把原始权重分继承幅度和方向两部分,同时优化,微调更灵活 |
| 使用 PiSSA | 直接调整权重矩阵的主成分,减少计算量 |
问题: 1 LoRA 训练哪个参数决定了计算量大小? 2 未知场景下,原始 LoRA,rslora,DoRA,PiSSA 四者中优先使用哪个?

这一组参数只有训练阶段为强化学习的时候才启用。


这一组参数只有训练阶段为强化学习的时候才启用。
GaLore 是为大模型全参数训练、微调场景设计的优化工具,它使用中非常节省显存的优化器。核心思路是把传统优化器的超大规模参数矩阵,拆解成低秩形式,大幅降低计算量。


APOLLO 优化器是升级版的 Adam 或 SGD,Adam 虽然能自适应学习率,但可能在某些任务上震荡或收敛不稳定;SGD 需要手动调节学习率,容易陷入局部最优。APOLLO 采用了自适应学习率,不仅考虑到梯度,还考虑到二阶信息,调节效果更好。


BAdam 优化器是升级版的 Adam,传统的 Adam,当参数接近边界时,可能会越界导致概率值变成 -1 或者大于 1 的值,也可能导致物理常数超出合理范围。BAdam 专门解决训练时参数超出合理范围的问题,当参数接近边界时,更新率自动调低。



这一组参数只有使用 SwanLab 的时候才启用




问题: 1 LLaMa-Factory 可以做哪些阶段的训练?有哪些训练方法? 2 LLaMa-Factory 可以使用哪些训练方法?适用场景是什么? 3 LLaMa-Factory 可以使用哪些加速方法?适用场景是什么? 4 LLaMa-Factory 可以使用插值方法?各有什么优缺点? 5 LLaMa-Factory 有哪些 LoRA 微调的专用参数?作用是什么? 6 LLaMa-Factory 能训练多模态模型吗?如果只想训练多模态模型中的图像部分,不想训练其中的文本和文图映射,应该怎样设置参数?
做 LoRA 微调的时候,如果有全精度模型和更大的量化模型,应该尽可能选择更大的量化模型。因为低精度对模型效果影响有限,但是对占用显存,推理速度有巨大影响。 模型合并只能使用全精度模型,而量化模型的基座和 LoRA 即使不合并影响也不大,反而还有部署灵活的优势,所以模型合并这个操作使用频率较低。


如果必须使用全精度模型,训练完成后,可以选择把 LoRA 和基座模型进行合并
llamafactory-cli export merge_config.yaml
配置文件格式如下:
#基座模型路径
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
#LoRA 路径
adapter_name_or_path: saves/llama3-8b/lora/sft
#对话模板
template: llama3
#微调类型
finetuning_type: lora
#合并后模型路径
export_dir: models/llama3_lora_sft
#模型文件切割的大小(GB)
export_size: 2
#导出的设备
export_device: cpu
#导出的文件格式 True: .bin 格式保存。False: .safetensors 格式保存。
export_legacy_format: false

llamafactory-cli export quantization_config.yaml
配置文件格式如下:
#基座模型路径
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
#对话模板
template: llama3
#合并后模型路径
export_dir: models/llama3_gptq
#量化等级
export_quantization_bit: 4
#量化校验数据集
export_quantization_dataset: data/c4_demo.json
#模型文件切割的大小(GB)
export_size: 2
#导出的设备
export_device: cpu
#导出的文件格式 True: .bin 格式保存。False: .safetensors 格式保存。
export_legacy_format: false
实操: 1 将一个 LoRA 和基座模型做合并 2 将一个全精度模型做量化
LLaMA-Factory 支持单机多卡和多机多卡分布式训练。同时也支持 DDP , DeepSpeed 和 FSDP 三种分布式引擎。 DDP (DistributedDataParallel) 通过实现模型并行和数据并行实现训练加速。使用 DDP 的程序需要生成多个进程并且为每个进程创建一个 DDP 实例,他们之间通过 torch.distributed 库同步。 DeepSpeed 是微软开发的分布式训练引擎,并提供 ZeRO(Zero Redundancy Optimizer)、offload、Sparse Attention、1 bit Adam、流水线并行等优化技术。您可以根据任务需求与设备选择使用。 FSDP 通过全切片数据并行技术(Fully Sharded Data Parallel)来处理更多更大的模型。在 DDP 中,每张 GPU 都各自保留了一份完整的模型参数和优化器参数。而 FSDP 切分了模型参数、梯度与优化器参数,使得每张 GPU 只保留这些参数的一部分。除了并行技术之外,FSDP 还支持将模型参数卸载至 CPU,从而进一步降低显存需求。

NativeDDP 是 PyTorch 提供的一种分布式训练方式,您可以通过以下命令启动训练:
您可以使用 llamafactory-cli 启动 NativeDDP 引擎。
FORCE_TORCHRUN=1 llamafactory-cli train examples/train_full/llama3_full_sft_ds3.yaml
如果 CUDA_VISIBLE_DEVICES 没有指定,则默认使用所有 GPU。如果需要指定 GPU,例如第 0、1 个 GPU,可以使用:
FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli train config/config1.yaml
您也可以使用 torchrun 指令启动 NativeDDP 引擎进行单机多卡训练。下面提供一个示例:
torchrun --standalone --nnodes=1 --nproc-per-node=8 src/train.py \
--stage sft \
--model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct \
--do_train \
--dataset alpaca_en_demo \
--template llama3 \
--finetuning_type lora \
--output_dir saves/llama3-8b/lora/ \
--overwrite_cache \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 100 \
--save_steps 500 \
--learning_rate 1e-4 \
--num_train_epochs 2.0 \
--plot_loss \
--bf16
您还可以使用 accelerate 指令启动进行单机多卡训练。 首先运行以下命令,根据需求回答一系列问题后生成配置文件: accelerate config 下面提供一个示例配置文件:
#accelerate_singleNode_config.yaml
compute_environment: LOCAL_MACHINE
debug: true
distributed_type: MULTI_GPU
downcast_bf16: 'no'
enable_cpu_affinity: false
gpu_ids: all
machine_rank: 0
main_training_function: main
mixed_precision: fp16
num_machines: 1
num_processes: 8
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false
您可以通过运行以下指令开始训练:
accelerate launch \
--config_file accelerate_singleNode_config.yaml \
src/train.py training_config.yaml
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 \
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 \
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

您也可以使用 torchrun 指令启动 NativeDDP 引擎进行多机多卡训练。
您还可以使用 accelerate 指令启动进行多机多卡训练。 首先运行以下命令,根据需求回答一系列问题后生成配置文件: accelerate config 下面提供一个示例配置文件:
#accelerate_multiNode_config.yaml
compute_environment: LOCAL_MACHINE
debug: true
distributed_type: MULTI_GPU
downcast_bf16: 'no'
enable_cpu_affinity: false
gpu_ids: all
machine_rank: 0
main_process_ip: '192.168.0.1'
main_process_port: 29500
main_training_function: main
mixed_precision: fp16
num_machines: 2
num_processes: 16
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false
您可以通过运行以下指令开始训练:
accelerate launch \
--config_file accelerate_multiNode_config.yaml \
train.py llm_config.yaml
实操: 1 实操基于 DPP 的单机多卡训练 2 实操基于 DPP 的多机多卡训练
DeepSpeed 是由微软开发的一个开源深度学习优化库,旨在提高大模型训练的效率和速度。在使用 DeepSpeed 之前,您需要先估计训练任务的显存大小,再根据任务需求与资源情况选择合适的 ZeRO 阶段。
简单来说:从 ZeRO-1 到 ZeRO-3,阶段数越高,显存需求越小,但是训练速度也依次变慢。此外,设置 offload_param=cpu 参数会大幅减小显存需求,但会极大地使训练速度减慢。因此,如果您有足够的显存,应当使用 ZeRO-1,并且确保 offload_param=none。
您可以使用 llamafactory-cli 启动 DeepSpeed 引擎进行单机多卡训练。
FORCE_TORCHRUN=1 llamafactory-cli train examples/train_full/llama3_full_sft_ds3.yaml
为了启动 DeepSpeed 引擎,配置文件中 deepspeed 参数指定了 DeepSpeed 配置文件的路径:
deespeed: examples/deepspeed/ds_z3_config.json
您也可以使用 deepspeed 指令启动 DeepSpeed 引擎进行单机多卡训练。
deepeed --include localhost:1 your_program.py <normal cl args> --deepspeed ds_config.json
下面是一个例子:
deepeed --num_gpus 8 src/train.py \
--deepspeed examples/deepspeed/ds_z3_config.json \
--stage sft \
--model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct \
--do_train \
--dataset alpaca_en \
--template llama3 \
--finetuning_type full \
--output_dir saves/llama3-8b/lora/full \
--overwrite_cache \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 500 \
--learning_rate 1e-4 \
--num_train_epochs 2.0 \
--plot_loss \
--bf16
使用 deepspeed 指令启动 DeepSpeed 引擎时无法使用 CUDA_VISIBLE_DEVICES 指定 GPU。而需要:
deepeed --include localhost:1 your_program.py <normal cl args> --deepspeed ds_config.json
–include localhost:1 表示只是用本节点的 gpu1。
LLaMA-Factory 支持使用 DeepSpeed 的多机多卡训练,您可以通过以下命令启动:
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/train_lora/llama3_lora_sft_ds3.yaml
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/train_lora/llama3_lora_sft_ds3.yaml
您也可以使用 deepspeed 指令来启动多机多卡训练。
deepeed --num_gpus 8 --num_nodes 2 --hostfile hostfile --master_addr hostname1 --master_port=9901 \
your_program.py <normal cl args> --deepspeed ds_config.json
hostfile 的每一行指定一个节点,每行的格式为 slots=<num_slots> ,其中 是节点的主机名,<num_slots> 是该节点上的 GPU 数量。下面是一个例子:
worker-1 slots=4
worker-2 slots=4
如果没有指定 hostfile 变量,DeepSpeed 会搜索 /job/hostfile 文件。如果仍未找到,那么 DeepSpeed 会使用本机上所有可用的 GPU。
您还可以使用 accelerate 指令启动 DeepSpeed 引擎。首先通过以下命令生成 DeepSpeed 配置文件:
accelerate config
下面提供一个配置文件示例:
#deepspeed_config.yaml
compute_environment: LOCAL_MACHINE
debug: false
deepeed_config: deepspeed_multinode_launcher: standard
gradient_accumulation_steps: 8
offload_optimizer_device: none
offload_param_device: none
zero3_init_flag: false
zero_stage: 3
distributed_type: DEEPSPEED
downcast_bf16: 'no'
enable_cpu_affinity: false
machine_rank: 0
main_process_ip: '192.168.0.1'
main_process_port: 29500
main_training_function: main
mixed_precision: fp16
num_machines: 2
num_processes: 16
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false
随后,可以使用以下命令启动训练:
accelerate launch \
--config_file deepspeed_config.yaml \
train.py llm_config.yaml
ZeRO-0
{
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"gradient_clipping": "auto",
"zero_allow_untested_optimizer": true,
"fp16": {
"enabled": "auto",
"loss_scale": 0,
"loss_scale_window": 1000,
"initial_scale_power": 16,
"hysteresis": 2,
"min_loss_scale": 1
},
"bf16": {
"enabled": "auto"
},
"zero_optimization"
ZeRO-2 只需在 ZeRO-0 的基础上修改 zero_optimization 中的 stage 参数即可。
{
...
"zero_optimization": {"stage": 2,...}
}
ZeRO-2+offload 只需在 ZeRO-0 的基础上在 zero_optimization 中添加 offload_optimizer 参数即可。
{
...
"zero_optimization": {"stage": 2,"offload_optimizer": {"device": "cpu","pin_memory": true },...}
}
ZeRO-3 只需在 ZeRO-0 的基础上修改 zero_optimization 中的参数。
{
...
"zero_optimization": {"stage": 3,"overlap_comm": true,"contiguous_gradients": true,"sub_group_size": 1e9,"reduce_bucket_size": "auto","stage3_prefetch_bucket_size": "auto","stage3_param_persistence_threshold": "auto","stage3_max_live_parameters": 1e9,"stage3_max_reuse_distance": 1e9,"stage3_gather_16bit_weights_on_model_save": true }}
ZeRO-3+offload 只需在 ZeRO-3 的基础上添加 zero_optimization 中的 offload_optimizer 和 offload_param 参数即可。
ds_z3_offload_config.json {..."zero_optimization": {"stage": 3,"offload_optimizer": {"device": "cpu","pin_memory": true },"offload_param": {"device": "cpu","pin_memory": true },...}}
实操: 1 实操基于 DeepSpeed 的单机多卡训练 2 实操基于 DeepSpeed 的多机多卡训练
PyTorch 的全切片数据并行技术 FSDP(Fully Sharded Data Parallel)能让我们处理更多更大的模型。LLaMA-Factory 支持使用 FSDP 引擎进行分布式训练。 FSDP 的参数 ShardingStrategy 的不同取值决定了模型的划分方式:
您只需根据需要修改 examples/accelerate/fsdp_config.yaml 以及 examples/extras/fsdp_qlora/llama3_lora_sft.yaml,文件然后运行以下命令即可启动 FSDP+QLoRA 微调:
bash examples/extras/fsdp_qlora/train.sh
此外,您也可以使用 accelerate 启动 FSDP 引擎,节点数与 GPU 数可以通过 num_machines 和 num_processes 指定。对此,Huggingface 提供了便捷的配置功能。只需运行:
accelerate config
根据提示回答一系列问题后,我们就可以生成 FSDP 所需的配置文件。 当然您也可以根据需求自行配置 fsdp_config.yaml。
#/examples/accelerate/fsdp_config.yaml
compute_environment: LOCAL_MACHINE
debug: false
distributed_type: FSDP
downcast_bf16: 'no'
fsdp_config:
fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
fsdp_backward_prefetch: BACKWARD_PRE
fsdp_forward_prefetch: false
fsdp_cpu_ram_efficient_loading: true
fsdp_offload_params: true # offload may affect training speed
fsdp_sharding_strategy: FULL_SHARD
fsdp_state_dict_type: FULL_STATE_DICT
fsdp_sync_module_states: true
fsdp_use_orig_params: true
machine_rank: 0
main_training_function: main
mixed_precision: fp16 # or bf16
num_machines: 1 # the number of nodes
num_processes: 2 # the number of GPUs in all nodes
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu:
请确保 num_processes 和实际使用的总 GPU 数量一致 随后,您可以使用以下命令启动训练:
accelerate launch \
--config_file fsdp_config.yaml \
src/train.py llm_config.yaml
实操: 1 实操基于 DPP 的单机多卡训练 2 实操基于 DPP 的多机多卡训练 3 实操基于 DeepSpeed 的单机多卡训练 4 实操基于 DeepSpeed 的多机多卡训练 5 实操基于 FSDP 的单机多卡训练 6 实操基于 FSDP 的多机多卡训练

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online