文章目录 序言 六、webui详解 1.基座模型 2.数据集 3\. 训练阶段 3.1 RLHF(Reward Modeling+PPO) 3.2 DPO 3.3 KTO 3.4 小结 4\. 训练方法 5.量化 5.1 bitsandbytes(8-bit/4-bit量化) 5.2 HQQ(Half-Quadratic Quantization,半二次量化) 5.3 EETQ(Efficient…

文章整体分为八个章节,本篇覆盖[6-8]章
前三个章节是基础知识:
四五两个章节通过一个法律文书摘要项目介绍LLaMA-Factory进行LoRA微调训练、评估和部署的全流程
六七八三个章节是对LLaMA-Factory的扩展介绍
这一组参数定义了基座模型:
| 字段 | 说明 |
|---|---|
| 模型名称 | 这里是模型支持的所有基座模型的列表,模型本体需要自己手动下载。注意这里有部分模型的名称是不够明确的,例如DeepSeek-R1-7B-Distill,这个名称只说明了模型把DeepSeek-R1当作教师模型,学习了它的推理数据,却没说明学生模型具体是哪个。 |
| 模型路径 | 模型在本地的存储路径。 |
| 检查点路径 | 如果是从某个检查点(checkpoint)继续训练,填写检查点在本地的存储路径。如果不是,置空。 |
| 对话模板 | 不同模型的对话模板会有差异,尽量选同系列模型,至少是相近模型的模板,否则有可能报错。 |
这一组参数定义了训练用的数据集
| 字段 | 说明 |
|---|---|
| 数据路径 | 本地存储训练数据和dataset_info.json文件的路径 |
| 数据集 | dataset_info.json里定义的数据集名称 |
| { | |
| 'chat-train': { #数据集名称 | |
| 'file_name': 'train.jsonl' #数据集文件 | |
| } | |
| } |
训练阶段的这几个选项不是并列关系
| 训练阶段 | 说明 |
|---|---|
| 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方法对比
原理:训练时用短文本,推理时自动按比例缩放位置编码。
优点:不用重新训练模型,直接支持更长文本(比如ChatGPT初期用的方法)。
缺点:超过一定长度(比如原长的4倍)效果变差。
问题:
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 配置文件的路径:
deepspeed: examples/deepspeed/ds_z3_config.json
您也可以使用 deepspeed 指令启动 DeepSpeed 引擎进行单机多卡训练。
deepspeed --include localhost:1 your_program.py <normal cl args> --deepspeed ds_config.json
下面是一个例子:
deepspeed --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。而需要:
deepspeed --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 指令来启动多机多卡训练。
deepspeed --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数量。下面是一个例子: … code-block: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 deepspeed_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
#ds_z0_config.json{"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": {"stage": 0,"allgather_partitions": true,"allgather_bucket_size": 5e8,"overlap_comm": true,"reduce_scatter": true,"reduce_bucket_size": 5e8,"contiguous_gradients": true,"round_robin_gradients": true }}
ZeRO-2
只需在 ZeRO-0 的基础上修改 zero_optimization 中的 stage 参数即可。
#ds_z2_config.json{..."zero_optimization": {"stage": 2,...}}
ZeRO-2+offload
只需在 ZeRO-0 的基础上在 zero_optimization 中添加 offload_optimizer 参数即可。
#ds_z2_offload_config.json{..."zero_optimization": {"stage": 2,"offload_optimizer": {"device": "cpu","pin_memory": true },...}}
ZeRO-3
只需在 ZeRO-0 的基础上修改 zero_optimization 中的参数。
#ds_z3_config.json{..."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: false
请确保 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的多机多卡训练

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online