更新时间:2024-06-17 GMT+08:00
分享

LoRA微调训练

本章节以Qwen-14B为例,介绍LoRA微调训练的全过程。对于Qwen-7B和Qwen-72B,操作过程与Qwen-14B相同,只需修改对应参数即可。

Step1 LoRA微调数据处理

训练前需要对数据集进行预处理,转化为.bin和.idx格式文件,以满足训练要求。

LoRA微调训练与SFT微调使用同一个数据集,如果已经在SFT微调时处理过数据,可以直接使用,无需重复处理。如果未处理过数据,请参见SFT微调数据处理章节先处理数据。

Step2 LoRA微调权重转换

LoRA微调训练前,需要先把训练权重文件转换为Megatron格式。

LoRA微调训练和SFT全参微调使用的是同一个HuggingFace权重文件转换为Megatron格式后的结果也是通用的。

如果在SFT微调任务中已经完成了HuggingFace权重转换操作,此处无需重复操作,可以直接使用SFT微调中的权重转换结果。

如果前面没有执行HuggingFace权重转换任务,可以参考SFT微调权重转换章节完成。

Step3 LoRA微调超参配置

LoRA微调训练脚本qwen.sh,存放在llm_train/AscendSpeed/scripts/qwen/目录下。训练前,可以根据实际需要修改超参配置。

微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。

表1 LoRA微调超参配置

参数

示例值

参数说明

DATASET_PATH

/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/finetune/alpaca_ft

必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。

请根据实际规划修改。

TOKENIZER_PATH

/home/ma-user/ws/tokenizers/Qwen-14B

必填。加载tokenizer时,tokenizer存放地址。

请根据实际规划修改。

MODEL_TYPE

14B

必填。表示模型加载类型,根据实际填写7B、14B或72B。

TRAIN_ITERS

300

非必填。训练迭代周期。根据实际需要修改。

MBS

4

非必填。表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。

该值与TP和PP以及模型大小相关,可根据实际情况进行调整。默认值为4。取值建议如下:

  • Qwen-14B:4
  • Qwen-7B:2
  • Qwen-72B:1

GBS

64

非必填。表示训练中所有机器一个step所处理的样本量,影响每一次训练迭代的时长。对于PP(流水线并行)值大于1的场景,适当增大GBS值吞吐性能会有所提升。

TP

8

非必填。表示张量并行。默认值为8,取值建议:

  • Qwen-14B:8
  • Qwen-7B:4
  • Qwen-72B:8

PP

1

非必填。表示流水线并行。默认值为1,取值建议:

  • Qwen-14B:1
  • Qwen-7B:1
  • Qwen-72B:大于等于5,例如5机填写5,8机填8。

RUN_TYPE

lora

必填。表示训练类型。lora表示LoRA微调。

MASTER_ADDR

localhost

多机必填。主节点IP地址,多台机器中指定一个节点IP为主节点IP。

一般指定第一个节点IP为主节点IP。

NNODES

1

多机必填。节点总数,如为双机,则写2。单机默认是1。

NODE_RANK

0

多机必填。节点序号,当前节点ID,一般从0开始。单机默认是0。以Qwen-72B 5机训练为例,节点ID依次为(0 1 2 3 4);一般ID为0的节点设置为主节点IP。

MODEL_PATH

/home/ma-user/ws/processed_for_ma_input/Qwen-14B/converted_weights

必填。加载的权重文件路径。SFT微调权重转换章节中将HuggingFace格式转化为Megatron格式的权重文件。

WORK_DIR

/home/ma-user/ws

非必填。容器的工作目录,训练的权重文件保存在此路径下。默认值为:/home/ma-user/ws。

SEQ_LEN

4096

非必填。默认值为4096。

在qwen.sh脚本默认情况下Lora微调的配置为:

--lora-r 16

--lora-alpha 32

LoRA微调训练的计算量要小于预训练,可以适当增加MBS的值,这里建议:

  • 对于7B:TP=4 PP=1 MBS=2
  • 对于14B:TP=8 PP=1 MBS=4
  • 对于72B:TP=8 PP=5 MBS=1

Step4 启动训练脚本

请根据表1修改超参值后,再启动训练脚本。

单机启动

以Qwen-14B为例,单机SFT微调启动命令如下。在/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/代码目录下执行。

MODEL_TYPE=14B  RUN_TYPE=lora DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/converted_weights TRAIN_ITERS=300 MBS=4  GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh

其中 MODEL_TYPE 、RUN_TYPE、DATA_PATH、TOKENIZER_MODEL、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、SEQ_LEN为非必填,有默认值。

多机启动

以Qwen-14B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,此处以双机为例。在/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/代码目录下执行。

第一台节点
MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=14B  RUN_TYPE=lora DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/converted_weights TRAIN_ITERS=300 MBS=4 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh
 ... 
 ... 
# 第二台节点 
MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=14B  RUN_TYPE=lora DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/converted_weights TRAIN_ITERS=300 MBS=4 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh

以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。

其中MASTER_ADDR、 NODE_RANK、 NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR为非必填,有默认值。

训练完成后,请参考查看日志和性能章节,查看LoRA微调训练的日志和性能。

分享:

    相关文档

    相关产品