
# Llama-Factory
本章节主要描述训练所需的yaml配置文件（通过ascendfactory-cli config 命令生成）、配置参数说明，用户可根据实际自行选择其需要的参数。
#### yaml文件配置
根据以下步骤修改yaml文件。
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002480812844.png)
表1模型训练脚本参数 
| 参数                                                                                                                                                                                   | 示例值                                                                                                                                                                                                                                                                                                                                                                                                                                                | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|
| backend_config.training.dataset                                                                                                                                                      | - 指令监督微调：alpaca_en_demo  - 多模态数据集(图像)：mllm_demo,identity   | 【**必修改** 】注册在dataset_info.json文件数据集名称。如选用自定义数据请参考[README_zh.md](https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md)配置dataset_info.json文件，并将数据集存放于dataset_info.json同目录下。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| backend_config.training.dataset_dir                                                                                                                                                  | /home/ma-user/AscendFactory/src/open_source/LLaMA-Factory                                                                                                                                                                                                                                                                                                                                                                                          | 【**必修改**】作为超参数放在启动命令ascendfactory-cli train XXX中传入 [自定义数据](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_590814.html#ZH-CN_TOPIC_0000002503967270__zh-cn_topic_0000002480972748_section3286202352018)：地址为代码包AscendFactory/data目录下                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| backend_config.training.model_name_or_path                                                                                                                                           | /home/ma-user/xxx/model/Qwen2-72B                                                                                                                                                                                                                                                                                                                                                                                                                  | 【**必修改**】作为超参数放在启动命令ascendfactory-cli train XXX中传入 加载tokenizer与Hugging Face权重时，对应的存放地址。请根据实际规划修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| backend_config.training.adapter_name_or_path                                                                                                                                         | /home/ma-user/xxx/sft_lora/                                                                                                                                                                                                                                                                                                                                                                                                                        | 基于lora训练完成后生成的没有合并的lora权重产物。基于lora微调后模型进行**增量训练时，需要**传入此权重文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| af_output_dir                                                                                                                                                                        | /home/ma-user/xxx/saves/qwen2-7b/sft_lora/                                                                                                                                                                                                                                                                                                                                                                                                         | 【**必修改**】作为超参数放在启动命令ascendfactory-cli train XXX中传入 指定输出目录。训练过程中生成的模型参数和日志文件将保存在这个目录下                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| backend_config.training.train_from_scratch                                                                                                                                           | false                                                                                                                                                                                                                                                                                                                                                                                                                                              | 用于指示模型是否从头开始训练，默认false。 - true：模型将从一个全新的初始状态开始训练，并且**不加载权重**。  - false：模型将从加载权重的位置开始增量训练。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| backend_config.training.do_train                                                                                                                                                     | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 指示脚本执行训练步骤，用来控制是否进行模型训练的。如果设置为true，则会进行模型训练；如果设置为false，则不会进行模型训练。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| backend_config.training.cutoff_len                                                                                                                                                   | 4096                                                                                                                                                                                                                                                                                                                                                                                                                                               | 文本处理时的最大长度，此处为4096，用户可根据自己要求适配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| backend_config.training.packing                                                                                                                                                      | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | **可选项** 。当选用**静态数据长度** 时，可将不足于文本处理时的最大长度数据弥补到文本处理时的最大长度，当选用**动态数据长度** 则**去掉**此参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| backend_config.training.deepspeed                                                                                                                                                    | -                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 【**可选**】 ZeRO 的优化策略选择，可选择如下： - ds_config_zero0.json  - ds_config_zero1.json  - ds_config_zero2.json  - ds_config_zero3.json  - ds_config_zero2_offload.json  - ds_config_zero3_offload.json   |
| backend_config.training.stage                                                                                                                                                        | sft、dpo                                                                                                                                                                                                                                                                                                                                                                                                                                            | 表示当前的训练阶段。 sft代表监督微调。 如果设置为dpo，表示进行直接偏好优化训练。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| backend_config.training.finetuning_type                                                                                                                                              | full                                                                                                                                                                                                                                                                                                                                                                                                                                               | 用于指定微调策略类型，可选择值full、lora。 如果设置为full，则对整个模型进行微调。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| backend_config.training.lora_target                                                                                                                                                  | all                                                                                                                                                                                                                                                                                                                                                                                                                                                | 采取lora策略方法的目标模块，默认为all                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| backend_config.training.template                                                                                                                                                     | qwen                                                                                                                                                                                                                                                                                                                                                                                                                                               | 用于指定模板。如果设置为"qwen"，则使用QWEN模板进行训练。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| backend_config.training.max_samples                                                                                                                                                  | 50000                                                                                                                                                                                                                                                                                                                                                                                                                                              | 用于指定训练过程中使用的最大样本数量。如果设置了这个参数，训练过程将只使用指定数量的样本，而忽略其他样本。这可以用于控制训练过程的规模和计算需求。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| backend_config.training.num_train_epochs backend_config.training.max_steps                              | 5  5000                                                                                                                                                                                                                                                                                                                                                         | 表示训练轮次，根据实际需要修改。一个Epoch是将所有训练样本训练一次的过程。 表示训练step迭代次数。 【**二选一**】参数，当同时设置则仅max_steps起作用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| backend_config.training.overwrite_cache                                                                                                                                              | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 用于指定是否覆盖缓存。如果设置为"overwrite_cache"，则在训练过程中覆盖缓存。这通常在数据集发生变化，或者需要重新生成缓存时使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| backend_config.training.preprocessing_num_workers                                                                                                                                    | 16                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 用于指定**预处理数据的工作线程数**。随着线程数的增加，预处理的速度也会提高，但也会增加内存的使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| backend_config.training.per_device_train_batch_size                                                                                                                                  | 1                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 指定每个设备的训练批次大小。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| backend_config.training.gradient_accumulation_steps                                                                                                                                  | 8                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 指定梯度累积的步数，这可以增加批次大小而不增加内存消耗。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| backend_config.training.logging_steps                                                                                                                                                | 2                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 用于指定模型训练过程中，多少步输出一次日志。日志包括了训练进度、学习率、损失值等信息。建议设置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| backend_config.training.save_steps                                                                                                                                                   | 5000                                                                                                                                                                                                                                                                                                                                                                                                                                               | 指定模型训练过程中，每多少步保存一次模型。保存的模型可以用于后续的训练。 - 当参数值\>=max_steps时，生成模型仅保存经过TRAIN_ITERS次训练后的最后一个版本。  - 当参数值\<max_steps时，生成模型会每经过save_steps次，保存一次模型版本。   模型版本保存次数=max_steps//save_steps +1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| backend_config.training.save_total_limit                                                                                                                                             | 0                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 用于控制权重版本保存次数。 - 当参数不设置或\<=0时，不会触发效果。  - 参数值需\<=max_steps//save_steps+1  - 当参数值\>1时，保存模型版本次数与save_total_limit的值一致。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| backend_config.training.plot_loss                                                                                                                                                    | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 用于指定是否绘制损失曲线。如果设置为"true"，则在训练结束后，将损失曲线保存为图片                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| backend_config.training.overwrite_output_dir                                                                                                                                         | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 是否覆盖输出目录，默认true。如果设置为"true"，则在每次训练开始时清空输出目录。"false"加载中断时最新保存训练权重继续训练，开启【**断点续训**】。如需指定可设置resume_from_checkpoint参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| backend_config.training.resume_from_checkpoint                                                                                                                                       | {output_dir}/checkpoint-xx                                                                                                                                                                                                                                                                                                                                                                                                                         | 【**断点续训**】加载训练中断时某个checkpoint-xx权重目录，目的方便用户指定权重基于此权重继续训练。此参数优先于overwrite_output_dir参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| backend_config.training.bf16/fp16                                                                                                                                                    | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 【**可选**】选择精度格式，默认为bf16格式                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| backend_config.training.learning_rate                                                                                                                                                | 2.0e-5                                                                                                                                                                                                                                                                                                                                                                                                                                             | 指定学习率                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| backend_config.training.disable_gradient_checkpointing                                                                                                                               | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 关闭重计算，用于禁用梯度检查点，**默认开启**梯度检查点；在深度学习模型训练中用于保存模型的状态，以便在需要时恢复。这种技术可以帮助减少内存使用，特别是在训练大型模型时，但同时影响性能。True表示关闭重计算功能。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| backend_config.training.include_tokens_per_second backend_config.training.include_num_input_tokens_seen | true                                                                                                                                                                                                                                                                                                                                                                                                                                               | 用于在训练过程中包含每秒处理的tokens和已经看到的输入tokens，方便计算性能。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| backend_config.lora_merge.export_dir                                                                                                                                                 | ${af_output_dir}/lora_merged                                                                                                                                                                                                                                                                                                                                                                                                                       | LoRA微调训练后，LoRA权重合并进原始权重后的权重输出路径                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| backend_config.training.recompute_layers_ratio                                                                                                                                       | float取值\[0,1\]                                                                                                                                                                                                                                                                                                                                                                                                                                     | layers使用重计算的比例，当使用重计算显存有很多结余时，可通过调整该参数充分利用剩余显存提高性能。 当disable_gradient_checkpointing: true时该参数设置无效                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| backend_config.training.sequence_parallel_size                                                                                                                                       | 8                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 【可选】 序列并行数量，当前仅支持ulysses序列并行，因此其值必须要与kv_heads_num。 约束：开启序列并行时flash_attention模式仅支持fa2，不支持sdpa                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   
