NCEPUwiki NCEPUwiki
首页
分类
  • 常用账号与默认密码
  • 常用网站
  • 常用电话
  • 教室借用
  • 常用公众号
  • 学生组织与社团名单
  • 电动自行车管理
学习资料 (opens new window)
GitHub (opens new window)
首页
分类
  • 常用账号与默认密码
  • 常用网站
  • 常用电话
  • 教室借用
  • 常用公众号
  • 学生组织与社团名单
  • 电动自行车管理
学习资料 (opens new window)
GitHub (opens new window)
  • 北京校区专业指南

    • 电气与电子工程学院

      • 电气工程及其自动化(北京)
  • 保定校区专业指南

    • 数理系

      • 信息与计算科学专业求生指南(持续更新)
  • 等级、资格考试专题

    • 四六级
    • 计算机等级考试
    • 教师资格证考试
    • 雅思托福
    • 普通话等级考试
    • 驾照
    • 日语等级考试
  • 竞赛专题

    • 学科竞赛简介
    • 计算机学科竞赛赛道
  • 学习资料

    • 学习笔记

      • HCIP-AI 题目

        • HCIP-AI 题目1-10
      • MindSpore

        • MindSpore 第1章:MindSpore 初探
          • 本章学习目标
          • 目录(更新ing)
          • 1. MindSpore初探:AI框架发展史、MindSpore定位与优势、安装与环境配置(CPU/GPU/Ascend)
            • 1.1 AI框架发展史:从手写梯度到自动微分
            • 拓展笔记:从“计算”理解 AI 框架
            • 拓展笔记:自动微分到底在自动什么?
            • 1.2 MindSpore定位与优势:为什么我推荐它
            • 拓展笔记:MindSpore 基础对象关系
            • 拓展笔记:“全场景”不要只背口号
            • 1.3 安装与环境配置:CPU/GPU/Ascend三版对比
            • 1.3.1 CPU版本安装
            • 1.3.2 GPU版本安装
            • 1.3.3 Ascend版本安装
            • 拓展笔记:安装问题本质上是“依赖链匹配”
            • 拓展:环境验证清单
            • 1.5 版本兼容性速查表
            • 拓展笔记:版本表应该怎么使用
            • 1.6 快速验证:你的第一个MindSpore程序
            • 拓展笔记:逐行拆解最小训练流程
            • 拓展笔记:为什么 loss 下降很重要?
            • 1.7 常见问题与避坑指南
    • 北京校区课程资料
    • 保定校区课程资料
  • 评优
  • 课程评价
  • 学分与选课
  • 导师评价
  • 吴仲华
  • 转专业
  • 留学指南
  • 网课刷课
  • 保研
  • 学习专题
  • 学习资料
  • 学习笔记
  • MindSpore
NCEPUwiki-Group
2026-09-01
目录

MindSpore 第1章:MindSpore 初探

MindSpore 第1章学习笔记:MindSpore 初探

本章学习目标

学完本章,至少应该能回答下面这些问题:

  • AI 框架为什么从“手写梯度/手工组织计算”逐渐发展到自动微分与图编译?
  • 静态图、动态图分别解决什么问题?
  • MindSpore 的“全场景”“动静统一”“昇腾原生支持”分别是什么意思?
  • CPU、GPU、Ascend 三类环境的依赖链有什么不同?
  • nn.Cell、construct()、nn.Dense、value_and_grad()、优化器分别处于训练流程的什么位置?
  • 一个最小 MindSpore 训练程序从数据到参数更新经历了哪些步骤?
  • 遇到安装失败、设备不可见、CUDA/驱动不兼容时,应当按什么顺序排查?

目录(更新ing)

  1. 第1章 MindSpore初探
  2. 第2章 快速上手
  3. 第3章 数据加载与处理
  4. 第4章 网络构建基础
  5. 第5章 自动微分机制
  6. 第6章 损失函数与优化器
  7. 第7章 模型训练与保存
  8. 第8章 模型评估与推理
  9. 第9章 静态图与动态图
  10. 第10章 算子开发与自定义
  11. 第11章 数据处理流水线
  12. 第12章 网络可视化
  13. 第13章 迁移学习实战
  14. 第14章 卷积神经网络(CNN)
  15. 第15章 循环神经网络(RNN)
  16. 第16章 生成对抗网络(GAN)
  17. 第17章 图神经网络(GNN)
  18. 第18章 模型压缩与量化
  19. 第19章 分布式训练
  20. 第20章 混合精度训练
  21. 第21章 模型解释性
  22. 第22章 强化学习入门
  23. 第23章 推荐系统实战
  24. 第24章 自然语言处理(NLP)
  25. 第25章 计算机视觉(CV)
  26. 第26章 语音识别基础
  27. 第27章 模型服务化
  28. 第28章 端侧部署实战
  29. 第29章 项目实战(一)
  30. 第30章 项目实战(二)

1. MindSpore初探:AI框架发展史、MindSpore定位与优势、安装与环境配置(CPU/GPU/Ascend)

1.1 AI框架发展史:从手写梯度到自动微分

说起AI框架,刚了解时还是TensorFlow。那时候写个模型,得手动定义计算图,还得用Session.run()来执行。说实话,调试起来挺痛苦的。后来PyTorch横空出世,动态图的理念一下子让深度学习变得亲民多了。

但框架的发展远不止这些。我简单梳理一下几个关键节点:

  • 2012-2015年:百家争鸣期。Caffe、Theano、Torch7等框架各领风骚。那时候选框架就像选阵营,选错了后面迁移成本极高。
  • 2015-2018年:巨头入场期。Google推出TensorFlow,Facebook推出PyTorch,百度推出PaddlePaddle。框架开始走向工业化。
  • 2019年至今:全场景AI框架期。华为推出MindSpore,主打端边云统一训练推理。这个定位在当时很超前,我一开始也没太理解,直到在项目中遇到模型部署的种种坑…

你想想看,一个模型从训练到部署,中间要经过格式转换、算子适配、精度对齐。如果训练和推理用同一套框架,这些麻烦事能省掉一大半。这就是MindSpore的核心理念——全场景协同。

💡重点

AI框架的演进,本质上是让开发者从底层细节中解放出来,把精力放在模型设计和业务创新上。

拓展笔记:从“计算”理解 AI 框架

深度学习框架最核心的工作可以拆成四层:

层次 解决的问题 典型关键词
张量层 数据如何表示和计算 Tensor、dtype、shape、device
算子层 加减乘除、卷积、矩阵乘等如何执行 Operator / Ops
自动微分层 如何自动得到参数梯度 Autograd、反向传播、计算图
训练工程层 如何组织数据、模型、损失、优化、部署 Dataset、Network、Loss、Optimizer

所谓计算图(Computational Graph),可以理解为:把一次前向计算拆成“节点 + 边”。节点通常代表算子或张量,边表示数据依赖关系。框架知道了依赖关系,就能继续做自动微分、图优化、算子融合、内存复用等工作。

动态图更强调“Python 执行到哪里,计算到哪里”,通常更适合调试;静态图/图模式更强调先获得可优化的计算结构,再进行编译和执行,通常更利于整体优化。考试中常见的错误是把“动态图/静态图”与“CPU/GPU/Ascend”混为一谈:前者是执行模式,后者是硬件/设备目标。

拓展笔记:自动微分到底在自动什么?

假设模型只有一个参数 www:

y^=wx \hat{y}=wx y^​=wx

损失函数为:

L=(y^−y)2 L=(\hat{y}-y)^2 L=(y^​−y)2

训练真正需要的是:

∂L∂w \frac{\partial L}{\partial w} ∂w∂L​

手写神经网络时,需要自己推导并实现大量偏导数;现代框架会记录计算关系,然后利用链式法则自动得到梯度。自动微分不是“自动训练”:得到梯度之后,仍然需要优化器根据梯度更新参数。

1.2 MindSpore定位与优势:为什么我推荐它

MindSpore的定位很明确——全场景AI计算框架。什么叫全场景?就是训练、推理、部署,从云到端到边缘,一套框架搞定。

MindSpore有三大核心优势:

  1. 原生支持昇腾AI处理器。如果你用的是华为云或者昇腾硬件,MindSpore的算子库和硬件适配是最优的。我在一个图像分类项目中对比过,同样的ResNet50,MindSpore在昇腾上的训练速度比PyTorch在GPU上快了约15%。当然,这个数据跟具体配置有关,但趋势是明显的。
  2. 自动微分与动静统一。MindSpore的自动微分机制是基于图编译的,但同时又支持动态图调试。说白了,你既可以像PyTorch那样逐行调试,又能享受静态图的性能优化。这个设计我在实际项目中深有体会——调试阶段用动态图,上线前切到静态图,丝滑切换。
  3. 全场景部署能力。MindSpore的端侧推理引擎MindSpore Lite,可以在手机、IoT设备上跑模型。我做过一个工业质检项目,模型在服务器上训练,然后直接导出为Lite格式部署到边缘盒子,整个过程不需要任何第三方工具。

📝 提示

如果你刚开始接触MindSpore,建议先从CPU版本入手,把基础API和自动微分机制搞明白。等需要性能优化时,再切换到GPU或昇腾版本。

拓展笔记:MindSpore 基础对象关系

可以先记住下面这条主线:

数据 Tensor
   ↓
网络 nn.Cell
   ↓
construct() 前向传播
   ↓
Loss 损失
   ↓
value_and_grad() 求梯度
   ↓
Optimizer 更新参数
1
2
3
4
5
6
7
8
9
10
11

几个高频对象的角色:

对象 作用 初学阶段怎么记
Tensor 数据载体 “数据本身”
nn.Cell 网络/层的基本抽象 类似“模型容器”
construct() 定义前向计算 输入如何变成输出
nn.Dense 全连接层 y=xWT+by=xW^T+by=xWT+b
Loss 衡量预测与真实值的差异 “错了多少”
value_and_grad() 同时获得函数值与梯度 “算 loss,也算梯度”
Optimizer 根据梯度更新参数 “参数怎么改”

易错点:nn.Cell、nn.Dense 属于网络结构/神经网络模块范畴;ops 更偏底层张量算子;dataset 负责数据读取与处理。不要把这些模块的职责混在一起。

拓展笔记:“全场景”不要只背口号

把模型生命周期拆开,就容易理解:

数据准备 → 模型训练 → 模型评估 → 模型导出 → 推理部署 → 端/边/云运行
1

“全场景”强调的不是某一个 API,而是框架及其生态希望覆盖从训练到部署、从云端到边缘/端侧的完整链路。

1.3 安装与环境配置:CPU/GPU/Ascend三版对比

安装框架这件事,说简单也简单,说复杂也复杂。我曾经帮一个团队排查过三天安装问题,最后发现是Python版本不兼容。嗯,这里要注意,MindSpore对Python版本有明确要求,目前官方推荐Python 3.7-3.9。

下面我分别介绍三种环境的安装方式:

1.3.1 CPU版本安装

CPU版本最简单,适合学习和调试。你不需要任何GPU或昇腾硬件,一台普通电脑就能跑。

# 使用pip安装CPU版本
pip install mindspore==2.2.0

# 验证安装
python -c "import mindspore; print(mindspore.__version__)"
1
2
3
4
5

安装完成后,你可以跑一个简单的线性回归来验证:

import mindspore as ms
from mindspore import nn, ops

# 定义一个简单的线性模型
class LinearNet(nn.Cell):
    def __init__(self):
        super().__init__()
        self.fc = nn.Dense(1, 1)
    
    def construct(self, x):
        return self.fc(x)

# 创建模型
model = LinearNet()
print("MindSpore安装成功!模型参数:", model.trainable_params())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

1.3.2 GPU版本安装

GPU版本需要NVIDIA显卡,且CUDA版本要匹配。我建议先查一下自己的CUDA版本:

# 查看CUDA版本
nvidia-smi

# 根据CUDA版本选择对应的MindSpore
# CUDA 11.1/11.6
pip install mindspore==2.2.0

# CUDA 10.1
pip install mindspore==1.7.0
1
2
3
4
5
6
7
8
9

⚠注意

我曾经在CUDA 11.4的环境下安装了MindSpore 2.0,结果算子编译报错。后来发现MindSpore 2.0只支持CUDA 11.1和11.6。所以安装前一定要核对版本兼容性表。

1.3.3 Ascend版本安装

昇腾版本的安装稍微复杂一些,需要先安装昇腾AI处理器的驱动和固件。如果你用的是华为云,可以直接选择预装MindSpore的镜像。

# 安装昇腾驱动(需要root权限)
# 具体步骤参考华为官方文档

# 安装MindSpore Ascend版本
pip install mindspore-ascend==2.2.0
1
2
3
4
5

安装完成后,可以用以下代码检查昇腾设备是否可用:

import mindspore as ms

# 检查昇腾设备
device_target = ms.get_context("device_target")
print(f"当前设备类型: {device_target}")

# 如果输出为"Ascend",说明安装成功
1
2
3
4
5
6
7

拓展笔记:安装问题本质上是“依赖链匹配”

安装深度学习框架时,不要只盯着 pip install。真正需要检查的是依赖链。

CPU 环境:

操作系统
  ↓
Python
  ↓
MindSpore
1
2
3
4
5

GPU 环境:

NVIDIA GPU
  ↓
驱动
  ↓
CUDA 等运行环境
  ↓
Python
  ↓
与该环境兼容的 MindSpore
1
2
3
4
5
6
7
8
9

Ascend 环境:

Ascend 硬件
  ↓
驱动 / 固件
  ↓
CANN 等软件栈
  ↓
Python
  ↓
与该环境兼容的 MindSpore
1
2
3
4
5
6
7
8
9

因此,“能安装成功”与“能真正调用加速设备”是两件事。排查时建议按硬件 → 驱动 → 运行时/工具链 → Python → MindSpore → 设备识别 → 最小程序的顺序进行。

拓展:环境验证清单

安装完成后,不要直接跑大型网络。更稳妥的验证顺序是:

  1. Python 能否正常启动;
  2. import mindspore 是否成功;
  3. 能否输出 MindSpore 版本;
  4. 能否创建一个 Tensor;
  5. 能否创建 nn.Dense;
  6. 能否完成一次前向传播;
  7. 能否计算一次梯度;
  8. GPU/Ascend 环境再检查目标设备是否真正被识别。

这样一旦失败,可以快速定位问题属于“导入层”“算子层”“自动微分层”还是“设备层”。

本章可以压缩成一条记忆链:

框架为什么出现 → MindSpore 为什么这样设计 → 在什么硬件上运行 → 如何安装 → 如何用最小训练程序证明环境可用。

如果考试考概念,重点抓“自动微分、动态图/静态图、全场景”;如果考实操,重点抓“环境依赖、nn.Cell、construct()、value_and_grad()、优化器”。

1.5 版本兼容性速查表

为了方便你快速对照,我整理了一张版本兼容性表。这张表是我在实际项目中踩过坑后总结的,建议收藏:

MindSpore版本 Python版本 CUDA版本 昇腾CANN版本 推荐场景
2.2.0 3.7-3.9 11.1/11.6 7.0.RC1 最新稳定版,推荐新项目使用
2.0.0 3.7-3.9 11.1/11.6 6.3.RC2 功能完整,适合迁移学习
1.10.0 3.7-3.9 10.1/11.1 5.1.RC2 老项目维护,兼容性好
1.7.0 3.7-3.8 10.1 5.0.RC1 低版本CUDA环境

📝提示

如果你是第一次接触MindSpore,直接上2.2.0版本。别在旧版本上浪费时间,新版本的API更简洁,文档也更完善。

拓展笔记:版本表应该怎么使用

原笔记中的版本表应当理解为原资料编写时的兼容性快照,而不是永久有效的安装矩阵。框架、Python、CUDA、CANN、驱动都会持续更新。

正确的使用方法是:

先确定硬件与操作系统
        ↓
确定要安装的 MindSpore 版本
        ↓
查该版本对应的官方安装/兼容说明
        ↓
反推 Python、CUDA/CANN、驱动等要求
        ↓
创建隔离环境并安装
1
2
3
4
5
6
7
8
9

不要根据“某个旧版本曾经支持 CUDA X.Y”推断“新版本也一定支持”。版本兼容属于强时效信息。

1.6 快速验证:你的第一个MindSpore程序

安装完成后,我们来写一个完整的训练流程。这个例子虽然简单,但包含了MindSpore的核心概念:数据集、模型定义、损失函数、优化器、训练循环。

import mindspore as ms
from mindspore import nn, ops, dataset as ds
import numpy as np

# 1. 生成模拟数据
def generate_data(num_samples=100):
    X = np.random.randn(num_samples, 1).astype(np.float32)
    y = 3 * X + 2 + 0.1 * np.random.randn(num_samples, 1).astype(np.float32)
    return X, y

X, y = generate_data()
train_dataset = ds.NumpySlicesDataset({"x": X, "y": y}, shuffle=True)
train_dataset = train_dataset.batch(16)

# 2. 定义模型
class LinearRegression(nn.Cell):
    def __init__(self):
        super().__init__()
        self.fc = nn.Dense(1, 1)
    
    def construct(self, x):
        return self.fc(x)

model = LinearRegression()

# 3. 定义损失函数和优化器
loss_fn = nn.MSELoss()
optimizer = nn.SGD(model.trainable_params(), learning_rate=0.01)

# 4. 定义前向计算函数
def forward_fn(x, y):
    pred = model(x)
    loss = loss_fn(pred, y)
    return loss

# 5. 获取梯度函数
grad_fn = ms.value_and_grad(forward_fn, None, optimizer.parameters)

# 6. 训练循环
def train_step(x, y):
    loss, grads = grad_fn(x, y)
    optimizer(grads)
    return loss

epochs = 50
for epoch in range(epochs):
    total_loss = 0
    for batch in train_dataset:
        x_batch = batch["x"]
        y_batch = batch["y"]
        loss = train_step(x_batch, y_batch)
        total_loss += loss.asnumpy()
    
    if (epoch + 1) % 10 == 0:
        print(f"Epoch {epoch+1}, Loss: {total_loss/len(train_dataset):.4f}")

print("训练完成!")
print(f"模型参数: w={model.fc.weight.asnumpy()[0][0]:.4f}, b={model.fc.bias.asnumpy()[0]:.4f}")
print(f"真实参数: w=3.0, b=2.0")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

运行这段代码,你会看到损失逐渐下降,最终模型参数接近真实值。这说明你的MindSpore环境已经配置成功了。

💡重点

MindSpore的训练流程和PyTorch很像,但有几个区别需要注意:

  • 模型继承nn.Cell而不是nn.Module
  • 前向计算写在construct方法中
  • 梯度计算使用ms.value_and_grad函数

拓展笔记:逐行拆解最小训练流程

原程序实际上已经包含一个完整的监督学习闭环:

随机生成 X
   ↓
按照 y = 3X + 2 + 噪声 生成标签
   ↓
NumpySlicesDataset
   ↓
batch(16)
   ↓
LinearRegression / Dense(1, 1)
   ↓
MSELoss
   ↓
value_and_grad 求 loss 与梯度
   ↓
SGD 根据梯度更新 w、b
   ↓
重复多个 epoch
   ↓
w → 3,b → 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

其中:

  • nn.Dense(1, 1) 只有一个输入特征和一个输出特征;
  • 模型学习的核心参数是权重 www 和偏置 bbb;
  • MSELoss 对回归任务很常见,关注预测值与真实值之间的平方误差;
  • learning_rate=0.01 控制每次参数更新的步幅;
  • epoch 表示完整遍历训练数据的轮数;
  • batch(16) 表示一次使用一小批样本进行计算。

拓展笔记:为什么 loss 下降很重要?

训练过程本质上是在参数空间中寻找更合适的参数。如果损失长期不下降,需要从以下方向排查:

现象 可能原因
Loss 完全不变 参数未更新、梯度断开、学习率异常
Loss 剧烈震荡 学习率过大、数据尺度问题
Loss 下降很慢 学习率偏小、模型/特征不合适
训练 Loss 很低但泛化差 可能过拟合
出现 NaN / Inf 数值不稳定、学习率过大、数据异常

这也是为什么“最小训练程序”比单纯 import mindspore 更有验证价值:它同时验证了数据、前向传播、损失、自动微分和参数更新。

1.7 常见问题与避坑指南

最后,分享几个我在实际安装和使用中遇到的问题,希望能帮你少走弯路:

  • 问题1:pip安装速度慢。建议使用国内镜像源,比如清华源:pip install mindspore -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 问题2:GPU版本安装后报错”CUDA driver version is insufficient”。这通常是CUDA驱动版本太低,升级驱动到对应版本即可。
  • 问题3:Ascend版本安装后找不到设备。检查一下昇腾驱动是否安装正确,可以用npu-smi info命令查看设备状态。
  • 问题4:动态图和静态图切换。MindSpore默认是静态图模式(Graph模式),如果你想要动态图调试,可以设置ms.set_context(mode=ms.PYNATIVE_MODE)。

⚠️注意

有一次我在Windows上安装MindSpore GPU版本,折腾了两天都没成功。后来发现MindSpore的GPU版本在Windows上支持有限,建议在Linux或WSL2上使用。如果你必须在Windows上开发,先用CPU版本学习,等需要GPU加速时再切换到Linux环境。

好了,第一章的内容就到这里。MindSpore的安装和基础概念你已经掌握了,接下来就可以开始动手写代码了。记住,框架只是工具,真正重要的是你对深度学习原理的理解。MindSpore的设计理念——全场景协同、动静统一、原生硬件优化——会让你在后续的项目中体会到它的强大之处。

遇到深度学习环境问题时,可以使用下面的顺序:

1. 看完整报错,不只看最后一行
2. 确认 Python / MindSpore 版本
3. 确认操作系统与架构
4. 确认 GPU / Ascend 驱动与设备状态
5. 确认 CUDA / CANN 等依赖
6. 新建干净虚拟环境复现
7. 用最小代码复现
8. 最后再回到完整项目
1
2
3
4
5
6
7
8

高频误区:

  • nvidia-smi 能运行,不等于 MindSpore 一定能使用 GPU;
  • 包能 pip install,不等于底层驱动和运行时一定兼容;
  • GRAPH_MODE / PYNATIVE_MODE 是执行模式,不是 GPU/Ascend 设备类型;
  • 大项目报错时直接改大量代码,往往比先构造最小复现更难定位问题。
#MindSpore
上次更新: 2026/09/02, 03:59:24
HCIP-AI 题目1-10
北京校区课程资料

← HCIP-AI 题目1-10 北京校区课程资料→

最近更新
01
HCIP-AI 题目1-10
09-01
02
踏入 AI 高阶之路:从聚合对话到智能体(Agent)
09-01
03
电厂基本情况
07-28
更多文章>
Theme by Vdoing | Copyright © 2025-2026 NCEPUwiki-Group | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式