昇思MindSpore

分类
AI开发平台
收录时间
2025-12-06

简介

华为开源的自研AI深度学习框架

详细介绍

华为把昇思 MindSpore 定位成覆盖端、边、云三种场景的新型开源深度学习框架,代码在 https://www.mindspore.cn/ 开放。它想解决的三件事很具体:同一份网络写好之后,在终端、边缘设备到云端之间迁移时不必为了部署重写一遍;大模型训练这道门槛要往下压,靠内置的多种并行策略把分布式训练撑起来;以及让 AI 与高性能计算(HPC)能够接在同一套流程里,从而接住 AI for Science 这一类既要精度又要算力的问题。

因为出自华为自家,与昇腾处理器配套的适配是写在框架里的,训练时长和推理性能能压下来不少。生态面上,它挂着开源项目、案例集合与 SOTA 模型,以及从这些模型衍生出的工具。跑在哪:硬件端口上,昇腾处理器、NVIDIA 系列 GPU、Intel x86 与 Arm 架构的 CPU 都留了位置;软件推荐 Linux(Ubuntu 18.04 或 CentOS 7.6 及以上),Windows 与 macOS 也在支持列表里,Python 需 3.7 以上,这项也是最容易出岔子的一条——低于这个版本依赖就装不齐,动手前先敲一遍 python --version 确认;真到了 import 阶段报错,多半也是版本错位,而不是框架本身的问题。

正因为这层多硬件覆盖,「全场景」三个字才立得住——同一份训练脚本从服务器搬到边缘盒子,改的常常只是运行时配置而不是结构本身。一条命令装起来:装哪个包取决于用哪张卡。CPU 版是 pip install mindspore。GPU 版要匹配 CUDA 版本,官方示例给的是 pip install mindspore-gpu==1.10.0。

昇腾版必须指向具体的 wheel 包,示例命令是 pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.6.0/MindSpore/unified/aarch64/mindspore-2.6.0-cp39-cp39-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple ——这里面 2.6.0 是框架版本,cp39 对应 Python 3.9,linux_aarch64 说明目标机是 Arm 架构的 Linux,--trusted-host 给镜像站点放行,-i 指定清华的 PyPI 镜像。

装完在 Python 里 import mindspore,再 print(mindspore.__version__) 就能确认有没有装上。三个版本怎么挑:昇腾版之所以要走 wheel 而不是一句 pip install mindspore,是因为它必须跟驱动、固件以及底层软件栈的版本对得上,版本号(示例里的 2.6.0)和 Python 版本(cp39)直接写在文件名里,挑错了根本装不上;CPU 版最省心,适合先在本机把网络结构跑通;GPU 版需要在 CUDA 版本上做选择,换来的是中等规模模型也能接受的训练速度;昇腾版主要留给生产环境和国产化替代的场景。

第一次装建议照官方文档那张软硬件对照表选命令,比自己试错快得多。用 LeNet5 把整条链路走一遍。数据侧:import mindspore.dataset as ds 引入数据集模块,ds.MnistDataset("path/to/mnist_dataset") 把 MNIST 读进来;再由 from mindspore.dataset.transforms import Compose, ToTensor, Normalize 拉进变换算子,Compose([ToTensor(), Normalize((0.1307,), (0.3081,))]) 先转成张量再做归一化,官方示例用的这对数值对应 MNIST 的统计口径;接着 dataset.map(operations=transforms, input_columns=["image"]) 把变换作用到图像列,dataset.batch(batch_size=64) 切成每批 64 条。

  • 网络写成继承 nn.Cell 的类:class LeNet5(nn.Cell),__init__ 里声明层——conv1 = nn.Conv2d(1, 6, 5, pad_mode='valid') 从单通道灰度图取 6 个通道,conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid') 再扩到 16 通道,pad_mode 取 valid 表示不做填充;self.relu = nn.ReLU() 是激活,self.max_pool2d = nn.MaxPool2d(kernel_size=2) 负责下采样,self.flatten = ops.Flatten() 负责拉平;self.fc1 = nn.Dense(16 * 5 * 5, 120)、self.fc2 = nn.Dense(120, 84)、self.fc3 = nn.Dense(84, 10) 三层全连接把维度逐步收到 10 类。

前向写在 def construct(self, x) 里:卷积、激活、池化重复两轮,flatten 之后过 fc1、fc2 各带一次 ReLU,由 fc3 直接输出。model = LeNet5() 拿到实例。训练那段交给 Model 这一层封装:from mindspore.train import Model 引入,loss_fn = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') 定义损失,optimizer = Momentum(model.trainable_params(), learning_rate=0.01, momentum=0.9) 定义带动量的优化器;需要中途存盘就配 CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) 与 ModelCheckpoint(prefix="lenet", config=config_ck),前者设定每 1875 步存一次、最多保留 10 份,后者指定文件名以 lenet 开头;再由 Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'}) 组装完毕,一句 model.train(10, dataset, callbacks=[ckpoint_cb]) 跑 10 个 epoch。

评估同样是两步——测试集按同样的方式 map 与 batch(batch_size=64),acc = model.eval(test_dataset) 出结果,print(f"Accuracy: {acc['accuracy']}") 打到终端。整段流程写下来不到四十行,这也是官方把「简化训练与评估」落到代码上的样子。

  • 大模型靠什么扛起来:框架内置的分布式训练能力覆盖多种并行策略,并给出一层较为简单的接口,使用者不必自己逐个重写那些超出数据并行之外的切分逻辑。并行在具体形式上可以按模型体量分:数据并行把一个 batch 拆到多张卡上同时算,前提是模型本身能塞进单卡;模型并行把参数切开,应对百亿参数以上一张卡放不下的情况;再往上还有流水线并行、专家并行一类更细的切法。

这套组合过去要靠手写通信代码搭起来,现在更多表现为配置项,因此在昇腾集群上训大模型的门槛降下来不少。科研那一路另有专门的口子:AI4S 融合计算框架支持 AI 与 HPC 之间的完整流程可编程,配合异构并行加速,适合既跑神经网络又跑传统数值模拟的任务,电磁仿真、流体仿真、分子动力学模拟都属于这一类。

这类题的麻烦在于,除神经网络之外还要调用传统数值方法,两边的数据类型、并行方式和精度要求都不一致,把二者收在同一套可编程流程里,意味着中间不必再跨框架搬运数据。生态与交付:官方维护开源项目、案例集合、SOTA 模型及衍生工具,并按领域切出 NLP、CV、Audio 等套件;另有云平台把 AI 工作流从头到尾托管起来,省掉自己搭管线的功夫。

除了模型本体,官方还会放出配套脚本、预训练权重和调过参的配置文件,对想直接拿 SOTA 模型微调的团队来说省下的是冷启动的时间;那几套领域套件则把常见的数据处理与评估流程封成了接口,不必再重写数据管道。动静统一的编程方式同样是个会被反复提到的点:动态图便于调试,静态图跑得快,同一份代码可以在两者之间切换,这也是它在昇腾上能把硬件性能挤出来的前提之一。

  • 落地分布大致是这样:自动驾驶车辆与智能交通系统里做实时目标检测、路径规划和交通流量预测;工业产线上做实时质量检测与设备故障预测,把返工和停机的时间省下来;医疗健康的医学影像分析与智能健康监测设备,用来辅助医生判断;科学研究侧借助 AI4S 套件加速各类仿真与分子动力学模拟;企业侧则跑客户行为分析、市场趋势预测与风险评估。

自动驾驶与智能交通那部分主要卡在实时性上,路侧单元和车端算力都有限,所以端侧部署能力在这里是硬条件;工业质检同理,产线上每一秒停机都在烧钱,模型得在离线环境里快速给出判断;医疗方向对稳定性要求更高,影像分析通常还需人工回放确认,工具定位在筛选与提示而非替代诊断;科学研究那一条拼的是算力和迭代速度,仿真类任务过去跑一轮要几小时,用模型替代部分求解过程之后周期被大幅缩短。

  • 上手顺序也有讲究:先照着官方的一两个笔记本样例跑通,再换成自己的数据集,等到单机跑不下了才考虑分布式和云端部署;反着一上来就搭多机多卡,配置环节的坑会把模型本身的问题一起埋掉。