赞
踩
新版本的 llama factory
框架使用 .yaml
文件来传递参数,相较于原始的 .sh
脚本传参方式,有一些显著的不同和优势。以下是详细的对比和解释:
在 .sh
脚本中,参数是直接通过命令行传递的,如下所示:
bash
复制
- accelerate launch src/train_bash.py \
- --model_name_or_path /data/vayu/train/etuning/LLaMA-Factory/models/xxxx-Base-10B-200k-Llama \
- --do_train \
- --stage pt
- # ... 更多参数
每个参数都需要以 --参数名 参数值
的形式显式地列出,这种方式虽然直观,但当参数较多时会显得冗长且难以管理。
在新的 .yaml
文件中,参数以键值对的形式组织在文件中,如下所示:
yaml
复制
- ### model
- model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
-
- ### method
- stage: pt
- do_train: true
- finetuning_type: lora
- lora_target: all
-
- # ... 更多参数
这种方式将所有配置参数集中在一个文件中,结构更清晰,管理和修改都更加方便。
可读性和可维护性
.yaml
文件使用层次化的结构,参数分类更清晰。版本控制
复用性
.yaml
文件复用在不同的训练任务中,只需修改部分参数即可,而不需要每次都重新编写整个命令行。减少错误
yaml
复制
- ### model
- model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
meta-llama/Meta-Llama-3-8B-Instruct
。yaml
复制
- ### method
- stage: pt
- do_train: true
- finetuning_type: lora
- lora_target: all
stage
设置为 pt
,表示预训练阶段。do_train
设置为 true
,表示执行训练。finetuning_type
设置为 lora
,表示使用 LoRA 微调。lora_target
设置为 all
,表示所有模块都应用 LoRA。yaml
复制
- ### dataset
- dataset: c4_demo
- cutoff_len: 1024
- max_samples: 1000
- overwrite_cache: true
- preprocessing_num_workers: 16
dataset
指定数据集为 c4_demo
。cutoff_len
设置为 1024,表示最大序列长度。max_samples
设置为 1000,表示最大样本数。overwrite_cache
设置为 true
,表示覆盖缓存。preprocessing_num_workers
设置为 16,表示使用 16 个工作线程进行预处理。yaml
复制
- ### output
- output_dir: saves/llama3-8b/lora/sft
- logging_steps: 10
- save_steps: 500
- plot_loss: true
- overwrite_output_dir: true
output_dir
指定输出目录。logging_steps
设置为 10,表示每 10 步记录一次日志。save_steps
设置为 500,表示每 500 步保存一次模型。plot_loss
设置为 true
,表示绘制损失图。overwrite_output_dir
设置为 true
,表示覆盖输出目录。yaml
复制
- ### train
- per_device_train_batch_size: 1
- gradient_accumulation_steps: 8
- learning_rate: 1.0e-4
- num_train_epochs: 3.0
- lr_scheduler_type: cosine
- warmup_ratio: 0.1
- bf16: true
- ddp_timeout: 180000000
per_device_train_batch_size
设置为 1,表示每个设备的训练批大小。请从你断掉的地方继续生成
GPT-4o
Poe
当然,继续解释 .yaml
文件中的 train
配置部分:
yaml
复制
- ### train
- per_device_train_batch_size: 1
- gradient_accumulation_steps: 8
- learning_rate: 1.0e-4
- num_train_epochs: 3.0
- lr_scheduler_type: cosine
- warmup_ratio: 0.1
- bf16: true
- ddp_timeout: 180000000
per_device_train_batch_size
设置为 1,表示每个设备的训练批大小为 1。gradient_accumulation_steps
设置为 8,表示梯度累积步数为 8,即每 8 个批次更新一次梯度。learning_rate
设置为 1.0e-4,表示学习率为 0.0001。num_train_epochs
设置为 3.0,表示训练 3 个 epoch。lr_scheduler_type
设置为 cosine
,表示使用余弦退火学习率调度器。warmup_ratio
设置为 0.1,表示学习率预热比例为 10%。bf16
设置为 true
,表示使用 bfloat16 精度。ddp_timeout
设置为 180000000,表示分布式数据并行超时时间。yaml
复制
- ### eval
- val_size: 0.1
- per_device_eval_batch_size: 1
- eval_strategy: steps
- eval_steps: 500
val_size
设置为 0.1,表示验证集占数据集的 10%。per_device_eval_batch_size
设置为 1,表示每个设备的验证批大小为 1。eval_strategy
设置为 steps
,表示按步数进行评估。eval_steps
设置为 500,表示每 500 步进行一次评估。通过 YAML 文件传参,配置项得到更清晰的分类和管理,使得整个训练流程的设置更加简洁明了。YAML 文件的层次结构使得配置文件易于阅读和维护,并且便于在不同训练任务之间复用。
相比之下,使用 .sh
脚本传参虽然直观,但在参数较多时容易变得杂乱且难以管理。YAML 文件更适合复杂配置的场景,特别是在需要频繁调整和复用配置的情况下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。