推理前的权重合并转换
模型训练完成后,训练的产物包括模型的权重、优化器状态、loss等信息。这些内容可用于断点续训、模型评测或推理任务等。
在进行模型评测或推理任务前,需要将训练后生成的多个权重文件合并,并转换成Huggingface格式的权重文件。
权重文件的合并转换操作都要求在训练的环境中进行,为下一步推理做准备。
- 如果需要使用本文档中训练后的权重文件进行推理,请参考此章节合并训练权重文件并转换为Huggingface格式。
- 如果无推理任务或者使用开源Huggingface权重文件推理,都可以忽略此章节。
下一步的推理任务请参考文档《开源大模型基于DevServer的推理通用指导》。
将多个权重文件合并为一个文件并转换格式
该场景一般用于将预训练、SFT或LoRA训练好的Megatron模型重新转回HuggingFace格式。
一般训练都是多卡分布式训练,权重结果文件为多个且文件为Megatron格式,因此需要合并多个文件并转换为HuggingFace格式。
如果是多机训练,转换前需将多机权重目录(iter_xxxxxxx)下的mp_rank_xx_xxx文件夹整合到一起后再进行转换,合并后结果如下图所示。
该脚本的执行需要在/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink目录下执行。
#加载ascendspeed及megatron模型: export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #进入ModelLink下: cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #执行以下命令 python tools/checkpoint/util.py --model-type GPT \ --loader megatron \ --saver megatron \ --save-model-type save_huggingface_qwen \ --load-dir /home/ma-user/ws/saved_dir_for_ma_output/Qwen-14B/lora \ --target-tensor-parallel-size 1 \ --target-pipeline-parallel-size 1 \ --add-qkv-bias \ --save-dir /home/ma-user/ws/tokenizers/Qwen-14B/ # <-- 需要填入原始HF模型路径,新权重会存于../Qwen-14B/mg2hg下
参数说明:
- save-model-type:输出后权重格式如(save_huggingface_qwen、save_huggingface_llama等)。
- load-dir:训练完成后保存的权重路径
- save-dir:需要填入原始HF模型路径,新权重会存于../Qwen-14B/mg2hg下。
- target-tensor-parallel-size:任务不同调整参数target-tensor-parallel-size。默认为1
- target-pipeline-parallel-size :任务不同调整参数target-pipeline-parallel-size。默认为1
- add-qkv-bias:为像qkv这样的键和值添加偏差。
- loader:权重转换时要加载检查点的模型名称。
- saver:权重转换时加载检查模型保存名称。
# 转换后的权重文件结构
├── config.json ├── configuration_baichuan.py ├── generation_config.json ├── generation_utils.py ├── model-00001-of-00006.safetensors ├── model-00002-of-00006.safetensors ├── model-00003-of-00006.safetensors ├── model-00004-of-00006.safetensors ├── model-00005-of-00006.safetensors ├── model-00006-of-00006.safetensors ├── model.safetensors.index.json ├── modeling_baichuan.py ├── quantizer.py