1 2 3[](https://pypi.org/project/mindspore) 4[](https://badge.fury.io/py/mindspore) 5[](https://pepy.tech/project/mindspore) 6[](https://hub.docker.com/r/mindspore/mindspore-cpu) 7[](https://github.com/mindspore-ai/mindspore/blob/master/LICENSE) 8[](https://join.slack.com/t/mindspore/shared_invite/zt-dgk65rli-3ex4xvS4wHX7UDmsQmfu8w) 9[](https://gitee.com/mindspore/mindspore/pulls) 10 11[View English](./README.md) 12 13<!-- TOC --> 14 15- [MindSpore介绍](#mindspore介绍) 16 - [自动微分](#自动微分) 17 - [自动并行](#自动并行) 18- [安装](#安装) 19 - [pip方式安装](#pip方式安装) 20 - [源码编译方式安装](#源码编译方式安装) 21 - [Docker镜像](#docker镜像) 22- [快速入门](#快速入门) 23- [文档](#文档) 24- [社区](#社区) 25 - [治理](#治理) 26 - [交流](#交流) 27- [贡献](#贡献) 28- [分支维护策略](#分支维护策略) 29- [现有分支维护状态](#现有分支维护状态) 30- [版本说明](#版本说明) 31- [许可证](#许可证) 32- [OpenHarmony系统部件](#openharmony系统部件) 33 - [MindSpore Lite](#mindspore-lite) 34 - [使用方法](#使用方法) 35 - [MindIR 构图接口](#mindir-构图接口) 36 - [使用方法](#使用方法-1) 37 38<!-- /TOC --> 39 40## MindSpore介绍 41 42MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架。 43MindSpore提供了友好的设计和高效的执行,旨在提升数据科学家和算法工程师的开发体验,并为Ascend AI处理器提供原生支持,以及软硬件协同优化。 44 45同时,MindSpore作为全球AI开源社区,致力于进一步开发和丰富AI软硬件应用生态。 46 47<img src="https://gitee.com/mindspore/mindspore/raw/r1.5/docs/MindSpore-architecture.png" alt="MindSpore Architecture" width="600"/> 48 49欲了解更多详情,请查看我们的[总体架构](https://www.mindspore.cn/docs/programming_guide/zh-CN/r1.5/architecture.html)。 50 51### 自动微分 52 53当前主流深度学习框架中有三种自动微分技术: 54 55- **基于静态计算图的转换**:编译时将网络转换为静态数据流图,将链式法则应用于数据流图,实现自动微分。 56- **基于动态计算图的转换**:记录算子过载正向执行时网络的运行轨迹,对动态生成的数据流图应用链式法则,实现自动微分。 57- **基于源码的转换**:该技术是从功能编程框架演进而来,以即时编译(Just-in-time Compilation,JIT)的形式对中间表达式(程序在编译过程中的表达式)进行自动差分转换,支持复杂的控制流场景、高阶函数和闭包。 58 59TensorFlow早期采用的是静态计算图,PyTorch采用的是动态计算图。静态映射可以利用静态编译技术来优化网络性能,但是构建网络或调试网络非常复杂。动态图的使用非常方便,但很难实现性能的极限优化。 60 61MindSpore找到了另一种方法,即基于源代码转换的自动微分。一方面,它支持自动控制流的自动微分,因此像PyTorch这样的模型构建非常方便。另一方面,MindSpore可以对神经网络进行静态编译优化,以获得更好的性能。 62 63<img src="https://gitee.com/mindspore/mindspore/raw/r1.5/docs/Automatic-differentiation.png" alt="Automatic Differentiation" width="600"/> 64 65MindSpore自动微分的实现可以理解为程序本身的符号微分。MindSpore IR是一个函数中间表达式,它与基础代数中的复合函数具有直观的对应关系。复合函数的公式由任意可推导的基础函数组成。MindSpore IR中的每个原语操作都可以对应基础代数中的基本功能,从而可以建立更复杂的流控制。 66 67### 自动并行 68 69MindSpore自动并行的目的是构建数据并行、模型并行和混合并行相结合的训练方法。该方法能够自动选择开销最小的模型切分策略,实现自动分布并行训练。 70 71<img src="https://gitee.com/mindspore/mindspore/raw/r1.5/docs/Automatic-parallel.png" alt="Automatic Parallel" width="600"/> 72 73目前MindSpore采用的是算子切分的细粒度并行策略,即图中的每个算子被切分为一个集群,完成并行操作。在此期间的切分策略可能非常复杂,但是作为一名Python开发者,您无需关注底层实现,只要顶层API计算是有效的即可。 74 75## 安装 76 77### pip方式安装 78 79MindSpore提供跨多个后端的构建选项: 80 81| 硬件平台 | 操作系统 | 状态 | 82| :------------ | :-------------- | :--- | 83| Ascend 910 | Ubuntu-x86 | ✔️ | 84| | Ubuntu-aarch64 | ✔️ | 85| | EulerOS-aarch64 | ✔️ | 86| | CentOS-x86 | ✔️ | 87| | CentOS-aarch64 | ✔️ | 88| GPU CUDA 10.1 | Ubuntu-x86 | ✔️ | 89| CPU | Ubuntu-x86 | ✔️ | 90| | Ubuntu-aarch64 | ✔️ | 91| | Windows-x86 | ✔️ | 92 93使用`pip`命令安装,以`CPU`和`Ubuntu-x86`build版本为例: 94 951. 请从[MindSpore下载页面](https://www.mindspore.cn/versions)下载并安装whl包。 96 97 ```bash 98 pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.0-rc1/MindSpore/cpu/ubuntu_x86/mindspore-1.2.0rc1-cp37-cp37m-linux_x86_64.whl 99 ``` 100 1012. 执行以下命令,验证安装结果。 102 103 ```python 104 import numpy as np 105 import mindspore.context as context 106 import mindspore.nn as nn 107 from mindspore import Tensor 108 from mindspore.ops import operations as P 109 110 context.set_context(mode=context.GRAPH_MODE, device_target="CPU") 111 112 class Mul(nn.Cell): 113 def __init__(self): 114 super(Mul, self).__init__() 115 self.mul = P.Mul() 116 117 def construct(self, x, y): 118 return self.mul(x, y) 119 120 x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32)) 121 y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32)) 122 123 mul = Mul() 124 print(mul(x, y)) 125 ``` 126 127 ```text 128 [ 4. 10. 18.] 129 ``` 130 131使用pip方式,在不同的环境安装MindSpore,可参考以下文档。 132 133- [Ascend环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_pip.md) 134- [GPU环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_pip.md) 135- [CPU环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_pip.md) 136 137### 源码编译方式安装 138 139使用源码编译方式,在不同的环境安装MindSpore,可参考以下文档。 140 141- [Ascend环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_source.md) 142- [GPU环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_source.md) 143- [CPU环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_source.md) 144 145### Docker镜像 146 147MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore)上。 148目前容器化构建选项支持情况如下: 149 150| 硬件平台 | Docker镜像仓库 | 标签 | 说明 | 151| :----- | :------------------------ | :----------------------- | :--------------------------------------- | 152| CPU | `mindspore/mindspore-cpu` | `x.y.z` | 已经预安装MindSpore `x.y.z` CPU版本的生产环境。 | 153| | | `devel` | 提供开发环境从源头构建MindSpore(`CPU`后端)。安装详情请参考<https://www.mindspore.cn/install> 。 | 154| | | `runtime` | 提供运行时环境安装MindSpore二进制包(`CPU`后端)。 | 155| GPU | `mindspore/mindspore-gpu` | `x.y.z` | 已经预安装MindSpore `x.y.z` GPU版本的生产环境。 | 156| | | `devel` | 提供开发环境从源头构建MindSpore(`GPU CUDA10.1`后端)。安装详情请参考<https://www.mindspore.cn/install> 。 | 157| | | `runtime` | 提供运行时环境安装MindSpore二进制包(`GPU CUDA10.1`后端)。 | 158 159> **注意:** 不建议从源头构建GPU `devel` Docker镜像后直接安装whl包。我们强烈建议您在GPU `runtime` Docker镜像中传输并安装whl包。 160 161- CPU 162 163 对于`CPU`后端,可以直接使用以下命令获取并运行最新的稳定镜像: 164 165 ```bash 166 docker pull mindspore/mindspore-cpu:1.1.0 167 docker run -it mindspore/mindspore-cpu:1.1.0 /bin/bash 168 ``` 169 170- GPU 171 172 对于`GPU`后端,请确保`nvidia-container-toolkit`已经提前安装,以下是`Ubuntu`用户安装指南: 173 174 ```bash 175 DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID) 176 curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add - 177 curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list 178 179 sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2 180 sudo systemctl restart docker 181 ``` 182 183 编辑文件 daemon.json: 184 185 ```bash 186 $ vim /etc/docker/daemon.json 187 { 188 "runtimes": { 189 "nvidia": { 190 "path": "nvidia-container-runtime", 191 "runtimeArgs": [] 192 } 193 } 194 } 195 ``` 196 197 再次重启docker: 198 199 ```bash 200 sudo systemctl daemon-reload 201 sudo systemctl restart docker 202 ``` 203 204 使用以下命令获取并运行最新的稳定镜像: 205 206 ```bash 207 docker pull mindspore/mindspore-gpu:1.1.0 208 docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.1.0 /bin/bash 209 ``` 210 211 要测试Docker是否正常工作,请运行下面的Python代码并检查输出: 212 213 ```python 214 import numpy as np 215 import mindspore.context as context 216 from mindspore import Tensor 217 from mindspore.ops import functional as F 218 219 context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU") 220 221 x = Tensor(np.ones([1,3,3,4]).astype(np.float32)) 222 y = Tensor(np.ones([1,3,3,4]).astype(np.float32)) 223 print(F.tensor_add(x, y)) 224 ``` 225 226 ```text 227 [[[ 2. 2. 2. 2.], 228 [ 2. 2. 2. 2.], 229 [ 2. 2. 2. 2.]], 230 231 [[ 2. 2. 2. 2.], 232 [ 2. 2. 2. 2.], 233 [ 2. 2. 2. 2.]], 234 235 [[ 2. 2. 2. 2.], 236 [ 2. 2. 2. 2.], 237 [ 2. 2. 2. 2.]]] 238 ``` 239 240如果您想了解更多关于MindSpore Docker镜像的构建过程,请查看[docker](https://gitee.com/mindspore/mindspore/blob/r1.5/scripts/docker/README.md) repo了解详细信息。 241 242## 快速入门 243 244参考[快速入门](https://www.mindspore.cn/tutorials/zh-CN/r1.5/quick_start.html)实现图片分类。 245 246## 文档 247 248有关安装指南、教程和API的更多详细信息,请参阅[用户文档](https://gitee.com/mindspore/docs)。 249 250## 社区 251 252### 治理 253 254查看MindSpore如何进行[开放治理](https://gitee.com/mindspore/community/blob/master/governance.md)。 255 256### 交流 257 258- [MindSpore Slack](https://join.slack.com/t/mindspore/shared_invite/zt-dgk65rli-3ex4xvS4wHX7UDmsQmfu8w) 开发者交流平台。 259- `#mindspore`IRC频道(仅用于会议记录) 260- 视频会议:待定 261- 邮件列表:<https://mailweb.mindspore.cn/postorius/lists> 262 263## 贡献 264 265欢迎参与贡献。更多详情,请参阅我们的[贡献者Wiki](https://gitee.com/mindspore/mindspore/blob/master/CONTRIBUTING.md)。 266 267## 分支维护策略 268 269MindSpore的版本分支有以下几种维护阶段: 270 271| **状态** | **持续时间** | **说明** | 272|-------------|---------------|--------------------------------------------------| 273| Planning | 1 - 3 months | 特性规划。 | 274| Development | 3 months | 特性开发。 | 275| Maintained | 6 - 12 months | 允许所有问题修复的合入,并发布版本。 | 276| Unmaintained| 0 - 3 months | 允许所有问题修复的合入,无专人维护,不再发布版本。 | 277| End Of Life (EOL) | N/A | 不再接受修改合入该分支。 | 278 279## 现有分支维护状态 280 281| **分支名** | **当前状态** | **上线时间** | **后续状态** | **EOL 日期**| 282|------------|--------------|----------------------|----------------------------------------|------------| 283| **r1.5** | Maintained | 2021-10-15 | Unmaintained <br> 2022-10-15 estimated | | 284| **r1.4** | Maintained | 2021-08-15 | Unmaintained <br> 2022-08-15 estimated | | 285| **r1.3** | Maintained | 2021-07-15 | Unmaintained <br> 2022-07-15 estimated | | 286| **r1.2** | Unmaintained | 2021-04-15 | End Of Life <br> 2022-04-15 estimated | | 287| **r1.1** | End Of Life | 2020-12-31 | | 2021-09-30 | 288| **r1.0** | End Of Life | 2020-09-24 | | 2021-07-30 | 289| **r0.7** | End Of Life | 2020-08-31 | | 2021-02-28 | 290| **r0.6** | End Of Life | 2020-07-31 | | 2020-12-30 | 291| **r0.5** | End Of Life | 2020-06-30 | | 2021-06-30 | 292| **r0.3** | End Of Life | 2020-05-31 | | 2020-09-30 | 293| **r0.2** | End Of Life | 2020-04-30 | | 2020-08-31 | 294| **r0.1** | End Of Life | 2020-03-28 | | 2020-06-30 | 295 296## 版本说明 297 298版本说明请参阅[RELEASE](https://gitee.com/mindspore/mindspore/blob/master/RELEASE.md)。 299 300## 许可证 301 302[Apache License 2.0](https://gitee.com/mindspore/mindspore#/mindspore/mindspore/blob/master/LICENSE) 303 304## OpenHarmony系统部件 305目前OpenHarmony的标准系统内置了Mindspore Lite,和MindIR构图接口。 306### MindSpore Lite 307关于MindSpore Lite的介绍详见(MindSpore Lite介绍)[mindspore/lite/README_CN.md]。 308#### 使用方法 309在BUILD.gn中加入如下依赖即可使用MindSpore Lite: 310```gn 311include_dirs = [ 312 "//third_party/mindspore/" 313] 314external_deps = ["mindspore:mindspore_lib"] 315``` 316 317C++ 的头文件存放在`include/api`目录中,使用方法: 318```C++ 319#include "include/api/xxx" 320``` 321 322C 的头文件存放在`include/c_api`目录中,使用方法: 323```C++ 324#include "include/c_api/xxx" 325``` 326### MindIR 构图接口 327MindIR是MindSpore 用于描述图结构的中间表达方式。 328Primitive 是一套基于flatbuffers的对模型进行序列化的工具,MindSpore Lite使用它存储图结构、算子、张量等信息。 329Lite Graph是MindSpore Lite用于描述模型中节点、张量、子图等信息的结构,并且可以通过MindIR接口构建Lite Graph。 330 331#### 使用方法 332在BUILD.gn中加入如下依赖即可使用MindIR 构图接口: 333```gn 334include_dirs = [ 335 "//third_party/mindspore/mindspore/lite/mindir/include" 336] 337external_deps = ["mindspore:mindir"] 338``` 339 340C++ 接口存放目录为`mindspore/mindspore/lite/mindir/include`直接使用 341``` 342├── include # 对外的所有头文件 343│ ├── mindir.h # MindIR所有功能的头文件 344│ ├── mindir_lite_graph.h # Lite Graph相关的头文件 345│ ├── mindir_primitive.h # Primitive相关头文件 346│ ├── mindir_tensor.h # Tensor相关头文件 347│ └── mindir_types.h # 类型相关的头文件 348├── inner_headers # 内部使用的头文件 349├── src # MindIR构图接口的源代码 350└── tests # 测试代码 351```