MindSpore Transformers套件实现知识蒸馏实践体验
收藏回复举报
MindSpore Transformers套件实现知识蒸馏实践体验
新人帖
发表于2025-03-30 17:22:46
0 查看

有幸体验参考OpenR1-Qwen-7B,基于MindSpore框架和MindSpore Transformers大模型套件,利用DeepSeek-R1蒸馏Qwen2.5-Math-7B。

按照实操视频,基本可以顺利完成。https://www.bilibili.com/video/BV1UeZ3YaECx/?spm_id_from=333.1387.homepage.video_card.click&vd_source=a167ce7abbcf086a91bc3d842fcd9fc6

(1)数据处理

已提供OpenR1-Math-220k数据集,在使用该数据集进行模型微调前,需要将每一条数据进行分词(Tokenize)处理并且对问题的答案打上标签(labels)。使用MindSpore Transformers提供了离线转换的脚本,通过简单的命令行即可将预处理的数据集保存到本地,方便断点续训。

修改/home/HwHiAiUser/xxx/OpenR1-Qwen-7B/dataset/dyn/data_process_dyn.yaml 文件 ,修改datafile(数据集目录)、merge file vocal file (模型权重目录)文件目录 

进去mindformers目录启动数据处理脚本 

python toolkit/data_preprocess/huggingface/datasets_preprocess.py --config /home/HwHiAiUser/xxx/OpenR1-Qwen-7B/dataset/dyn/data_process_dyn.yaml --save_path /home/HwHiAiUser/xxx/mindformers/OpenR1_Dataset_Handler --register_path /home/HwHiAiUser/xxx/OpenR1-Qwen-7B/modules/ 

(2)模型微调

修改修改/home/HwHiAiUser/xxx/OpenR1-Qwen-7B/configs/finetune_qwen_2_5_7b_dyn.yaml 

load_checkpoint: '/home/HwHiAiUser/xxx/Qwen2.5-Math-7B/ms_safetensors' # 权重加载路径,根据实际情况修改 

path: "/home/HwHiAiUser/xxx/mindformers/OpenR1_Dataset_Handler" # 第二步处理好的数据集路径 

启动微调参数

防止oom 

export ACLNN_CACHE_LIMIT=10 # CANN 缓存限制 

export MS_DEV_RUNTIME_CONF="aclnn_cache_queue_length:128" # MS缓存队列长度建议设置成128,设置过大内存容易OOM,设置越小性能越差 

进入mindformers目录/home/HwHiAiUser/xxx/mindformers

 bash scripts/msrun_launcher.sh "run_mindformer.py --config /home/HwHiAiUser/xxx/OpenR1-Qwen-7B/configs/finetune_qwen_2_5_7b_dyn.yaml --run_mode finetune" 8 

 日志记录在output/msrun_log目录下,可以通过tail指令查看日志信息。 

tail指令:tail -f output/msrun_log/worker_7.log 

微调完成后,输出的权重文件在output/checkpoint 和checkpoint_network(推荐使用)目录下。 

(3)合并训练后的权重

进入mindformers/toolkit/safetensors 

通过命令行运行脚本,并指定相关参数。 

参数说明: 

--mindspore_ckpt_dir:指定权重文件的路径,需为包含 rank_* 文件的上级目录。 

--src_strategy_dirs:指定分布式策略文件的路径。 

--output_dir:指定保存合并后权重的路径。 

--file_suffix:指定权重保存后的后缀,如 "1_1"。 

--format:指定源权重的格式,可选 "ckpt" 或 "safetensors"。 

--has_redundancy:指定权重是否已去除冗余,True 表示未去除,False 表示已去除。 

python unified_safetensors.py --mindspore_ckpt_dir /home/HwHiAiUser/xxx/mindformers/output/checkpoint_network --src_strategy_dirs /home/HwHiAiUser/xxx/mindformers/output/strategy/ --output_dir /home/HwHiAiUser/xxx/sft_output_1000 --file_suffix "1000_1" --format "safetensors"

(4)推理部署

执行推理脚本:/home/HwHiAiUser/xxx/mindformers/research/qwen2_5/run_qwen2_5.py 

python run_qwen2_5.py --config /home/HwHiAiUser/xxx/Qwen2.5-Math-7B/predict_qwen2_5_math_7b_instruct.yaml --load_checkpoint /home/HwHiAiUser/xxx/sft_output_1000/1000_1_ckpt_convert/unified_safe/ --vocab_file /home/HwHiAiUser/xxx/Qwen2.5-Math-7B/vocab.json --merges_file /home/HwHiAiUser/xxx/Qwen2.5-Math-7B/merges.txt --predict_data 'Given $0 \leqslant x, y, z \leqslant 1$, solve the equation: 

$$\frac{x}{1+y+z x}+\frac{y}{1+z+x y}+\frac{z}{1+x+y z}=\frac{3}{x+y+z}.$$'

 

 

我要发帖子