SFT全参微调任务
前提条件
- SFT全参微调使用的数据集为alpaca_data数据,已经完成数据处理,具体参见SFT全参微调数据处理。
- 已经将开源原始HuggingFace权重转换为Megatron格式,具体参见SFT全参微调权重转换。
Step1 修改训练超参配置
SFT全参微调脚本glm3_base.sh,存放在Ascenxxx-Ascend/llm_train/AscendSpeed/scripts/glm3目录下。训练前,可以根据实际需要修改超参配置。
微调任务配置,操作同预训练配置类似,不同点为RUN_TYPE类型不同,以及输入输出路径的配置的不同。SFT微调的计算量与预训练基本一致,故配置可以与预训练相同。
参数 |
值 |
参数说明 |
---|---|---|
DATASET_PATH |
/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft |
必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 |
TOKENIZER_PATH |
/home/ma-user/ws/tokenizers/GLM3-6B |
必填。加载tokenizer时,tokenizer存放地址。请根据实际规划修改。 |
MODEL_PATH |
/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights |
必填。加载的权重文件路径。SFT全参微调权重转换章节中将HuggingFace格式转化为Megatron格式的权重文件。 |
MODEL_TYPE |
6B |
必填。模型加载类型。 |
TRAIN_ITERS |
200 |
非必填。训练迭代周期。根据实际需要修改。 |
MBS |
1 |
非必填。表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。 建议值单机1,双机2。 |
GBS |
64 |
非必填。表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。 建议值单机64,双机128。 |
TP |
2 |
非必填。表示张量并行。默认值为2。 |
PP |
4 |
非必填。表示流水线并行。建议值单机4,双机8。 |
RUN_TYPE |
sft |
必填。表示训练类型,sft表示SFT微调训练。 |
MASTER_ADDR |
localhost |
多机必填,单机忽略。指定主节点IP地址,多台机器中需要指定一个节点IP为主节点IP。 一般指定第一个节点IP为主节点IP。 |
NNODES |
q |
多机必填,单机忽略。节点总数,单机写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。 |
SEQ_LEN |
8192 |
非必填。默认值为8192。 |
Step2 启动训练脚本
请根据表1修改超参值后,再启动训练脚本。
单机启动
以GLM3-6B为例,单机SFT全参微调启动命令如下。
进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。
MODEL_TYPE=6B RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=200 MBS=1 GBS=64 TP=2 PP=4 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh
其中 MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、SEQ_LEN为非必填,有默认值。
多机启动
以GLM3-6B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以下命令以双机为例。
进入代码目录/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed下执行启动脚本。xxx-Ascend请根据实际目录替换。
第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=6B RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=200 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=6B RUN_TYPE=sft DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/finetune/alpaca_ft TOKENIZER_PATH=/home/ma-user/ws/tokenizers/GLM3-6B MODEL_PATH=/home/ma-user/ws/processed_for_ma_input/GLM3-6B/converted_weights TRAIN_ITERS=200 MBS=2 GBS=128 TP=2 PP=8 SEQ_LEN=8192 WORK_DIR=/home/ma-user/ws sh scripts/glm3/glm3_base.sh
以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。
其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。
训练完成后,请参考查看日志和性能章节查看日志和性能。