尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
昇思 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

相关推荐

方差、标准差、MSE与RMSE:数据工程师的指标选择实战指南

方差、标准差、MSE与RMSE:数据工程师的指标选择实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/30 13:58:32
CanTp协议详解:ISO 15765-2帧格式、流控机制与AUTOSAR配置实战

CanTp协议详解:ISO 15765-2帧格式、流控机制与AUTOSAR配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/30 13:58:32
企业微信外部群机器人如何处理多个业务系统同时调用的场景?

企业微信外部群机器人如何处理多个业务系统同时调用的场景?

在企业微信私域运营进入深水区后,外部群机器人往往不再仅仅作为一个“客服问答工具”,而是演变成了整个企业的“统一对外消息出口”。 此时你会面临一个极具挑战的架构问题:下发侧的并发风暴。 想象一下,在双十一大促的某一分钟内…

📅 2026/9/30 13:58:32
MORE NEWS

更多资讯

📰

2026 Turnitin 查重和 AI 检测都不过?一站式降AI率网站实测解析

一、前言:2026 高校论文审核新难题 随着高校学术审核体系不断升级,知网、维普等主流检测平台全面上线AIGC 智能检测功能,当代毕业生的论文写作与修改迎来双重考验。以往论文仅需攻克重复率超标问题,如今还要规避 AI 写作痕迹检测风…

📰

浏览器端(Client-Side)安全审计实战指南:DOM XSS、跨源消息与 Service Worker 攻击面的猎杀与验证规范

AI 技能应用安全 【免费下载链接】security-audit-skill A coding-agent skill for multi-phase security audits with independently verified, machine-readable findings 项目地址: https://gitcode.com/GitHub_Trending/se/security-audit-skill 点击查看 免费下…

📰

技术跃升、权力野心与治理真空:从两次世界大战到人工智能时代的结构性风险

技术跃升、权力野心与治理真空:从两次世界大战到人工智能时代的结构性风险摘要 本文从技术与治理的时间不对称出发,重新审视第一次世界大战与第二次世界大战的深层根源,并以此为历史参照,分析当代人工智能(AI&#xff…

📰

私域商城搭建从零开始,第一批客户从哪来

2026年,AI应用类小程序数量半年增长近40%,各类建站工具把开店的门槛压到了最低,几千元预算、几天时间就能上线一个私域商城。但很多创业者的真实处境是:商城搭好了,页面也装修了,就是没人进来。私域商城搭建…

📰

深度学习入门指南:从核心概念到 PyTorch 实战

从线性回归到 KNN,从决策树到聚类,我们一路走过了机器学习的主要算法。但这些算法都有一个共同的特点——它们处理的是"浅层"特征,需要人工提取和选择特征。而深度学习的革命性在于:它能自动从原始数据中提取特征&#…

📰

怎么判断一个选题值不值得写?AI能帮做热度判断吗?

怎么判断一个选题值不值得写?AI能帮做热度判断吗?做内容最耗人的不是写,是选:每天一堆备选选题,到底哪个值得花时间?凭感觉选,经常写完没人看。这篇给一套可复用的选题判断框架,并讲…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬