llama factory 增量预训练代码解析 & .yaml文件传参和sh的不同 examples/train_lora/llama3_lora_pretrain.yaml

llama factory 增量预训练代码解析 & .yaml文件传参和sh的不同 examples/train_lora/llama3_lora_pretrain.yaml

    正在检查是否收录...

新版本(2024年后)的llama factory,改用了.yaml文件传参的方式,请问和原始的.sh传参方式有什么不同?

新版本的 llama factory 框架使用 .yaml 文件来传递参数,相较于原始的 .sh 脚本传参方式,有一些显著的不同和优势。以下是详细的对比和解释:

参数传递方式的不同

.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 文件中,参数以键值对的形式组织在文件中,如下所示:

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 文件复用在不同的训练任务中,只需修改部分参数即可,而不需要每次都重新编写整个命令行。

减少错误

通过文件传参,避免了命令行传参时可能出现的拼写错误或遗漏参数的情况。

解释新版本 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_democutoff_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,表示每个设备的训练批大小。 `gradient_accumulation_steps

请从你断掉的地方继续生成

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 文件更适合复杂配置的场景,特别是在需要频繁调整和复用配置的情况下。

amlllamatpu命令行cto数据集版本控制bashgpt-4gpt分布式可读性预训练2024poe
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-17762.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

AI绘画工具准备- MJ注册及SD云端部署教程

上一篇

百度文库AI智能写作:轻松打造高质量内容的利器

下一篇
  • 复制图片
按住ctrl可打开默认菜单