新闻详情

新闻详情

首页 / 资讯中心 / 详情

昇思 MindSpore 大模型单卡微调推理:自助搭建流程

发布时间:2026/9/30 14:02:34来源:尧图网络
昇思 MindSpore 大模型单卡微调推理:自助搭建流程
一、摘要基于昇思 MindSpore 在单张昇腾 NPU310P/910B完成大模型微调 推理是轻量化落地常用方案。单卡流程包含环境准备、权重加载、数据集构建、LoRA 微调、模型保存、离线推理全链路。相比于全参数微调LoRA 低秩适配极大降低单卡显存压力适合行业模型轻量化二次开发。本文使用 MindSpore MindFormers以 Decoder-only 大模型为例完整实现单卡 LoRA 微调、权重合并、本地推理整套自助流程适配昇腾 CANN 环境。运行环境openEuler、CANN、MindSpore2.3、MindFormers、昇腾 NPU 单卡。二、环境初始化代码NPU 设备配置# env_init.py import os import mindspore as ms from mindspore import context def init_npu_env(): # 指定昇腾NPU卡号 os.environ[DEVICE_ID] 0 # MindSpore昇腾后端配置 context.set_context( modecontext.GRAPH_MODE, device_targetAscend, device_idint(os.environ[DEVICE_ID]), save_graphsFalse ) # 显存优化策略单卡微调防OOM ms.set_auto_parallel_context(parallel_modems.ParallelMode.STAND_ALONE) ms.set_context(max_call_depth2000) print(昇腾NPU单卡环境初始化完成) if __name__ __main__: init_npu_env()三、训练数据集构建代码采用指令微调标准 JSON 数据集封装 MindSpore Dataset 迭代器# dataset.py import json import mindspore.dataset as ds from mindformers import PromptTokenizer class SFTDataSet: def __init__(self, data_path, tokenizer_path, seq_len512): self.seq_len seq_len self.tokenizer PromptTokenizer(tokenizer_path) with open(data_path, r, encodingutf-8) as f: self.data json.load(f) def __len__(self): return len(self.data) def __getitem__(self, idx): sample self.data[idx] prompt f###指令{sample[instruction]}\n###回答{sample[output]} token self.tokenizer( prompt, paddingmax_length, truncationTrue, max_lengthself.seq_len ) input_ids token[input_ids] attention_mask token[attention_mask] labels input_ids.copy() return input_ids, attention_mask, labels def create_sft_dataloader(data_path, tokenizer_path, batch_size2): dataset_generator SFTDataSet(data_path, tokenizer_path) dataset ds.GeneratorDataset( dataset_generator, column_names[input_ids, attention_mask, labels], shuffleTrue ) dataset dataset.batch(batch_size, drop_remainderTrue) return dataset数据集 data.json 格式参考[ {instruction:介绍昇思MindSpore,output:MindSpore是华为开源全场景AI框架} ]四、单卡 LoRA 微调主训练代码# train_lora_single_card.py from env_init import init_npu_env from dataset import create_sft_dataloader import mindspore as ms from mindformers import AutoModel, AutoConfig, LoRAConfig from mindspore.nn import AdamWeightDecay from mindspore.train import Model from mindspore.train.callback import SaveCheckpoint, CheckpointConfig init_npu_env() # 1. LoRA配置 lora_config LoRAConfig( lora_rank8, lora_alpha16, target_modules[q_proj, v_proj], lora_dropout0.05, biasnone ) # 2. 加载基础大模型 model_config AutoConfig.from_pretrained(./base_model) model_config.checkpoint_name_or_path ./base_model/ckpt network AutoModel.from_config(model_config) # 注入LoRA层冻结主干权重 network.freeze() network.add_lora(lora_config) # 3. 数据集 train_dataset create_sft_dataloader( data_path./data.json, tokenizer_path./base_model, batch_size2 ) # 4. 优化器与训练封装 lr ms.nn.exponential_decay_lr( learning_rate2e-4, decay_rate0.9, total_step1000, step_per_epochlen(train_dataset), decay_epoch1 ) optimizer AdamWeightDecay(network.trainable_params(), learning_ratelr) # 损失函数 loss_fn ms.nn.CrossEntropyLoss(ignore_index0) train_net ms.nn.WithLossCell(network, loss_fn) train_net ms.nn.TrainOneStepCell(train_net, optimizer) # 5. 训练循环与保存 ckpt_cfg CheckpointConfig(save_checkpoint_steps50, keep_checkpoint_max5) save_cb SaveCheckpoint(configckpt_cfg, directory./lora_ckpt) epochs 3 for epoch in range(epochs): for batch_data in train_dataset.create_tuple_iterator(): input_ids, attn_mask, labels batch_data loss train_net(input_ids, attn_mask, labels) print(fepoch:{epoch}, loss:{loss.asnumpy():.4f}) print(单卡LoRA微调完成LoRA权重已保存)五、微调后推理代码单卡本地推理# infer.py from env_init import init_npu_env from mindformers import AutoModel, AutoTokenizer init_npu_env() tokenizer AutoTokenizer.from_pretrained(./base_model) model AutoModel.from_pretrained(./base_model) # 加载训练得到的LoRA权重 model.load_lora_ckpt(./lora_ckpt/lora_rank_8.ckpt) def predict(prompt_text): inputs tokenizer(f###指令{prompt_text}\n###回答, return_tensorsms) output model.generate( **inputs, max_length256, temperature0.7, top_p0.9 ) result tokenizer.decode(output[0], skip_special_tokensTrue) return result if __name__ __main__: res predict(简单介绍MindSpore单卡微调流程) print(模型输出\n, res)六、启动脚本 shell# run_single_card.sh #!/bin/bash export ASCEND_TOOLKIT_PATH/usr/local/Ascend/ascend-toolkit/latest source ${ASCEND_TOOLKIT_PATH}/bin/set_env.sh export DEVICE_ID0 python3 train_lora_single_card.py 执行bash run_single_card.sh七、单卡调优关键要点显存控制优先 LoRA 替代全参数微调开启梯度检查点 model_config.use_recomputeTrue大幅降低显存占用避免单卡 OOM运行模式GRAPH_MODE 性能远高于 PYNATIVE_MODE正式训练统一使用图模式数据加载单卡不要设置过大 batch_size根据 NPU 显存逐级调试权重管理LoRA 权重体积很小推理时动态加载也可执行权重合并导出完整模型用于 ATC 离线转换性能观测使用 npu-smi 观测显存、算力利用率及时发现数据加载瓶颈。八、总结整套自助搭建流程分为环境初始化、数据集构建、LoRA 单卡微调、权重加载推理四大环节。MindSpore 搭配 MindFormers 封装了大模型通用接口降低了昇腾硬件上大模型开发门槛。单卡方案无需分布式集群适合模型验证、小样本行业微调、原型验证场景。开发流程标准统一可快速迁移至 310P、910 系列昇腾设备。在工程实践中可增加早停策略、验证集评估、日志保存形成完整可自动化运行的单卡微调推理流水线。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Cursor 把 C 盘吃掉 20GB?我写了个开源清理工具 cursor-clean 2026/9/30 14:49:37

Cursor 把 C 盘吃掉 20GB?我写了个开源清理工具 cursor-clean

用 Cursor 写代码越久,C 盘越慌。 有一天我用磁盘分析工具扫了一眼,发现: C:\Users\...\AppData\Roaming\Cursor 居然将近 20GB。 第一反应:是不是缓存炸了?项目索引?扩展? 点进去一看&#xff…

阅读更多 →
计算机网络实验全攻略:静态路由、ARP抓包与Socket编程实战 2026/9/30 14:49:30

计算机网络实验全攻略:静态路由、ARP抓包与Socket编程实战

简介:面向计算机网络课程综合实验与课程设计场景,资源以华北电力大学《互联网综合设计与网络协议分析》实验报告为主体,内容覆盖交换机与路由器基本配置、VLAN划分及VLAN间通信、OSPF/RIP v2/静态路由配置、静态NAT与动态NAT/NAPT地址转换&am…

阅读更多 →
DeepSeek提示词工程落地指南:从模型选择到RAG与Agent避坑 2026/9/30 14:49:30

DeepSeek提示词工程落地指南:从模型选择到RAG与Agent避坑

简介:北京大学DeepSeek系列《提示词工程和落地场景》PPT课件,聚焦如何通过自然语言交互充分释放DeepSeek潜能,适合零技术背景的普通用户、职场人士及教育从业者。内容覆盖DeepSeek-R1核心优势、火爆原因分析、提示词技巧、直接使用三种方法与…

阅读更多 →
云计算资源分配算法实战:建模、调度器实现与避坑指南 2026/9/30 14:49:29

云计算资源分配算法实战:建模、调度器实现与避坑指南

简介:云计算资源分配算法是集群调度系统的核心,解决的不是单纯压榨硬件,而是让不同优先级的任务在公共算力池中有序排队与抢占。其本质是一个多目标优化问题,需要在吞吐、时延、能耗之间寻找平衡,并通过权重系数将业务…

阅读更多 →
桌面端效率工具接入大模型:架构、流式与场景化实践 2026/9/30 14:49:22

桌面端效率工具接入大模型:架构、流式与场景化实践

简介:Gomoon 是一款基于大模型的桌面端效率工具,面向希望借助 AI 提升工作与学习效率的开发者、学生及职场用户。它支持配置多种大模型引擎并实时切换,可创建专属助手,实现快速问答、连续对话、历史存取、答案编辑与重新生成&…

阅读更多 →
公共云平台资源申请审批表:管住云账单的第一道闸门 2026/9/30 14:49:22

公共云平台资源申请审批表:管住云账单的第一道闸门

简介:公共云平台资源申请审批表.doc 是一份面向组织信息化管理场景的标准公文模板,适用于需要申请、审批和统筹公共云资源的行政人员、处室负责人及分管领导。审批表涵盖申请人信息、所在处室、具体需求内容、处室负责人意见、规划发展与信息化处意见、分…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉