• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1![MindSpore标志](https://gitee.com/mindspore/mindspore/raw/master/docs/MindSpore-logo.png "MindSpore logo")
2
3[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mindspore.svg)](https://pypi.org/project/mindspore)
4[![PyPI](https://badge.fury.io/py/mindspore.svg)](https://badge.fury.io/py/mindspore)
5[![Downloads](https://pepy.tech/badge/mindspore)](https://pepy.tech/project/mindspore)
6[![DockerHub](https://img.shields.io/docker/pulls/mindspore/mindspore-cpu.svg)](https://hub.docker.com/r/mindspore/mindspore-cpu)
7[![LICENSE](https://img.shields.io/github/license/mindspore-ai/mindspore.svg?style=flat-square)](https://github.com/mindspore-ai/mindspore/blob/master/LICENSE)
8[![Slack](https://img.shields.io/badge/slack-chat-green.svg?logo=slack)](https://join.slack.com/t/mindspore/shared_invite/zt-dgk65rli-3ex4xvS4wHX7UDmsQmfu8w)
9[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](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#### 使用方法
309BUILD.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#### 使用方法
332BUILD.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```