AI开发平台MODELARTS-预训练权重合并及转换
预训练权重合并及转换
由于预训练或增量预训练时产出的权重文件(TP和PP文件)个数比较多,推理前需要把多个权重文件合并为一个文件,并转换为HuggingFace格式。Llama2-13B一般使用单卡推理。
基于预训练或增量预训练完成的模型,进行推理部署时,权重合并和转换操作建议参考本章节。
脚本convert_weights_to_huggingface.py包含了权重文件合并和转换操作,具体的脚本内容和参数解释如下。
该脚本的执行需要在/6.3.902-ASCEND/llm_train/AscendSpeed/代码目录下进行。
python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/scripts/tools/ckpt_convert/llama/convert_weights_to_huggingface.py \ --input-model-dir ${ASCNEDSPEED_CKPT_PATH} \ --output-model-dir ${MERGE_CKPT_PATH} \ --src-tensor-model-parallel-size ${TENSOR-MODEL-PARALLEL-SIZE} \ --src-pipeline-model-parallel-size ${PIPELINE-MODEL-PARALLEL-SIZE} \ --type ${TYPE} \ --org-huggingface-dir ${HUGGINFGFACE_DIR} \ --merge-mlp
参数说明:
- ${ASCNEDSPEED_CKPT_PATH}:训练生成的AscendSpeed格式权重目录,多机多卡场景下需要把多个节点上的权重文件都放到任意一个节点的这个目录下;需要指定到含有mp_rank_xxxxxxx的目录,一般为iter_xxxxx或release。
- ${MERGE_CKPT_PATH}:合并后的权重路径。
- ${TENSOR-MODEL-PARALLEL-SIZE}:原始模型的TP配置大小,取值来自训练中的配置,此处需要手动输入。
- ${PIPELINE-MODEL-PARALLEL-SIZE}:原始模型的PP配置大小,取值来自训练中的配置,此处需要手动输入。
- ${TYPE}:原始模型参数大小,支持参数配置: 7B、13B、70B,按实际模型要求设置。
- ${HUGGINFGFACE_DIR}:可选,开源HuggingFace权重目录,用于将开源权重内的配置文件,复制到转换后权重的输出目录中。
下面提供一个convert_weights_to_huggingface.py脚本的实际样例,供参考。
export PYTHONPATH=$PYTHONPATH:${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/ && python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/scripts/tools/ckpt_convert/llama/convert_weights_to_huggingface.py \ --input-model-dir ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ckpt/ckpt-llama2-13b-sft/iter_xxxxxxx \ --output-model-dir ${MA_JOB_DIR}/6.3.902-Ascend/weight/ckpt-llama2-13b-sft-hf \ --src-tensor-model-parallel-size 8 \ --src-pipeline-model-parallel-size 1 \ --type 13B \ --org-huggingface-dir ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf \ --merge-mlp