You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README_CN.md 13 kB

5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. ![MindSpore标志](docs/MindSpore-logo.png "MindSpore logo")
  2. [View English](./README.md)
  3. <!-- TOC -->
  4. - [MindSpore介绍](#mindspore介绍)
  5. - [自动微分](#自动微分)
  6. - [自动并行](#自动并行)
  7. - [安装](#安装)
  8. - [pip方式安装](#pip方式安装)
  9. - [源码编译方式安装](#源码编译方式安装)
  10. - [Docker镜像](#docker镜像)
  11. - [快速入门](#快速入门)
  12. - [文档](#文档)
  13. - [社区](#社区)
  14. - [治理](#治理)
  15. - [交流](#交流)
  16. - [贡献](#贡献)
  17. - [分支维护策略](#分支维护策略)
  18. - [现有分支维护状态](#现有分支维护状态)
  19. - [版本说明](#版本说明)
  20. - [许可证](#许可证)
  21. <!-- /TOC -->
  22. ## MindSpore介绍
  23. MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架。
  24. MindSpore提供了友好的设计和高效的执行,旨在提升数据科学家和算法工程师的开发体验,并为Ascend AI处理器提供原生支持,以及软硬件协同优化。
  25. 同时,MindSpore作为全球AI开源社区,致力于进一步开发和丰富AI软硬件应用生态。
  26. <img src="docs/MindSpore-architecture.png" alt="MindSpore Architecture" width="600"/>
  27. 欲了解更多详情,请查看我们的[总体架构](https://www.mindspore.cn/doc/note/zh-CN/master/design/mindspore/architecture.html)。
  28. ### 自动微分
  29. 当前主流深度学习框架中有三种自动微分技术:
  30. - **基于静态计算图的转换**:编译时将网络转换为静态数据流图,将链式法则应用于数据流图,实现自动微分。
  31. - **基于动态计算图的转换**:记录算子过载正向执行时网络的运行轨迹,对动态生成的数据流图应用链式法则,实现自动微分。
  32. - **基于源码的转换**:该技术是从功能编程框架演进而来,以即时编译(Just-in-time Compilation,JIT)的形式对中间表达式(程序在编译过程中的表达式)进行自动差分转换,支持复杂的控制流场景、高阶函数和闭包。
  33. TensorFlow早期采用的是静态计算图,PyTorch采用的是动态计算图。静态映射可以利用静态编译技术来优化网络性能,但是构建网络或调试网络非常复杂。动态图的使用非常方便,但很难实现性能的极限优化。
  34. MindSpore找到了另一种方法,即基于源代码转换的自动微分。一方面,它支持自动控制流的自动微分,因此像PyTorch这样的模型构建非常方便。另一方面,MindSpore可以对神经网络进行静态编译优化,以获得更好的性能。
  35. <img src="docs/Automatic-differentiation.png" alt="Automatic Differentiation" width="600"/>
  36. MindSpore自动微分的实现可以理解为程序本身的符号微分。MindSpore IR是一个函数中间表达式,它与基础代数中的复合函数具有直观的对应关系。复合函数的公式由任意可推导的基础函数组成。MindSpore IR中的每个原语操作都可以对应基础代数中的基本功能,从而可以建立更复杂的流控制。
  37. ### 自动并行
  38. MindSpore自动并行的目的是构建数据并行、模型并行和混合并行相结合的训练方法。该方法能够自动选择开销最小的模型切分策略,实现自动分布并行训练。
  39. <img src="docs/Automatic-parallel.png" alt="Automatic Parallel" width="600"/>
  40. 目前MindSpore采用的是算子切分的细粒度并行策略,即图中的每个算子被切分为一个集群,完成并行操作。在此期间的切分策略可能非常复杂,但是作为一名Python开发者,您无需关注底层实现,只要顶层API计算是有效的即可。
  41. ## 安装
  42. ### pip方式安装
  43. MindSpore提供跨多个后端的构建选项:
  44. | 硬件平台 | 操作系统 | 状态 |
  45. | :------------ | :-------------- | :--- |
  46. | Ascend 910 | Ubuntu-x86 | ✔️ |
  47. | | Ubuntu-aarch64 | ✔️ |
  48. | | EulerOS-x86 | ✔️ |
  49. | | EulerOS-aarch64 | ✔️ |
  50. | | CentOS-x86 | ✔️ |
  51. | | CentOS-aarch64 | ✔️ |
  52. | GPU CUDA 10.1 | Ubuntu-x86 | ✔️ |
  53. | CPU | Ubuntu-x86 | ✔️ |
  54. | | Ubuntu-aarch64 | ✔️ |
  55. | | Windows-x86 | ✔️ |
  56. 使用`pip`命令安装,以`CPU`和`Ubuntu-x86`build版本为例:
  57. 1. 请从[MindSpore下载页面](https://www.mindspore.cn/versions)下载并安装whl包。
  58. ```bash
  59. pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.0/MindSpore/cpu/ubuntu_x86/mindspore-1.0.0-cp37-cp37m-linux_x86_64.whl
  60. ```
  61. 2. 执行以下命令,验证安装结果。
  62. ```python
  63. import numpy as np
  64. import mindspore.context as context
  65. import mindspore.nn as nn
  66. from mindspore import Tensor
  67. from mindspore.ops import operations as P
  68. context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
  69. class Mul(nn.Cell):
  70. def __init__(self):
  71. super(Mul, self).__init__()
  72. self.mul = P.Mul()
  73. def construct(self, x, y):
  74. return self.mul(x, y)
  75. x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))
  76. y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32))
  77. mul = Mul()
  78. print(mul(x, y))
  79. ```
  80. ```text
  81. [ 4. 10. 18.]
  82. ```
  83. 使用pip方式,在不同的环境安装MindSpore,可参考以下文档。
  84. - [Ascend环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_pip.md)
  85. - [GPU环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_pip.md)
  86. - [CPU环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_pip.md)
  87. ### 源码编译方式安装
  88. 使用源码编译方式,在不同的环境安装MindSpore,可参考以下文档。
  89. - [Ascend环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_source.md)
  90. - [GPU环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_source.md)
  91. - [CPU环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_source.md)
  92. ### Docker镜像
  93. MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore)上。
  94. 目前容器化构建选项支持情况如下:
  95. | 硬件平台 | Docker镜像仓库 | 标签 | 说明 |
  96. | :----- | :------------------------ | :----------------------- | :--------------------------------------- |
  97. | CPU | `mindspore/mindspore-cpu` | `x.y.z` | 已经预安装MindSpore `x.y.z` CPU版本的生产环境。 |
  98. | | | `devel` | 提供开发环境从源头构建MindSpore(`CPU`后端)。安装详情请参考<https://www.mindspore.cn/install> 。 |
  99. | | | `runtime` | 提供运行时环境安装MindSpore二进制包(`CPU`后端)。 |
  100. | GPU | `mindspore/mindspore-gpu` | `x.y.z` | 已经预安装MindSpore `x.y.z` GPU版本的生产环境。 |
  101. | | | `devel` | 提供开发环境从源头构建MindSpore(`GPU CUDA10.1`后端)。安装详情请参考<https://www.mindspore.cn/install> 。 |
  102. | | | `runtime` | 提供运行时环境安装MindSpore二进制包(`GPU CUDA10.1`后端)。 |
  103. | Ascend | <center>&mdash;</center> | <center>&mdash;</center> | 即将推出,敬请期待。 |
  104. > **注意:** 不建议从源头构建GPU `devel` Docker镜像后直接安装whl包。我们强烈建议您在GPU `runtime` Docker镜像中传输并安装whl包。
  105. - CPU
  106. 对于`CPU`后端,可以直接使用以下命令获取并运行最新的稳定镜像:
  107. ```bash
  108. docker pull mindspore/mindspore-cpu:1.0.0
  109. docker run -it mindspore/mindspore-cpu:1.0.0 /bin/bash
  110. ```
  111. - GPU
  112. 对于`GPU`后端,请确保`nvidia-container-toolkit`已经提前安装,以下是`Ubuntu`用户安装指南:
  113. ```bash
  114. DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
  115. curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
  116. curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
  117. sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
  118. sudo systemctl restart docker
  119. ```
  120. 编辑文件 daemon.json:
  121. ```bash
  122. $ vim /etc/docker/daemon.json
  123. {
  124. "runtimes": {
  125. "nvidia": {
  126. "path": "nvidia-container-runtime",
  127. "runtimeArgs": []
  128. }
  129. }
  130. }
  131. ```
  132. 再次重启docker:
  133. ```bash
  134. sudo systemctl daemon-reload
  135. sudo systemctl restart docker
  136. ```
  137. 使用以下命令获取并运行最新的稳定镜像:
  138. ```bash
  139. docker pull mindspore/mindspore-gpu:1.0.0
  140. docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.0.0 /bin/bash
  141. ```
  142. 要测试Docker是否正常工作,请运行下面的Python代码并检查输出:
  143. ```python
  144. import numpy as np
  145. import mindspore.context as context
  146. from mindspore import Tensor
  147. from mindspore.ops import functional as F
  148. context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU")
  149. x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
  150. y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
  151. print(F.tensor_add(x, y))
  152. ```
  153. ```text
  154. [[[ 2. 2. 2. 2.],
  155. [ 2. 2. 2. 2.],
  156. [ 2. 2. 2. 2.]],
  157. [[ 2. 2. 2. 2.],
  158. [ 2. 2. 2. 2.],
  159. [ 2. 2. 2. 2.]],
  160. [[ 2. 2. 2. 2.],
  161. [ 2. 2. 2. 2.],
  162. [ 2. 2. 2. 2.]]]
  163. ```
  164. 如果您想了解更多关于MindSpore Docker镜像的构建过程,请查看[docker](docker/README.md) repo了解详细信息。
  165. ## 快速入门
  166. 参考[快速入门](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)实现图片分类。
  167. ## 文档
  168. 有关安装指南、教程和API的更多详细信息,请参阅[用户文档](https://gitee.com/mindspore/docs)。
  169. ## 社区
  170. ### 治理
  171. 查看MindSpore如何进行[开放治理](https://gitee.com/mindspore/community/blob/master/governance.md)。
  172. ### 交流
  173. - [MindSpore Slack](https://join.slack.com/t/mindspore/shared_invite/zt-dgk65rli-3ex4xvS4wHX7UDmsQmfu8w) 开发者交流平台。
  174. - `#mindspore`IRC频道(仅用于会议记录)
  175. - 视频会议:待定
  176. - 邮件列表:<https://mailweb.mindspore.cn/postorius/lists>
  177. ## 贡献
  178. 欢迎参与贡献。更多详情,请参阅我们的[贡献者Wiki](CONTRIBUTING.md)。
  179. ## 分支维护策略
  180. MindSpore的版本分支有以下几种维护阶段:
  181. | **状态** | **持续时间** | **说明** |
  182. |-------------|---------------|--------------------------------------------------|
  183. | Planning | 1 - 3 months | 特性规划。 |
  184. | Development | 3 months | 特性开发。 |
  185. | Maintained | 6 - 12 months | 允许所有问题修复的合入,并发布版本。 |
  186. | Unmaintained| 0 - 3 months | 允许所有问题修复的合入,无专人维护,不再发布版本。 |
  187. | End Of Life (EOL) | N/A | 不再接受修改合入该分支。 |
  188. ## 现有分支维护状态
  189. | **分支名** | **当前状态** | **上线时间** | **后续状态** | **EOL 日期** |
  190. |--------|--------------|----------------------|-----------------------------------|------------|
  191. | **r1.1** | Development | 2020-12-31 estimated | Maintained <br> 2020-12-31 estimated | |
  192. | **r1.0** | Maintained | 2020-09-24 | Unmaintained <br> 2021-03-30 estimated | |
  193. | **r0.7** | Maintained | 2020-08-31 | Unmaintained <br> 2020-11-30 estimated | |
  194. | **r0.6** | Unmaintained | 2020-07-31 | End Of Life <br> 2020-12-30 estimated | |
  195. | **r0.5** | Maintained | 2020-06-30 | Unmaintained <br> 2021-06-30 estimated | |
  196. | **r0.3** | End Of Life | 2020-05-31 | | 2020-09-30 |
  197. | **r0.2** | End Of Life | 2020-04-30 | | 2020-08-31 |
  198. | **r0.1** | End Of Life | 2020-03-28 | | 2020-06-30 |
  199. ## 版本说明
  200. 版本说明请参阅[RELEASE](RELEASE.md)。
  201. ## 许可证
  202. [Apache License 2.0](LICENSE)