LoRA微调训练
本章节以Baichuan2-13B为例,介绍LoRA微调训练的全过程。
Step1 LoRA微调数据处理
训练前需要对数据集进行预处理,转化为.bin和.idx格式文件,以满足训练要求。
LoRA微调训练与SFT微调使用同一个数据集,如果已经在SFT微调时处理过数据,可以直接使用,无需重复处理。如果未处理过数据,请参见SFT全参微调数据处理章节先处理数据。
Step2 LoRA微调权重转换
LoRA微调训练前,需要先把训练权重文件转换为Megatron格式。
LoRA微调训练和SFT全参微调使用的是同一个HuggingFace权重文件转换为Megatron格式后的结果也是通用的。
如果在SFT微调任务中已经完成了HuggingFace权重转换操作,如果在SFT全参微调任务中已经完成了HuggingFace权重转换操作,此处无需重复操作,可以直接使用SFT全参微调中的权重转换结果。如果前面没有执行HuggingFace权重转换任务,可以参考SFT全参微调权重转换章节完成。
Step3 LoRA微调超参配置
本章节介绍LoRA微调训练前的超参配置,可以根据实际需要修改。
LoRA微调训练脚本baichuan2.sh,存放在llm_train/AscendSpeed/script/baichuan2/目录下。训练前,可以根据实际需要配置超参配置。
微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型和输入输出路径,微调还需要加载权重文件。
参数 |
示例值 |
参数说明 |
---|---|---|
DATA_PATH |
/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/alpaca_ft |
必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 |
TOKENIZER_MODEL |
/home/ma-user/ws/tokenizers/BaiChuan2-13B/ |
必填。加载tokenizer时,tokenizer存放地址。 请根据实际规划修改。 |
MODEL_TYPE |
13B |
必填。模型加载类型,默认为13B。 |
TRAIN_ITERS |
1000 |
非必填。训练迭代周期。根据实际需要修改。默认值为1000。 |
MBS |
1 |
非必填。流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。 默认值1。建议值单机1,双机2。 |
GBS |
16 |
非必填。默认值:16;训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长,建议值单机16,双机32。 |
TP |
8 |
非必填。张量并行。默认值为8。 |
PP |
1 |
非必填。表示流水线并行。建议值单机1,双机2。 |
RUN_TYPE |
lora |
必填。表示训练类型。lora表示LoRA微调。 |
MASTER_ADDR |
localhost |
多机必填。 单机忽略;指定主节点IP地址,多台机器中需要指定一个节点IP为主节点IP。 一般指定第一个节点IP为主节点IP。 |
NNODES |
1 |
多机必填,单机忽略;,单机写1,双机写2。 |
NODE_RANK |
0 |
多机必填,单机忽略;节点序号,当前节点ID,一般从0开始,单机默认是0。 |
CKPT_LOAD_DIR |
/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/converted_weights |
从 huggingface 格式转化为 magatron 格式的权重文件。 |
WORK_DIR |
/home/ma-user/ws |
非必填。容器的工作目录。训练的权重文件保存在此路径下。默认值为:/home/ma-user/ws。 |
Step4 启动训练脚本
请根据表1修改超参值后,再启动训练脚本。
单机启动
以baichuan2-13b为例,单机LoRA微调启动命令如下。进入代码目录/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed下执行启动脚本。
MODEL_TYPE=13B RUN_TYPE=lora DATA_PATH=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/alpaca_ft TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B CKPT_LOAD_DIR= /home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/converted_weights TRAIN_ITERS=300 MBS=1 GBS=16 TP=8 PP=1 WORK_DIR=/home/ma-user/ws sh scripts/baichuan2/baichuan2.sh
其中 MODEL_TYPE 、RUN_TYPE、DATA_PATH、TOKENIZER_MODEL、CKPT_LOAD_DIR为必填;TRAIN_ITERS、MBS、GBS、TP、PP 为非必填,有默认值
多机启动
以baichuan2-13b为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以双机为例。进入代码目录/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed下执行启动脚本。
第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=13B RUN_TYPE=lora DATA_PATH=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/alpaca_ft TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B CKPT_LOAD_DIR=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/converted_weights TRAIN_ITERS=300 MBS=1 GBS=16 TP=8 PP=1 WORK_DIR=/home/ma-user/ws sh scripts/baichuan2/baichuan2.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=13B RUN_TYPE=lora DATA_PATH=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/alpaca_ft TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B CKPT_LOAD_DIR=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/converted_weights TRAIN_ITERS=300 MBS=1 GBS=16 TP=8 PP=1 WORK_DIR=/home/ma-user/ws sh scripts/baichuan2/baichuan2.sh
以上命令多台机器执行时,只有${NODE_RANK}:节点ID值不同,其他参数都保持一致;其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATA_PATH、TOKENIZER_MODEL、CKPT_LOAD_DIR为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR为非必填,有默认值。
训练完成后,请参考查看日志和性能章节查看LoRA微调训练的日志和性能。