mindspore/README_CN.md

10 KiB
Raw Blame History

MindSpore标志

View English

MindSpore介绍

MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架。 MindSpore提供了友好的设计和高效的执行旨在提升数据科学家和算法工程师的开发体验并为Ascend AI处理器提供原生支持以及软硬件协同优化。

同时MindSpore作为全球AI开源社区致力于进一步开发和丰富AI软硬件应用生态。

MindSpore Architecture

欲了解更多详情,请查看我们的总体架构9月24日前请访问总体架构)。

自动微分

当前主流深度学习框架中有三种自动微分技术:

  • 基于静态计算图的转换:编译时将网络转换为静态数据流图,将链式法则应用于数据流图,实现自动微分。
  • 基于动态计算图的转换:记录算子过载正向执行时网络的运行轨迹,对动态生成的数据流图应用链式法则,实现自动微分。
  • 基于源码的转换该技术是从功能编程框架演进而来以即时编译Just-in-time CompilationJIT的形式对中间表达式程序在编译过程中的表达式进行自动差分转换支持复杂的控制流场景、高阶函数和闭包。

TensorFlow早期采用的是静态计算图PyTorch采用的是动态计算图。静态映射可以利用静态编译技术来优化网络性能但是构建网络或调试网络非常复杂。动态图的使用非常方便但很难实现性能的极限优化。

MindSpore找到了另一种方法即基于源代码转换的自动微分。一方面它支持自动控制流的自动微分因此像PyTorch这样的模型构建非常方便。另一方面MindSpore可以对神经网络进行静态编译优化以获得更好的性能。

Automatic Differentiation

MindSpore自动微分的实现可以理解为程序本身的符号微分。MindSpore IR是一个函数中间表达式它与基础代数中的复合函数具有直观的对应关系。复合函数的公式由任意可推导的基础函数组成。MindSpore IR中的每个原语操作都可以对应基础代数中的基本功能从而可以建立更复杂的流控制。

自动并行

MindSpore自动并行的目的是构建数据并行、模型并行和混合并行相结合的训练方法。该方法能够自动选择开销最小的模型切分策略实现自动分布并行训练。

Automatic Parallel

目前MindSpore采用的是算子切分的细粒度并行策略即图中的每个算子被切分为一个集群完成并行操作。在此期间的切分策略可能非常复杂但是作为一名Python开发者您无需关注底层实现只要顶层API计算是有效的即可。

安装

二进制文件

MindSpore提供跨多个后端的构建选项

硬件平台 操作系统 状态
Ascend 910 Ubuntu-x86 ✔️
Ubuntu-aarch64 ✔️
EulerOS-x86 ✔️
EulerOS-aarch64 ✔️
CentOS-x86 ✔️
CentOS-aarch64 ✔️
GPU CUDA 10.1 Ubuntu-x86 ✔️
CPU Ubuntu-x86 ✔️
Ubuntu-aarch64 ✔️
Windows-x86 ✔️

使用pip命令安装,以CPUUbuntu-x86build版本为例

  1. 请从MindSpore下载页面下载并安装whl包。

    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
    
  2. 执行以下命令,验证安装结果。

    import numpy as np
    import mindspore.context as context
    import mindspore.nn as nn
    from mindspore import Tensor
    from mindspore.ops import operations as P
    
    context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
    
    class Mul(nn.Cell):
        def __init__(self):
            super(Mul, self).__init__()
            self.mul = P.Mul()
    
        def construct(self, x, y):
            return self.mul(x, y)
    
    x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))
    y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32))
    
    mul = Mul()
    print(mul(x, y))
    
    [ 4. 10. 18.]
    

来源

MindSpore安装

Docker镜像

MindSpore的Docker镜像托管在Docker Hub上。 目前容器化构建选项支持情况如下:

硬件平台 Docker镜像仓库 标签 说明
CPU mindspore/mindspore-cpu x.y.z 已经预安装MindSpore x.y.z CPU版本的生产环境。
devel 提供开发环境从源头构建MindSporeCPU后端)。安装详情请参考https://www.mindspore.cn/install
runtime 提供运行时环境安装MindSpore二进制包CPU后端)。
GPU mindspore/mindspore-gpu x.y.z 已经预安装MindSpore x.y.z GPU版本的生产环境。
devel 提供开发环境从源头构建MindSporeGPU CUDA10.1后端)。安装详情请参考https://www.mindspore.cn/install
runtime 提供运行时环境安装MindSpore二进制包GPU CUDA10.1后端)。
Ascend 即将推出,敬请期待。

注意: 不建议从源头构建GPU devel Docker镜像后直接安装whl包。我们强烈建议您在GPU runtime Docker镜像中传输并安装whl包。

  • CPU

    对于CPU后端,可以直接使用以下命令获取并运行最新的稳定镜像:

    docker pull mindspore/mindspore-cpu:1.0.0
    docker run -it mindspore/mindspore-cpu:1.0.0 /bin/bash
    
  • GPU

    对于GPU后端,请确保nvidia-container-toolkit已经提前安装,以下是Ubuntu用户安装指南:

    DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
    
    sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
    sudo systemctl restart docker
    

    编辑文件 daemon.json:

    $ vim /etc/docker/daemon.json
    {
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        }
    }
    

    再次重启docker:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    使用以下命令获取并运行最新的稳定镜像:

    docker pull mindspore/mindspore-gpu:1.0.0
    docker run -it --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.0.0 /bin/bash
    

    要测试Docker是否正常工作请运行下面的Python代码并检查输出

    import numpy as np
    import mindspore.context as context
    from mindspore import Tensor
    from mindspore.ops import functional as F
    
    context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU")
    
    x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
    y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
    print(F.tensor_add(x, y))
    
    [[[ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.]],
    
    [[ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.]],
    
    [[ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.],
    [ 2.  2.  2.  2.]]]
    

如果您想了解更多关于MindSpore Docker镜像的构建过程请查看docker repo了解详细信息。

快速入门

参考快速入门9月24日前请访问快速入门)实现图片分类。

文档

有关安装指南、教程和API的更多详细信息请参阅用户文档

社区

治理

查看MindSpore如何进行开放治理

交流

贡献

欢迎参与贡献。更多详情,请参阅我们的贡献者Wiki

版本说明

版本说明请参阅RELEASE

许可证

Apache License 2.0