在自然语言处理领域,模型微调是一种强大的技术,可以让预训练模型适应特定的任务和数据集。本文将详细介绍如何使用 昇腾LLM分布式训练框架MindSpeed-LLM 进行 ChatGLM3-6B 模型的微调迁移,并结合工具进行性能分析和数据解析。
一、迁移准备
参考文档
主要参考 昇腾LLM分布式训练框架MindSpeed-LLM 中的使用方式和流程进行迁移。
二、迁移步骤
首先需要在安装好相关组件的昇腾环境中,下载模型源码及权重文件,安装依赖。
1. 脚本分析
使用以下命令对待分析脚本进行分析:
cd /usr/local/Ascend/ascend-toolkit/latest/tools/ms_fmk_transplt
./pytorch_analyse.sh -i /home/FAE_test_8/ChatGLM3/finetune_demo -o /data0/docker_files/modellink_test_lfx_07/analysis -v 2.1.0
具体的命令操作如下:进入到
“/usr/local/Ascend/ascend-toolkit/latest/tools/ms_fmk_transplt”
目录下,然后执行 “./pytorch_analyse.sh” 脚本进行分析。例如,命令 “./pytorch_analyse.sh -i 待分析脚本路径 -o 分析结果输出路径 -v 待分析脚本框架版本 [-m 分析模式]”,像 “./pytorch_analyse.sh -i /home/FAE_test_8/ChatGLM3/finetune_demo -o /data0/docker_files/modellink_test_lfx_07/analysis -v 2.1.0” 这样的示例,就是针对特定的脚本路径、输出路径以及脚本框架版本进行分析,通过分析可以清晰知晓模型在当前框架版本下的各项参数、结构等与昇腾平台的契合程度,为后续的微调工作提供关键依据,确保整个微调过程能够顺利在昇腾环境中开展。
2. 权重格式转换
通过以下 Python 脚本将模型权重格式进行转换:
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader chatglm3_hf \
--saver megatron \
--target-tensor-parallel-size 1 \ # 参数与微调配置保持一致
--target-pipeline-parallel-size 2 \ # 参数与微调配置保持一致
--load-dir /data0/docker_files/modellink_test_lfx_07/weights/chatglm3-6b/ \
--save-dir /data0/docker_files/modellink_test_lfx_07/weights/chatglm3_6b_tp1pp2_1/ \
--tokenizer-model /data0/docker_files/modellink_test_lfx_07/weights/chatglm3-6b/tokenizer.model \
--add-qkv-bias
具体转换时,需要使用 “python tools/checkpoint/convert_ckpt.py” 命令,并搭配多个参数来完成。例如,通过 “--model-type” 参数指定模型类型,像 “--model-type GPT”;“--loader” 参数设定加载器相关信息,如 “--loader chatglm3_hf”;“--saver” 参数明确保存的格式,像 “--saver megatron” 等。同时,还有一些与并行相关的参数设置,像 “--target-tensor-parallel-size” 和 “--target-pipeline-parallel-size”,要保证其参数与微调配置保持一致,例如 “--target-tensor-parallel-size 1 #参数与微调配置保持一致”“--target-pipeline-parallel-size 2 #参数与微调配置保持一致”。而且要准确指定加载目录和保存目录等路径参数,像 “--load-dir /data0/docker_files/modellink_test_lfx_07/weights/chatglm3-6b/”“--save-dir /data0/docker_files/modellink_test_lfx_07/weights/chatglm3_6b_tp1pp2_1/” 等,以及 “--tokenizer-model” 指定对应的 tokenizer 模型路径等。正确执行权重格式转换操作,能让模型的权重以符合昇腾微调要求的格式存在,保障后续微调时模型能够按照预期进行训练和优化。
3. 处理微调数据集
首先创建一个目录用于存放处理后的微调数据集:
mkdir./finetune_dataset/chatglm3-6b-hf_1/
然后使用以下 Python 脚本处理微调数据集:
python./preprocess_data.py \
--input./finetune_dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path /data0/docker_files/modellink_test_lfx_07/weights/chatglm3-6b/ \
--output-prefix./finetune_dataset/chatglm3-6b-hf_1/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name GeneralInstructionHandler \
--append-eod
运行 “python./preprocess_data.py” 脚本来处理数据集时,要配置好一系列的参数,像 “--input” 参数指定输入数据集的路径,如 “--input./finetune_dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet”;“--tokenizer-name-or-path” 参数设定 tokenizer 的路径,像 “--tokenizer-name-or-path /data0/docker_files/modellink_test_lfx_07/weights/chatglm3-6b/”;“--output-prefix” 参数明确输出文件的前缀,例如 “--output-prefix./finetune_dataset/chatglm3-6b-hf_1/alpaca” 等,同时还可以设置如 “--workers” 指定工作进程数量、“--log-interval” 设置日志记录间隔、“--tokenizer-type” 设定 tokenizer 类型、“--handler-name” 指定处理函数名称等参数,通过这些详细的参数设定和脚本运行,让数据集能够被准确地处理,使其在后续微调时能够被模型有效利用,提升微调的质量和效果。
4. 微调
正式微调阶段需要我们做好多方面的准备工作,包括开启性能分析、设置相关路径以及准确修改脚本启动微调等,每个操作和参数配置都有着特定的含义和作用。
1.开启性能分析并设置 profiling 数据保存路径:
export PROFILING_MODE=true
export PROFILING_OPTIONS='{"output":"/data0/docker_files/modellink_test_lfx_07/output_1","training_trace":"on","task_trace":"on","aicpu":"on","fp_point":"","bp_point":"","aic_metrics":"PipeUtilization"}'
2. 修改脚本启动微调,可参考以下配置修改脚本参数,并改小迭代次数、设置保存间隔等:
bash examples/chatglm3/tune_chatglm3_6B_8K.sh
#(需参考以下配置修改脚本参数,还需改小迭代次数、设置保存间隔等)
DATA_PATH="./finetune_dataset/chatglm3-6b-hf/alpaca"
TOKENIZER_PATH="/data0/docker_files/modellink_test_lfx_07/weights/chatglm3-6b/"
CKPT_LOAD_DIR="/data0/docker_files/modellink_test_lfx_07/weights/chatglm3_6b_tp1pp2/"
--load ${CKPT_LOAD_DIR} \
--finetune \
--is-instruction-dataset \
--tokenizer-padding-side left \
--tokenizer-type PretrainedFromHF \
--tokenizer-not-use-fast \
三、微调性能数据分析
1. 微调 Log 解析
可通过导出和分析过程日志并进行解析,以更好地了解微调过程中的情况。
2. 性能数据解析和导出
进入性能数据解析工具所在目录:
cd /usr/local/Ascend/ascend-toolkit/latest/tools/profiler/bin
进行 profiling 性能数据解析和导出:
./msprof --parse=on --output=/data0/docker_files/modellink_test_lfx_07/output/PROF_000001_20240819212333510_BIAIPAIPLMCCDCOA/
./msprof --export=on --output=/data0/docker_files/modellink_test_lfx_07/output/PROF_000001_20240819212333510_BIAIPAIPLMCCDCOA/
解析后的性能数据为 .json 类型,可以使用 Chrome 浏览器的 chrome://tracing 进行查看,快捷键为 WSAD。
通过以上步骤,我们可以成功地对 ChatGLM3-6B 模型进行微调迁移,并利用工具进行性能分析和数据解析,以优化模型的性能和效果。希望本文对大家在自然语言处理模型微调方面有所帮助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。