基于昇腾MindSpeed LLM的大模型微调训练实践
发表于 2025/06/23
近年来,大语言模型的技术发展呈现出两大特征:模型参数规模增大,从百亿千亿到万亿参数;模型架构持续优化,从密集参数向混合专家(MoE)等高效架构演进。同时,微调技术取得重要突破,以R1范式为代表的推理增强型方法通过思维链数据注入和强化学习优化,显著提升了模型的专业能力。这种"高效预训练+智能微调"的技术路径,正在推动大模型向更精准、更专业的方向发展。为支持微调技术快速迭代,昇腾MindSpeed通过适配业界主流大模型,支持不同风格数据集格式转换,无缝支持各大参数量和模型架构微调范式。针对大模型微调场景进行了深度优化,通过创新的内存管理和计算加速技术,显著提升了微调效率和易用性。
微调训练关键操作步骤效果
数据预处理
针对不同数据集风格,选择相应的 Handler(如 AlpacaStyleInstructionHandler、SharegptStyleInstructionHandler 等)。
通过指定数据集路径和所选 tokenizer 路径,自动生成对应的数据集 input_ids 和 attention_masks,用于后续模型训练或推理。
权重转换
将开源模型权重转换为 MindSpeed LLM 可用的权重格式,确保模型参数能够顺利迁移与加载。根据模型的参数规模和结构特点,合理指定模型并行策略(如数据并行、张量并行等),以提升训练与推理效率,充分利用硬件资源。
微调训练
在完成前两步的数据集预处理和权重格式转换后,填入相应处理好的数据集路径和权重文件路径,配置相关参数,即可启动模型微调任务。这一过程支持灵活调整训练轮次、学习率等超参数,实现对预训练模型的高效定制化优化。
进行推理
利用微调后保存的模型权重进行推理。加载经过微调的权重文件,并结合相应的 tokenizer和推理脚本,对输入文本进行处理,生成模型输出结果。该过程支持批量推理、多样化的输入格式以及不同的生成参数配置,能够满足实际应用中对定制化推理的多种需求,进一步验证微调效果。
基于MindSpeed LLM高效分布式微调训练的关键特性
大模型结构的多样性带来了各模型微调训练互不兼容的问题,数据集格式不统一使得数据处理成为难题,模型参数和激活值变大,显存越来越成为模型微调训练的瓶颈。MindSpeed通过支持预置120+主流大模型,支持20种Handler风格数据集灵活切换以及多种微调方案;并通过一系列昇腾亲和的微调加速和通算优化算法,实现内存节省和微调训练吞吐提升,让用户不受模型限制高效稳定微调训练开发。
提供120+主流大模型,20种Handler风格数据集灵活切换
目前开源模型结构多样,不兼容固定分布式并行训练,业界训练所需要的数据集格式不统一,不支持混合格式处理。MindSpeed LLM适配主流的大语言模型架构,包括稠密模型、MoE模型等120+主流大模型,其中亲和昇腾硬件的模型50+个;同时,提供20种Handler风格的数据集预处理技术,包括动态批处理/历史对话处理/Pack数据处理等,支持全参/QLoRA/LoRA微调方案,让用户灵活选择不同的模型、数据集以及微调方案。
支持梯度累积/Zero冗余优化器/内存卸载/组合并行策略等技术,内存降低30%+
随着模型参数和模型权重越来越大,模型微调训练对内存的需求量激增,如何在有限的内存容量下节省内存成为业界亟需解决的问题。MindSpeed通过支持分布式并行组合切分策略,降低模型微调对单卡NPU的内存需求。同时支持swap-attention特性,利用设备内存和CPU内存来存放激活值,以H2D(Host To Device)高带宽的优势以网补存。整体内存节省30%以上。
支持LoRA Fusion微调加速,训练效率提升20%+
LoRA微调算法通过更新附加在冻结预训练模型权重上的低秩矩阵,实现对模型的高效微调。过程中串行执行冻结预训练权重和低秩权重的前向和反向更新,在分布式场景,这两个权重分支会造成冗余通信耗时。MindSpeed通过将没有依赖关系的预训练冻结权重分支和权重更新分支异步并行,即单一流水优化为通信计算双流水线,减少串行下的等待耗时,训练吞吐性能提升40%。
快速上手:
安装镜像:
参考 https://gitee.com/ascend/MindSpeed-LLM/blob/2.0.0/docs/features/docker_guide.md 进行镜像拉取
进入容器
docker start llm_test
docker exec -it llm_test bash
cd MindSpeed-LLM
数据预处理
数据集下载:
mkdir dataset
cd dataset/
wget https://hf-mirror.com/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
Alpaca风格数据集处理
bash examples/mcore/llama2/data_convert_llama2_instruction.sh
权重转换
将开源的Huggingface权重转为MindSpeed-LLM可使用的权重,根据模型参数量和模型结构指定模型并行的策略,将llama2-7b的开源权重放入” ./model_from_hf/llama-2-7b-hf/”路径
mkdir -p ./model_from_hf/llama-2-7b-hf/
pip install modelscope
modelscope download --model shakechen/Llama-2-7b-hf --local_dir ./model_from_hf/llama-2-7b-hf/
bash examples/mcore/llama2/ckpt_convert_llama2_hf2mcore.sh
微调训练
填入前两步处理过的数据集和权重路径,进行微调
DATA_PATH="./finetune_dataset/alpaca"
CKPT_SAVE_DIR="./ckpt/"
TOKENIZER_MODEL="./model_from_hf/llama-2-7b-hf/"
CKPT_LOAD_DIR="./model_weights/Llama2-mcore/"
运行微调脚本
bash examples/mcore/llama2/tune_llama2_7b_lora_ptd.sh
出现以下迭代时,表示已开始训练
推理验证
使用微调后保存的权重进行推理,填入保存的路径:
CHECKPOINT="./model_weights/Llama2-mcore/"
CHECKPOINT_LORA="./ckpt/"
TOKENIZER_PATH="./model_from_hf/llama-2-7b-hf/"
TOKENIZER_MODEL="./model_from_hf/llama-2-7b-hf/tokenizer.model"
bash examples/mcore/llama2/generate_llama2_7b_lora_ptd.sh
出现`You >>`的字样后,可以进行推理验证
结语:
本期为大家介绍了基于MindSpeed LLM部署高效高性能大模型微调训练的实践,更多关于微调方案和微调加速技术,欢迎访问MindSpeed LLM开源社区:https://gitee.com/ascend/MindSpeed-LLM/