更新时间:2024-04-30 GMT+08:00
分享

SFT全参微调任务

前提条件

Step1 修改训练超参配置

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

微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。SFT微调的计算量与预训练基本一致,故配置可以与预训练相同。

表1 SFT全参微调超参配置

参数

参数说明

DATASET_PATH

/home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/finetune/alpaca_ft

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

请根据实际规划修改。

TOKENIZER_PATH

/home/ma-user/ws/tokenizers/Llama2-70B

必填。加载tokenizer时,tokenizer存放地址。请根据实际规划修改。

MODEL_PATH

/home/ma-user/ws/processed_for_ma_input/Llama2-70B/converted_weights

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

MODEL_TYPE

70B

必填。模型加载类型,根据实际填写7B、13B或70B。

TRAIN_ITERS

200

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

MBS

2

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

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

  • Llama2-7B:4
  • Llama2-13B:4
  • Llama2-70B:2

GBS

1024

非必填。表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。取值默认值:

  • Llama2-7B:64
  • Llama2-13B:64
  • Llama2-70B:1024

TP

8

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

  • Llama2-7B:8
  • Llama2-13B:8
  • Llama2-70B:8

PP

8

非必填。表示流水线并行。取值建议:

  • Llama2-7B:1,一般此值与运行节点数相等。
  • Llama2-13B:1,一般此值与运行节点个数相等。
  • Llama2-70B:大于等于4,建议值为8,一般选用几台机器训练则值为几。

RUN_TYPE

sft

必填。表示训练类型,sft表示SFT微调训练。

MASTER_ADDR

xx.xx.xx.xx

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

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

NNODES

8

多机必填,单机忽略。节点总数,单机写1,双机写2,8机写8。

NODE_RANK

0

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

WORK_DIR

/home/ma-user/ws

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

Step2 启动训练脚本

请根据表1修改超参值后,再启动训练脚本。Llama2-70B建议为8机64卡训练。

多机启动

以Llama2-70B为例,多台机器执行训练启动命令如下。进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。

#第一台节点
MASTER_ADDR=xx.xx.xx.xx NNODES=8 NODE_RANK=0 MODEL_TYPE=70B  RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Llama2-70B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/converted_weights TRAIN_ITERS=200 MBS=2  GBS=1024 TP=8 PP=8 WORK_DIR=/home/ma-user/ws sh scripts/llama2/llama2.sh
# 第二台节点 
MASTER_ADDR=xx.xx.xx.xx NNODES=8 NODE_RANK=1 MODEL_TYPE=70B  RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Llama2-70B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/converted_weights TRAIN_ITERS=200 MBS=2  GBS=1024 TP=8 PP=8 WORK_DIR=/home/ma-user/ws sh scripts/llama2/llama2.sh
...
...
# 第八台节点 
MASTER_ADDR=xx.xx.xx.xx NNODES=8 NODE_RANK=7 MODEL_TYPE=70B  RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Llama2-70B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/converted_weights  TRAIN_ITERS=200 MBS=2  GBS=1024 TP=8 PP=8 WORK_DIR=/home/ma-user/ws sh scripts/llama2/llama2.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为非必填,有默认值。

单机启动

对于Llama2-7B和Llama2-13B,操作过程与Llama2-70B相同,只需修改对应参数即可,可以选用单机启动,以Llama2-13B为例。

进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本,先修改以下命令中的参数,再复制执行。

#非必填参数,有默认值
MBS=4  \
GBS=64 \
TP=8 \
PP=1 \
TRAIN_ITERS=200 \
WORK_DIR=/home/ma-user/ws \
#必填参数
MODEL_TYPE=13B  \
RUN_TYPE=sft \
DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-13B/data/finetune/alpaca_ft \
TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Llama2-13B \
MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/Llama2-70B/converted_weights \
sh scripts/llama2/llama2.sh

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

相关文档