昇思 MindSpore 大模型:数据变换预处理
一、概述大模型训练质量高度依赖数据预处理流水线昇思 MindSpore 针对 LLM 训练提供两套预处理体系MindSpore Dataset 原生数据流变换、离线文本预处理 在线动态 Token 变换。预处理包含文本清洗、分段、模板封装、Tokenization、Padding、截断、掩码构造。与 CV 图像预处理不同大语言模型预处理重点解决指令模板统一、长文本截断策略、标签掩码Loss Mask、流水线加速、多进程数据加载。不合理的数据变换会造成训练泄露、上下文错乱、损失收敛困难。本文基于 MindSporeMindFormers搭建完整大模型 SFT 数据预处理链路适配昇腾 NPU。运行环境MindSpore 2.3、MindFormers、昇腾 Ascend 910B/310P。二、环境基础初始化# env_init.py import mindspore as ms from mindspore import context def init_ascend_env(): context.set_context( modecontext.GRAPH_MODE, device_targetAscend, device_id0 ) ms.set_auto_parallel_context(parallel_modems.ParallelMode.STAND_ALONE) print(昇腾NPU环境初始化完成) if __name__ __main__: init_ascend_env()三、离线文本清洗变换工具预处理第一阶段原始互联网数据存在乱码、多余空格、无效符号先执行离线清洗。# text_clean.py import re def clean_raw_text(text: str) - str: 基础文本清洗变换 # 去除URL text re.sub(rhttp[s]?://\S, , text) # 去除多余换行、空格 text re.sub(r\n, \n, text) text re.sub(r\s, , text) # 过滤特殊不可见字符 text re.sub(r[\x00-\x08\x0b\x0c\x0e-\x1f], , text) return text.strip() def build_prompt_template(instruction: str, output: str None): 构造LLM标准指令模板变换 template f|user|\n{instruction}\n|assistant|\n if output is not None: template output return template if __name__ __main__: raw 介绍MindSpore\n\nhttps://mindspore.cn \n clean_txt clean_raw_text(raw) prompt build_prompt_template(clean_txt, 昇思是华为全场景AI框架) print(prompt)四、在线数据变换数据集类 Tokenizer 处理在线变换在数据流水线实时执行实现动态 Token 编码、截断、Padding适配 MindSpore Dataset 迭代器。# llm_dataset.py import json import mindspore.dataset as ds from mindformers import AutoTokenizer from text_clean import clean_raw_text, build_prompt_template class SFTDataTransform: def __init__(self, tokenizer_path, seq_len512): self.tokenizer AutoTokenizer.from_pretrained(tokenizer_path) self.seq_len seq_len def __call__(self, sample): 单条样本在线变换逻辑 instruction clean_raw_text(sample[instruction]) answer clean_raw_text(sample[output]) full_text build_prompt_template(instruction, answer) # Token变换 token_result self.tokenizer( full_text, truncationTrue, max_lengthself.seq_len, paddingmax_length ) input_ids token_result[input_ids] attention_mask token_result[attention_mask] # 构造标签自回归训练labelinput_ids labels input_ids.copy() # 关键变换屏蔽prompt部分损失仅计算回答部分loss prompt_only build_prompt_template(instruction) prompt_tokens self.tokenizer(prompt_only)[input_ids] prompt_len len(prompt_tokens) # prompt部分标签置-100CrossEntropy自动忽略 labels[:prompt_len] [-100] * prompt_len return input_ids, attention_mask, labels class SFTDataSet: def __init__(self, data_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): return self.data[idx] def create_llm_dataloader(data_path, tokenizer_path, batch_size2, seq_len512): 构建完整数据流水线 dataset ds.GeneratorDataset( SFTDataSet(data_path), column_names[instruction, output], shuffleTrue, num_parallel_workers4 ) transform_op SFTDataTransform(tokenizer_path, seq_len) # 映射在线变换 dataset dataset.map( operationstransform_op, input_columns[instruction, output], output_columns[input_ids, attention_mask, labels], num_parallel_workers4 ) dataset dataset.batch(batch_size, drop_remainderTrue) return dataset数据集 data.json 格式示例[ {instruction:什么是昇思MindSpore,output:昇思MindSpore是华为自研全场景深度学习框架。} ]五、训练主程序加载变换流水线训练# train_main.py from env_init import init_ascend_env from llm_dataset import create_llm_dataloader import mindspore as ms from mindformers import AutoModel from mindspore.nn import AdamWeightDecay init_ascend_env() BATCH_SIZE 2 SEQ_LEN 512 # 构建带完整数据变换的数据集 train_ds create_llm_dataloader( data_path./train_data.json, tokenizer_path./llm_model, batch_sizeBATCH_SIZE, seq_lenSEQ_LEN ) # 加载模型 model AutoModel.from_pretrained(./llm_model) loss_fn ms.nn.CrossEntropyLoss(ignore_index-100) optimizer AdamWeightDecay(model.trainable_params(), learning_rate2e-4) train_net ms.nn.WithLossCell(model, loss_fn) train_step ms.nn.TrainOneStepCell(train_net, optimizer) # 训练循环 epoch_num 3 for epoch in range(epoch_num): loss_sum 0 for batch in train_ds.create_tuple_iterator(): input_ids, attn_mask, labels batch loss train_step(input_ids, attn_mask, labels) loss_sum loss.asnumpy() avg_loss loss_sum / train_ds.get_dataset_size() print(fEpoch {epoch}, Avg Loss: {avg_loss:.4f})六、启动脚本# run_train.sh #!/bin/bash source /usr/local/Ascend/ascend-toolkit/latest/bin/set_env.sh export DEVICE_ID0 python3 train_main.py七、数据变换核心优化要点离线预处理与在线变换分离大规模数据集优先离线清洗避免训练时重复执行正则清洗降低 CPU 开销在线变换只保留 Tokenizer、掩码构造。Loss Mask 变换至关重要指令 Prompt 部分 label 设置为-100使损失函数不统计 prompt 预测损失是 SFT 标准变换遗漏该变换会导致模型重复学习输入指令。多进程 num_parallel_workers 调优昇腾服务器 CPU 核心充足合理设置并行数防止 CPU 数据预处理拖慢 NPU 训练速度造成算力空洞。截断策略选择支持头部截断、尾部截断大模型推荐保留文本尾部优先截断前文保障回答完整。性能优化手段可使用ds.cache()缓存变换后数据超大规模数据集使用 MindRecord 二进制格式替代原始 JSON减少 IO 开销。八、总结昇思 MindSpore 大模型数据变换分为三层文本清洗变换、指令模板封装、Token 编码与标签掩码变换。依托 MindSpore Dataset 的 map 算子实现并行预处理兼顾灵活性与性能。完整的数据预处理流水线直接决定 SFT 微调效果。很多训练收敛异常、生成效果差的问题根源在于预处理缺陷模板不统一、未屏蔽 prompt 损失、文本脏数据过多。本文代码实现工业界标准指令微调预处理链路可直接在昇腾 NPU 上运行支持扩展多轮对话模板、多语种清洗、MindRecord 格式转换适配各类开源大模型微调场景。

相关新闻

工业缺陷检测实战:小样本训练与漏检控制全流程解析

工业缺陷检测实战:小样本训练与漏检控制全流程解析

1. 项目概述:为什么缺陷检测难在小样本,死在漏检 工业缺陷检测是计算机视觉在制造业里落地最广、也最考验工程能力的场景之一。很多人一开始以为,只要找个开源检测模型,收集一批缺陷图片,训练一下就完事了。但真到产线…

2026/9/30 13:38:57 阅读更多 →
工业缺陷检测小样本训练与漏检控制全流程实战

工业缺陷检测小样本训练与漏检控制全流程实战

很多做工业视觉的团队,在缺陷检测项目上都会碰到同一个坎:缺陷样本少得可怜,产线又要求漏检率必须压到极低。我刚接手这类项目时也被这个问题折磨得不轻。这篇文章就把我在实际项目里跑通的一套小样本训练与漏检控制全流程完整拆开讲清楚&…

2026/9/30 13:38:57 阅读更多 →
Eolink:基于OpenAPI的API协作平台实践

Eolink:基于OpenAPI的API协作平台实践

1. 这不是又一个Postman替代品,而是API协作范式的重新定义 最近在给一家做智能硬件的客户做API治理咨询时,团队里刚入职的00后实习生甩给我一个链接,说:“老师你试试这个,比Postman顺手多了。”我点开一看是Eolink&…

2026/9/30 13:38:57 阅读更多 →

最新新闻

从零搭建AI工程体系:避开调包陷阱,构建稳定可迭代的AI系统

从零搭建AI工程体系:避开调包陷阱,构建稳定可迭代的AI系统

1. 从零搭建AI工程体系,为什么我劝你别急着调包很多人一提到AI工程,第一反应就是pip install transformers,然后找个预训练模型跑个demo,觉得这就是AI工程了。我刚开始也这么想,直到真正接手一个需要上线的项目&#x…

2026/9/30 15:18:57 阅读更多 →
SpringBoot+Vue大学生就业招聘系统:从数据库设计到权限控制全解析

SpringBoot+Vue大学生就业招聘系统:从数据库设计到权限控制全解析

1. 为什么大学生就业招聘系统是课程设计的“黄金题目” 每年到这个时间点,后台总有人问我课程设计选什么题目。我的回答一直很明确: 带角色权限的Web业务系统,首选大学生就业招聘系统 。原因很简单——它不像图书管理、学生选课那种“纯增删…

2026/9/30 15:18:57 阅读更多 →
录像机接显示器大画面黑屏,小画面正常排查指导

录像机接显示器大画面黑屏,小画面正常排查指导

一、问题现象录像机接显示器大画面黑屏,小画面正常二、组网三、关键点四、排查步骤优先确认界面是否有报错报错1:资源不足一般是主码流分辨率超出录像机解码能力,按照以下方法调试步骤一:确认录像机解码能力,核实相机视…

2026/9/30 15:18:57 阅读更多 →
双屏显示器设置完全指南:从分辨率缩放到刷新率优化

双屏显示器设置完全指南:从分辨率缩放到刷新率优化

最近帮人调了几台双屏工作站,发现很多人对系统里"显示设置"这个面板的理解还停留在"能改分辨率就行"的层面。实际上,当你真正添加第二块、第三块屏幕时,涉及的东西远比想象中多——分辨率、缩放比例、排列顺序、刷新率、…

2026/9/30 15:18:57 阅读更多 →
2026 代理网络平台推荐指南:五家服务商实测打分,钱该给谁?

2026 代理网络平台推荐指南:五家服务商实测打分,钱该给谁?

大家好,我是桃花键神。 先问大家一个问题:2026 年了,买个代理网络(Proxy Network),怎么反而比以前更难选了? 因为买家变了。以前用代理的「用户」是爬虫工程师,比的是谁家 IP 池大…

2026/9/30 15:18:57 阅读更多 →
企业微信API对接Java后端HTTPS证书与数据加密全攻略

企业微信API对接Java后端HTTPS证书与数据加密全攻略

在企业微信API的对接过程中,Java后端最容易被绊倒的通常不是业务逻辑,而是第一道握手——HTTPS证书配置。回调URL死活验证不过、SSL握手报错、消息解密失败,这些坑我基本都踩过一遍。这篇就把企业微信API对接中Java后端涉及的证书配置和数据传…

2026/9/30 15:17:52 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集: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/29 16:41:41 阅读更多 →
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 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →