断点续训练
断点续训练是指因为某些原因导致训练作业还未完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。
断点续训练是通过checkpoint机制实现。checkpoint机制是在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint接续训练。
当需要从训练中断的位置接续训练,只需要加载checkpoint,并用checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。
原有训练参数配置表1断点续训练中新加MODEL_PATH参数,并修改TRAIN_ITERS参数值。
参数 |
参考值 |
参数说明 |
|
---|---|---|---|
CKPT_LOAD_DIR |
/home/ma-user/ws/saved_dir_for_ma_output/BaiChuan2-13B/pretrain |
加载上一步预训练后保存的权重文件。 |
|
TRAIN_ITERS |
300 |
训练周期,必须大于上次保存训练的周期次数。 |
|
RUN_TYPE |
retrain |
必填。训练脚本类型,retrain表示断点续训练。 |
断点续训练操作过程
baichuan2-13b的断点续训脚本baichuan2.sh,存放在“6.3.904-Ascend/llm_train/AscendSpeed/scripts/baichuan2”目录下。
- 执行命令如下,进入AscendSpeed代码目录。
cd /home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/
- 在AscendSpeed代码目录下执行断点续训练脚本。
单机启动
MODEL_TYPE=13B RUN_TYPE=retrain DATA_PATH= /home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/retrain/alpaca_text_document TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B/tokenizer.model CKPT_LOAD_DIR=/home/ma-user/ws/saved_dir_for_ma_output/BaiChuan2-13B/pretrain TRAIN_ITERS=300 MBS=1 GBS=16 TP=8 PP=1 sh scripts/baichuan2/baichuan2.sh 多机启动 以baichuan2-13b为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,已双机为例。 #第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=13B RUN_TYPE=retrain DATA_PATH=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/pretrain/alpaca_text_document TOKENIZER_MODEL=/home/ma-user/code/model/Baichuan2-13B-Chat/tokenizer.model CKPT_LOAD_DIR=/home/ma-user/ws/saved_dir_for_ma_output/BaiChuan2-13B/pretrain TRAIN_ITERS=300 MBS=2 GBS=32 TP=8 PP=2 sh scripts/baichuan2/baichuan2.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=13B RUN_TYPE=retrain DATA_PATH=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/pretrain/alpaca_text_document TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B/tokenizer.model CKPT_LOAD_DIR=/home/ma-user/ws/saved_dir_for_ma_output/BaiChuan2-13B/pretrain TRAIN_ITERS=300 MBS=2 GBS=32 TP=8 PP=2 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为非必填,有默认值。
图1 保存的ckpt
- 可以参考查看日志和性能操作,查看断点续训练日志和性能。