llama factory 增量预练习代码剖析 & .yaml文件传参和sh的差别 examples/tr ...

用户云卷云舒  金牌会员 | 2024-9-5 09:33:30 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 553|帖子 553|积分 1659

新版本(2024年后)的llama factory,改用了.yaml文件传参的方式,叨教和原始的.sh传参方式有什么差别?


新版本的 llama factory 框架利用 .yaml 文件来传递参数,相较于原始的 .sh 脚本传参方式,有一些显著的差别和上风。以下是具体的对比和解释:
参数传递方式的差别

.sh 脚本传参方式

在 .sh 脚本中,参数是直接通过下令行传递的,如下所示:
bash
复制
  1. accelerate launch src/train_bash.py \
  2.     --model_name_or_path /data/vayu/train/etuning/LLaMA-Factory/models/xxxx-Base-10B-200k-Llama \
  3.     --do_train \
  4.     --stage pt
  5.     # ... 更多参数
复制代码
每个参数都需要以 --参数名 参数值 的形式显式地列出,这种方式虽然直观,但当参数较多时会显得冗长且难以管理。
.yaml 文件传参方式

在新的 .yaml 文件中,参数以键值对的形式组织在文件中,如下所示:
yaml
复制
  1. ### model
  2. model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
  3. ### method
  4. stage: pt
  5. do_train: true
  6. finetuning_type: lora
  7. lora_target: all
  8. # ... 更多参数
复制代码
这种方式将全部设置参数集中在一个文件中,结构更清晰,管理和修改都更加方便。
YAML 设置文件的上风


  • 可读性和可维护性

    • .yaml 文件利用条理化的结构,参数分类更清晰。
    • 便于阅读和明白,特别是当参数较多时。

  • 版本控制

    • 设置文件可以很方便地举行版本控制,通过比力差别版本的设置文件,可以轻松追踪参数的变化。

  • 复用性

    • 可以将 .yaml 文件复用在差别的练习任务中,只需修改部分参数即可,而不需要每次都重新编写整个下令行。

  • 减少错误

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

解释新版本 YAML 设置文件

yaml
复制
  1. ### model
  2. model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
复制代码


  • 指定模型的路径或名称,这里利用的是 meta-llama/Meta-Llama-3-8B-Instruct。
yaml
复制
  1. ### method
  2. stage: pt
  3. do_train: true
  4. finetuning_type: lora
  5. lora_target: all
复制代码


  • stage 设置为 pt,表示预练习阶段。
  • do_train 设置为 true,表示执行练习。
  • finetuning_type 设置为 lora,表示利用 LoRA 微调。
  • lora_target 设置为 all,表示全部模块都应用 LoRA。
yaml
复制
  1. ### dataset
  2. dataset: c4_demo
  3. cutoff_len: 1024
  4. max_samples: 1000
  5. overwrite_cache: true
  6. preprocessing_num_workers: 16
复制代码


  • dataset 指定命据集为 c4_demo。
  • cutoff_len 设置为 1024,表示最大序列长度。
  • max_samples 设置为 1000,表示最大样本数。
  • overwrite_cache 设置为 true,表示覆盖缓存。
  • preprocessing_num_workers 设置为 16,表示利用 16 个工作线程举行预处理。
yaml
复制
  1. ### output
  2. output_dir: saves/llama3-8b/lora/sft
  3. logging_steps: 10
  4. save_steps: 500
  5. plot_loss: true
  6. overwrite_output_dir: true
复制代码


  • output_dir 指定输出目录。
  • logging_steps 设置为 10,表示每 10 步记录一越日志。
  • save_steps 设置为 500,表示每 500 步生存一次模型。
  • plot_loss 设置为 true,表示绘制损失图。
  • overwrite_output_dir 设置为 true,表示覆盖输出目录。
yaml
复制
  1. ### train
  2. per_device_train_batch_size: 1
  3. gradient_accumulation_steps: 8
  4. learning_rate: 1.0e-4
  5. num_train_epochs: 3.0
  6. lr_scheduler_type: cosine
  7. warmup_ratio: 0.1
  8. bf16: true
  9. ddp_timeout: 180000000
复制代码


  • per_device_train_batch_size 设置为 1,表示每个装备的练习批大小。
  • `gradient_accumulation_steps

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


GPT-4o
Poe

固然,继续解释 .yaml 文件中的 train 设置部分:
yaml
复制
  1. ### train
  2. per_device_train_batch_size: 1
  3. gradient_accumulation_steps: 8
  4. learning_rate: 1.0e-4
  5. num_train_epochs: 3.0
  6. lr_scheduler_type: cosine
  7. warmup_ratio: 0.1
  8. bf16: true
  9. 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
复制
  1. ### eval
  2. val_size: 0.1
  3. per_device_eval_batch_size: 1
  4. eval_strategy: steps
  5. 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 文件更适合复杂设置的场景,特别是在需要频繁调整和复用设置的情况下。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表