zoukankan      html  css  js  c++  java
  • MindSpore基本原理

    MindSpore基本原理

    MindSpore介绍

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

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

     

    自动微分

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

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

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

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

     

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

    自动并行

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

     

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

    安装

    pip方式安装

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

    硬件平台

    操作系统

    状态

    Ascend 910

    Ubuntu-x86

    ✔️

     

    Ubuntu-aarch64

    ✔️

     

    EulerOS-aarch64

    ✔️

     

    CentOS-x86

    ✔️

     

    CentOS-aarch64

    ✔️

    GPU CUDA 10.1

    Ubuntu-x86

    ✔️

    CPU

    Ubuntu-x86

    ✔️

     

    Ubuntu-aarch64

    ✔️

     

    Windows-x86

    ✔️

    使用pip命令安装,以CPU和Ubuntu-x86build版本为例:

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

    pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.1.0/MindSpore/cpu/ubuntu_x86/mindspore-1.1.0-cp37-cp37m-linux_x86_64.whl

    1. 执行以下命令,验证安装结果。
    1. import numpy as np
    2. import mindspore.context as context
    3. import mindspore.nn as nn
    4. from mindspore import Tensor
    5. from mindspore.ops import operations as P
    6.  
    7. context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
    8. 10.  

    11. class Mul(nn.Cell):

    1. 12.     def __init__(self):
    2. 13.         super(Mul, self).__init__()
    3. 14.         self.mul = P.Mul()
    4. 15.  
    5. 16.     def construct(self, x, y):
    6. 17.         return self.mul(x, y)
    7. 18.  

    19. x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))

    20. y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32))

    1. 21.  

    22. mul = Mul()

    print(mul(x, y))

    [ 4. 10. 18.]

    使用pip方式,在不同的环境安装MindSpore,可参考以下文档。

    源码编译方式安装

    使用源码编译方式,在不同的环境安装MindSpore,可参考以下文档。

    Docker镜像

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

    硬件平台

    Docker镜像仓库

    标签

    说明

    CPU

    mindspore/mindspore-cpu

    x.y.z

    已经预安装MindSpore x.y.z CPU版本的生产环境。

       

    devel

    提供开发环境从源头构建MindSpore(CPU后端)。安装详情请参考https://www.mindspore.cn/install 。

       

    runtime

    提供运行时环境安装MindSpore二进制包(CPU后端)。

    GPU

    mindspore/mindspore-gpu

    x.y.z

    已经预安装MindSpore x.y.z GPU版本的生产环境。

       

    devel

    提供开发环境从源头构建MindSpore(GPU 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.1.0

    docker run -it mindspore/mindspore-cpu:1.1.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.1.0

    docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.1.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.]]]
    人工智能芯片与自动驾驶
  • 相关阅读:
    Python class static methods
    学习MySQL出现问题Not allowed to return a result set from a t
    MySQL创样例表(MySQL必知必会B.2)
    无重复字符的最长字串(C++,python实现)
    softmax详解
    为什么要使用logistic函数
    两个栈实现队列的插入和删除(C++实现)
    用数组实现队列(C++)
    C++ memset函数
    两数之和(C++实现)
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14316439.html
Copyright © 2011-2022 走看看