昇思 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 系列昇腾设备。在工程实践中可增加早停策略、验证集评估、日志保存形成完整可自动化运行的单卡微调推理流水线。

相关新闻

交换机堆叠与集群:从原理到实战的完整指南

交换机堆叠与集群:从原理到实战的完整指南

/* 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 14:01:39 阅读更多 →
UE4控制台命令全解析:从CVar、stat到性能排查实战

UE4控制台命令全解析:从CVar、stat到性能排查实战

/* 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 14:01:39 阅读更多 →
FPGA主模式I2C控制器RTL设计:三段式状态机与三态驱动实践

FPGA主模式I2C控制器RTL设计:三段式状态机与三态驱动实践

/* 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 14:01:39 阅读更多 →

最新新闻

ANSYS许可合规检查:授权文件、日志台账与并发审计实战

ANSYS许可合规检查:授权文件、日志台账与并发审计实战

1. 许可合规检查真正查的是什么:从"能不能跑起来"到"跑得合不合规"大部分人第一次接触ANSYS 许可合规性检查,都是被动的——要么是采购部门要续费,需要一份"到底有多少人真在用"的说明;要么是外部合…

2026/10/1 18:16:34 阅读更多 →
SpringBoot2+Vue3实战:大创项目管理系统设计与部署

SpringBoot2+Vue3实战:大创项目管理系统设计与部署

前阵子帮一所高校做了一个大学生创新创业训练计划项目管理系统,也就是大家常说的“大创管理系统”。这系统说白了就是用来管理大学生创新创业训练计划全流程的:学生线上申报项目、指导教师审核、学院推荐、学校审批,再到中期检查、结题验收和…

2026/10/1 18:16:34 阅读更多 →
第一性原理:从底层事实出发,拆解问题、重建方案的思维框架

第一性原理:从底层事实出发,拆解问题、重建方案的思维框架

1. 开篇引子:为什么“模仿”永远成不了真正的强者 我见过很多聪明人,学东西极快,看别人做什么成什么,立刻就能照着做一遍,成果还很好看。但几年后你会发现,这些人依然在原地打转:别人换赛道他就…

2026/10/1 18:16:34 阅读更多 →
麦克风配对方案升级!FX668远距离 NFC 芯片,解决量产调试痛点

麦克风配对方案升级!FX668远距离 NFC 芯片,解决量产调试痛点

做无线音频、直播麦克风、影音设备开发的工程师都懂,麦克风量产配对、频段校准、设备 ID 绑定一直是行业刚需痛点。传统方案大多依赖拆机拨码、有线烧录、上位机调试,工序繁琐、效率低下,售后维护更是麻烦。想要一套免拆机、无线快速配对、支…

2026/10/1 18:16:34 阅读更多 →
AI编程token消耗优化:六大实战技巧降低80%成本

AI编程token消耗优化:六大实战技巧降低80%成本

1. AI 编程的 token 到底消耗在哪些环节1.1 从一次真实的账单说起上个月我把自己一个中型项目的 AI 编程助手账单拉出来看,单月消耗折算下来接近四百块。当时第一反应是"是不是模型选贵了",但把明细拆开之后发现,真正贵的不是模型单…

2026/10/1 18:16:34 阅读更多 →
ComfyUI v0.37跑通Qwen-Image-2.1:从模型部署到稳定出图全攻略

ComfyUI v0.37跑通Qwen-Image-2.1:从模型部署到稳定出图全攻略

昨天把 ComfyUI 更新到了 v0.37,顺手把 Qwen-Image-2.1 跑通了。整个过程比我预想的顺利,但中间也踩了几个坑——比如模型路径不对、采样器选错导致画面发灰、爆内存等等。这篇就好好记录一下,从下载模型到稳定出图的完整流程,顺带…

2026/10/1 18:15:34 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →