+- `lora_path`: LoRA 参数和配置路径,对 LoRA 参数进行初始化,默认为 None。
+- `model_name_or_path`: 必须,主干模型参数路径,默认为 None。
+- `merge_model_path`: 必须,合并参数后保存路径,默认为 None。
+- `device`: 运行环境,默认为 gpu。
+- `safe_serialization`: 是否保存为 safetensor 格式,默认为 True。
+
-## 3.精调参数介绍
+## 4.精调参数介绍
-- `model_name_or_path`: 预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为None。每个模型**支持模型权重**详见各模型目录。
-- `use_flash_attention`: 模型是否使用FlashAttention,默认为False。
-- `lora`: 是否开启LoRA微调策略,默认为False。
-- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。
-- `lora_rank`: LoRA算法中rank(秩)的值,默认为8。
-- `prefix_tuning`: 是否使用Prefix Tuning策略,默认为False。
-- `num_prefix_tokens`: Prefix Tuning策略中Prefix Token数量,默认为128。
-- `from_aistudio`: 模型权重是否从Aistudio下载,默认为False。
-- `save_to_aistudio`: 模型权重是否保存到Aistudio,默认为False。
-- `aistudio_repo_id`: 模型权重保存到Aistudio的repo id,默认为None。
-- `aistudio_repo_private`: 模型权重保存到Aistudio的repo是否为私有,默认为True。
-- `aistudio_repo_license`: 模型权重保存到Aistudio的repo license,默认为"Apache License 2.0"。
-- `aistudio_token`: 模型权重保存到Aistudio的token,默认为None。如果save_to_aistudio为True,且环境变量没有设置相应token,必须传入。
-- `neftune`: 是否使用[NEFT](https://arxiv.org/abs/2310.05914),进行微调。默认为False。
-- `neftune_noise_alpha`: NEFT alpha参数,默认为5.0。
-
+- `model_name_or_path`: 预训练模型名称或者本地的模型路径,用于热启模型和分词器,默认为 None。每个模型**支持模型权重**详见各模型目录。
+- `use_flash_attention`: 模型是否使用 FlashAttention,默认为 False。
+- `flash_mask`: 模型是否使用 FlashMask,默认为 False。请在 FlashAttention 打开的基础上设置。
+- `lora`: 是否开启 LoRA 微调策略,默认为 False。
+- `lora_path`: LoRA 参数和配置路径,对 LoRA 参数进行初始化,默认为 None。
+- `lora_rank`: LoRA 算法中 rank(秩)的值,默认为8。
+- `rslora`: 是否使用 rsLoRA 算法。
+- `lora_plus_scale`: 是否使用 LoRA+,设置 B 与 A 的学习率比例。
+- `neftune`: 是否使用[NEFT](https://arxiv.org/abs/2310.05914),进行微调。默认为 False。
+- `neftune_noise_alpha`: NEFT alpha 参数,默认为5.0。
+- `vera`: 是否开启 VeRA 微调策略,默认为 False。
+- `vera_rank`: VeRA 算法中 rank(秩)的值,默认为8。
-- `dataset_name_or_path`: 本地数据集目录或内置数据集名称,默认为None。脚本已适配单文件和多文件,会自己寻找`dataset_name_or_path/train.json` 或者 `dataset_name_or_path/train/*.json`作为训练集文件, 以及`dataset_name_or_path/dev.json` 或者 `dataset_name_or_path/dev/*.json`作为验证集文件。
-- `task_name`: 用于选择内置数据集中的具体任务,默认为None。
-- `eval_with_do_generation`: 在模型效果评估的时候是否调用model.generate,默认为False。设置为True时,指标为ppl, accuracy;设置为False时,指标为BLEU4/Rouge,建议将`metric_for_best_model`设为bleu4。
-- `save_generation_output`: 当`eval_with_do_generation`设为True,是否将生成结果保存在`generated_output.json`文件中,默认为False。
-- `zero_padding`:是否使用Zero Padding数据流(减少Padding冗余计算,大幅提升有效Token计算效率),默认为False。当`eval_with_do_generation`设为True,评估过程不支持Zero Padding数据流。。
-- `src_length`: 模型输入上下文最大token长度,默认为1024。
-- `max_length`:模型输入(上下文+生成内容)的最大token长度, 默认为2048。当`zero_padding`设为True的时候,同时也为Zero Padding数据流模型训练输入最大长度,通常建议设为模型允许输入最大长度,同时`per_device_train_batch_size`设为1,使用`gradient_accumulation_steps`控制batch size。
-- `lazy`:设置为False则使用`MapDataset`,设置为True则使用`IterDataset`,默认为False。对于数据量较大的时候建议设为True,`IterDataset`可以避免一次性将所有数据读入内存,注意需要设置`max_steps`并且`evaluation_strategy`和`save_strategy`设为`steps`
+- `dataset_name_or_path`: 本地数据集目录或内置数据集名称,默认为 None。脚本已适配单文件和多文件,会自己寻找`dataset_name_or_path/train.json` 或者 `dataset_name_or_path/train/*.json`作为训练集文件, 以及`dataset_name_or_path/dev.json` 或者 `dataset_name_or_path/dev/*.json`作为验证集文件。
+- `zero_padding`:是否使用 Zero Padding 数据流(减少 Padding 冗余计算,大幅提升有效 Token 计算效率),默认为 False。当`eval_with_do_generation`设为 True,评估过程不支持 Zero Padding 数据流。
+- `greedy_zero_padding`:贪心 Zero Padding 数据流,默认为 False。请在`zero_padding`设为 True 的基础上打开。
+- `src_length`: 模型输入上下文最大 token 长度,默认为1024。
+- `max_length`:模型输入(上下文+生成内容)的最大 token 长度, 默认为2048。当`zero_padding`设为 True 的时候,同时也为 Zero Padding 数据流模型训练输入最大长度,通常建议设为模型允许输入最大长度,同时`per_device_train_batch_size`设为1,使用`gradient_accumulation_steps`控制 batch size。
+- `lazy`:设置为 False 则使用`MapDataset`,设置为 True 则使用`IterDataset`,默认为 False。对于数据量较大的时候建议设为 True,`IterDataset`可以避免一次性将所有数据读入内存,注意需要设置`max_steps`并且`evaluation_strategy`和`save_strategy`设为`steps`
-注:以下参数仅在`eval_with_do_generation`为True,调用model.generate()时生效。
+注:以下参数仅在`eval_with_do_generation`为 True,调用 model.generate()时生效。
- `top_k`: “采样”策略中为 top-k 过滤保留的最高概率标记的数量。默认为1,等价于贪心策略。
- `top_p`:“采样”策略中 top-p 过滤的累积概率。默认为1.0,表示不起作用。
@@ -159,67 +154,25 @@ python -u -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" run_finetune.
训练参数(TrainingArguments)
-以下仅介绍TrainingArguments部分常用参数,详情请参见[TrainingArguments文档](https://paddlenlp.readthedocs.io/zh/latest/trainer.html)。
+以下仅介绍 TrainingArguments 部分常用参数,详情请参见[TrainingArguments 文档](https://paddlenlp.readthedocs.io/zh/latest/trainer.html)。
-- `output_dir`: 用于保存相关的文件目录,主要包括模型相关文件、训练过程中的checkpoint、分词器相关文件、评估的结果文件,默认为None。
+- `output_dir`: 用于保存相关的文件目录,主要包括模型相关文件、训练过程中的 checkpoint、分词器相关文件、评估的结果文件,默认为 None。
- `per_device_train_batch_size`: 训练集训练过程批处理大小,对应 micro batch size,默认为8。该参数需要根据具体的数据集来设定,该参数越大,占用显存越高,训练代价越大;反之,占用显存越小,训练速度越快。
-- `gradient_accumulation_steps`:梯度累积步数,顾名思义,就是将多次计算得到的梯度值进行累加,然后一次性进行参数更新,默认为1。等效于将原有训练batch size*gradient_accumulation_steps。
+- `gradient_accumulation_steps`:梯度累积步数,顾名思义,就是将多次计算得到的梯度值进行累加,然后一次性进行参数更新,默认为1。等效于将原有训练 batch size*gradient_accumulation_steps。
- `per_device_eval_batch_size`: 验证集批处理大小,对应 micro batch size,默认为8。该参数越大,占用显存越高;该参数越小,占用显存越低。
-- `eval_accumulation_steps`:在将结果移动到CPU之前,累积输出张量的预测步骤数。如果如果未设置,则在移动到CPU之前,整个预测都会在GPU上累积(速度更快需要更多的显存),默认为None。
- `num_train_epochs`:模型训练的轮次,默认为3。
- `learning_rate`:优化器的初始学习率,默认为 5e-05。
-- `warmup_steps`: warmup的步数,默认为0。当warmup_steps>0时,会覆盖warmup_ratio的设置。
-- `logging_steps`: 日志打印的频率,仅当logging_strategy=="step"生效,默认为 500。如果希望看到较快的日志反馈或者即时的训练的速度,可以减小logging_steps。
-- `evaluation_strategy`: 评估策略,默认为no。"no":训练期间不进行评估;"steps":在每eval_steps结束进行;"epoch":在每个 epoch 结束时进行。
-- `save_strategy`: 保存策略,默认为no。"no":训练期间不进行评估;"steps":在每eval_steps结束进行;"epoch":在每个 epoch 结束时进行。
-- `fp16`: 是否需要开启FP16训练,开启FP16训练可以加速训练,默认为False。
-- `bf16`: 是否需要开启BF16训练,开启BF16训练可以加速训练,默认为False。
-- `fp16_opt_level`: 可设置O1或者O2,在 O1 级别下,在白名单中的算子将使用 float16/bfloat16 计算,在黑名单中的算子将使用 float32 计算。在 O2 级别下,模型的参数被转换为 float16/bfloat16, 如果算子的浮点型输入全是 float16/bfloat16,算子才会采用 float16/bfloat16 计算,若任意浮点型输入是 float32 类型,算子将采用 float32 计算。默认为O1。
-- `do_train`: 是否打开训练,默认为False。
-- `do_eval`: 是否打开评估,默认为False。
-- `disable_tqdm`: 是否关掉tqdm的进度条,默认为False。如果需要预估整体的训练时长,可以打开该配置,实时观察训练进度。
-- `load_best_model_at_end`: 训练结束后是否加载最优模型,通常与`metric_for_best_model`配合使用,默认为False。
-- `metric_for_best_model`: 最优模型指标,如"accuarcy"等,用于比较模型好坏,默认为None。
-- `recompute`: 重计算,暂支持full策略。开启后可降低显存以达到增大batch size的目的,默认为False。
-- `save_total_limit`: 保留checkpoint的个数,老的checkpoint会被删除,默认为None。
-- `tensor_parallel_degree`: 此参数tensor_parallel_degree表示将一层transformer结构的份数,该方法对通信开销较大, 建议 tensor_parallel_degree<=8, 尽量使用机器内部通信。默认为-1,表示不启用张量并行。
-- `pipeline_parallel_degree`: 表示划分流水线的大小.(假设该参数为4, 模型12层, 则每一个pp stage 包含3层模型) 默认值-1, 表示不启用流水线并行。
-
-
-
-
-## 4.分布式策略参数合并
-
-**如果开启unified_checkpoint则不需要合参**。我们使用张量并行(TP,Tensor Parallelism)和 流水线并行(PP,Pipeline Parallelism)训练过程中,为了节省TP参数合并时间通常在中间checkpoint将参数存储为多个TP和PP参数分片,可以使用提供的分片合并参数脚本进行参数合并。
-
-```
-python merge_tp_and_pp_params.py \
- --model_name_or_path ./checkpoints/llama_sft_ckpts/checkpoint-100 \
- --pp 2 --tp 4
-```
-
-
脚本参数介绍
-- `model_name_or_path`: 必须,本地的TP模型参数路径,默认为None。
-- `device`: 运行环境,默认为gpu。
-
-
-## 5.LoRA 参数合并
-
-为了后续的**压缩**和**静态图推理**方便,我们提供LoRA参数合并脚本,可以将LoRA参数合并到主干模型并保存相应的权重。
-```
-python merge_lora_params.py \
- --model_name_or_path ./checkpoints/sft_ckpts \
- --lora_path ./checkpoints/lora_ckpts \
- --output_path ./checkpoints/lora_merge \
- --device "gpu" \
- --safe_serialization True
-```
-
-
脚本参数介绍
-
-- `lora_path`: LoRA参数和配置路径,对LoRA参数进行初始化,默认为None。
-- `model_name_or_path`: 必须,主干模型参数路径,默认为None。
-- `merge_model_path`: 必须,合并参数后保存路径,默认为None。
-- `device`: 运行环境,默认为gpu。
-- `safe_serialization`: 是否保存为safetensor格式,默认为True。
+- `warmup_steps`: warmup 的步数,默认为0。当 warmup_steps>0时,会覆盖 warmup_ratio 的设置。
+- `evaluation_strategy`: 评估策略,默认为 no。"no":训练期间不进行评估;"steps":在每 eval_steps 结束进行;"epoch":在每个 epoch 结束时进行。
+- `save_strategy`: 保存策略,默认为 no。"no":训练期间不进行评估;"steps":在每 eval_steps 结束进行;"epoch":在每个 epoch 结束时进行。
+- `fp16`: 是否需要开启 FP16训练,开启 FP16训练可以加速训练,默认为 False。
+- `bf16`: 是否需要开启 BF16训练,开启 BF16训练可以加速训练,默认为 False。
+- `fp16_opt_level`: 可设置 O1或者 O2,在 O1 级别下,在白名单中的算子将使用 float16/bfloat16 计算,在黑名单中的算子将使用 float32 计算。在 O2 级别下,模型的参数被转换为 float16/bfloat16, 如果算子的浮点型输入全是 float16/bfloat16,算子才会采用 float16/bfloat16 计算,若任意浮点型输入是 float32 类型,算子将采用 float32 计算。默认为 O1。
+- `do_train`: 是否打开训练,默认为 False。
+- `do_eval`: 是否打开评估,默认为 False。
+- `recompute`: 重计算,暂支持 full 策略。开启后可降低显存以达到增大 batch size 的目的,默认为 False。
+- `tensor_parallel_degree`: 此参数 tensor_parallel_degree 表示将一层 transformer 结构的份数,该方法对通信开销较大, 建议 tensor_parallel_degree<=8, 尽量使用机器内部通信。默认为-1,表示不启用张量并行。
+- `pipeline_parallel_degree`: 表示划分流水线的大小.(假设该参数为4, 模型12层, 则每一个 pp stage 包含3层模型) 默认值-1, 表示不启用流水线并行。
+- `sharding_parallel_degree`: 表示分组参数切片的数据并行大小. 默认值1, 表示不启用分组参数切片的数据并行。
+- `sharding`:是否使用 Paddle 的 Sharding 数据并行功能,用户的参数。支持 sharding `stage1`, `stage2` or `stage3`。其中`stage2``stage3`可以和`offload`组合使用。