diff --git a/docs/mindformers/docs/source_zh_cn/example/sft_on_glm4/sft_on_glm4.md b/docs/mindformers/docs/source_zh_cn/example/sft_on_glm4/sft_on_glm4.md new file mode 100644 index 0000000000000000000000000000000000000000..9c8b826080e37289d632285cf15065391502d46b --- /dev/null +++ b/docs/mindformers/docs/source_zh_cn/example/sft_on_glm4/sft_on_glm4.md @@ -0,0 +1,155 @@ +# 使用MindFormers框架进行GLM-4-9B-Chat微调流程 + +## 1. 环境搭建 + +### 安装MindSpore 2.6.0 + +```bash +pip install \ +https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.6.0/MindSpore\ +/unified/aarch64/mindspore-2.6.0-cp311-cp311-linux_aarch64.whl \ +--trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com \ +-i https://repo.huaweicloud.com/repository/pypi/simple +``` + +### 安装MindFormers 1.5.0及相关环境 + +```bash +git clone -b v1.5.0 https://gitee.com/mindspore/mindformers.git +cd mindformers +bash build.sh +``` + +## 2. 数据转换 + +### 数据集准备 + +使用内部工业数据微调数据集,您可以将其替换为公开数据集如alpaca。注意数据集里的每一行数据应当处理为以下格式: + +```json +{ + "type": "chatml", + "conversations": [ + { + "from": "human", + "value": "Give three tips for staying healthy." + }, + { + "from": "gpt", + "value": "1. Eat a balanced diet and make sure to include plenty of + fruits and vegetables.\n2. Exercise regularly to keep your body active + and strong.\n3. Get enough sleep and maintain a consistent sleep schedule." + } + ] +} +``` + +### 生成MindRecord格式数据集 + +```bash +python mindformers/tools/dataset_preprocess/glm4/glm4_preprocess.py \ + --input_glob /path/to/dataset \ + --vocab_file /path/tokenizer.model \ + --seq_length 8192 \ + --output_file /path/alpaca-messages.mindrecord +``` + +## 3. 多卡训练 + +### 3.1 模型下载 + +在HuggingFace或者其他平台上下载safetensor格式的glm-4-9b模型权重。 + +### 3.2 权重转换 + +```python +python convert_weight.py --model glm4 --input_path HF_CKPT_PATH \ +--output_path MS_NOT_CONCAT_CKPT_PATH --dtype bf16 --config YAML_PATH +``` + +这一步将模型从HF权重转换为MindSpore权重,输出为一整个模型权重的ckpt文件。 + +> 注:如果提示trust_remote_code相关错误,按照提示设置trust_remote_code=True即可 + +### 3.3 并行策略配置 + +在`.../mindformers/configs/glm4/finetune_glm4_9b.yaml`的基础上作修改,根据自身需求调整参数即可。 + +注意:model_config的seq_length要和数据集一致,否则会有其他报错。 + +### 3.4 微调 + +#### 设置环境变量 + +```bash +export MS_ASCEND_CHECK_OVERFLOW_MODE=INFNAN_MODE +``` + +#### 首次训练 + +```bash +scripts/msrun_launcher.sh "run_mindformer.py \ + --config configs/glm4/finetune_glm4_9b.yaml \ + --load_checkpoint /path/to/ckpt \ + --auto_trans_ckpt True \ + --train_dataset /path/todataset \ + --run_mode finetune" 8 +``` + +auto_trans_ckpt配置为True会根据finetune_glm4_9b.yaml中的parallel config自动对权重进行切分/合并,并生成权重文件夹(transformed_checkpoint)和分布式策略文件夹(strategy)。 + +> 注意:开启了权重自动转换(auto_trans_ckpt=True),会将原有的strategy和transformed_checkpoint文件夹清空,然后保存最新任务的转换结果,如有需要请将其保存到自定义文件夹。 + +#### 断点恢复训练 + +```bash +--load_checkpoint: 断点权重文件夹 +--resume_training: True +--src_strategy_path_or_dir: 分布式策略文件路径 +--auto_trans_ckpt False +``` + +#### 总体流程 + +1. 开始训练,设置auto_trans_ckpt为True +2. 以load_checkpoint为输出权重,根据parallel config生成初始的transformed_checkpoint和strategy +3. 加载transformed_checkpoint和strategy +4. 开始训练 +5. 训练过程中checkpoint保存 +6. 恢复断点训练时,设置auto_trans_ckpt为False +7. 加载checkpoint和前期生成的strategy +8. 继续训练 + +### 3.5 权重切割与合并(补充) + +#### 自动转换 + +在原有分布式训练/推理任务的基础上,在yaml配置文件中设置auto_trans_ckpt:True, +配置--load_checkpoint: 断点权重文件夹和--src_strategy_path_or_dir: 分布式策略文件路径, +在训练开始前会根据parallel config自动转换。 + +#### 离线转换 + +##### 生成分布式策略文件 + +在原有分布式训练/推理任务的基础上,在yaml配置文件中设置only_save_strategy:True来生成策略文件。设置之后任务会在生成分布式策略文件后立即停止,而不会实际执行训练或推理。 + +##### 权重转换脚本 + +```python +python mindformers/tools/transform_ckpt.py \ +--src_ckpt_strategy SRC_CKPT_STRATEGY --dst_ckpt_strategy DST_CKPT_STRATEGY \ +--src_ckpt_dir SRC_CKPT_DIR --dst_ckpt_dir DST_CKPT_DIR +``` + +**参数说明**: +- src_ckpt_strategy:待转权重的分布式策略文件路径 + - 若为None,表示待转权重为完整权重 + - 若为切分策略文件,表示原始的权重对应的策略文件 + - 若为文件夹,表示需要合并文件夹内策略文件(仅在流水并行生成的策略文件时需要),合并后的策略文件保存在SRC_CKPT_STRATEGY/merged_ckpt_strategy.ckpt路径下 +- dst_ckpt_strategy:目标权重的分布式策略文件路径 + - 若为None,表示将待转权重合并为完整权重 + - 若为切分策略文件,表示目标卡数对应的策略文件 + - 若为文件夹,表示需要合并文件夹内策略文件(仅在流水并行生成的策略文件时需要),合并后的策略文件保存在DST_CKPT_STRATEGY/merged_ckpt_strategy.ckpt路径下 +- src_ckpt_dir: 待转权重路径,须按照SRC_CKPT_DIR/rank_{i}/checkpoint_{i}.ckpt存放,比如单一权重存放格式为SRC_CKPT_DIR/rank_0/checkpoint_0.ckpt +- dst_ckpt_dir:目标权重保存路径,为自定义空文件夹路径,转换后模型以DST_CKPT_DIR/rank_{i}/xxx.ckpt存放