MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架

news2025/1/22 17:41:48

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

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

欲了解更多详情,请查看我们的总体架构。

自动微分

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

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

PyTorch采用的是操作符重载法。相较于代码变换法,操作符重载法是在运行时生成微分计算图的, 无需考虑函数调用与控制流等情况, 开发更为简单。 但该方法不能在编译时刻做微分图的优化, 控制流也需要根据运行时的信息来展开, 很难实现性能的极限优化。

MindSpore则采用的是代码变换法。一方面,它支持自动控制流的自动微分,因此像PyTorch这样的模型构建非常方便。另一方面,MindSpore可以对神经网络进行静态编译优化,以获得更好的性能。

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

自动并行

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

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

安装

pip方式安装

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

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

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

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

    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
  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.]

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

  • Ascend环境使用pip方式安装MindSpore
  • GPU环境使用pip方式安装MindSpore
  • CPU环境使用pip方式安装MindSpore

源码编译方式安装

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

  • Ascend环境使用源码编译方式安装MindSpore
  • GPU环境使用源码编译方式安装MindSpore
  • CPU环境使用源码编译方式安装MindSpore

Docker镜像

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

硬件平台Docker镜像仓库标签说明
CPUmindspore/mindspore-cpux.y.z已经预安装MindSpore x.y.z CPU版本的生产环境。
devel提供开发环境从源头构建MindSpore(CPU后端)。安装详情请参考https://www.mindspore.cn/install 。
runtime提供运行时环境安装MindSpore二进制包(CPU后端)。
GPUmindspore/mindspore-gpux.y.z已经预安装MindSpore x.y.z GPU版本的生产环境。
devel提供开发环境从源头构建MindSpore(GPU CUDA10.1后端)。安装详情请参考https://www.mindspore.cn/install 。
runtime提供运行时环境安装MindSpore二进制包(GPU CUDA10.1后端)。

注意: 不建议从源头构建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.]]]

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

快速入门

参考快速入门实现图片分类。

文档

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

社区

治理

查看MindSpore如何进行开放治理。

交流

  • MindSpore Slack 开发者交流平台。
  • #mindsporeIRC频道(仅用于会议记录)
  • 视频会议:待定
  • 邮件列表:https://mailweb.mindspore.cn/postorius/lists

贡献

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

分支维护策略

MindSpore的版本分支有以下几种维护阶段:

状态持续时间说明
Planning1 - 3 months特性规划。
Development3 months特性开发。
Maintained6 - 12 months允许所有问题修复的合入,并发布版本。
Unmaintained0 - 3 months允许所有问题修复的合入,无专人维护,不再发布版本。
End Of Life (EOL)N/A不再接受修改合入该分支。

现有分支维护状态

分支名当前状态上线时间后续状态EOL 日期
r1.9Maintained2022-10-26Unmaintained
2023-10-26 estimated
r1.8Maintained2022-07-29Unmaintained
2023-07-29 estimated
r1.7Maintained2022-04-29Unmaintained
2023-04-29 estimated
r1.6Maintained2022-01-29Unmaintained
2023-01-29 estimated
r1.5End Of Life2021-10-152022-10-15
r1.4End Of Life2021-08-152022-08-15
r1.3End Of Life2021-07-152022-07-15
r1.2End Of Life2021-04-152022-04-29
r1.1End Of Life2020-12-312021-09-30
r1.0End Of Life2020-09-242021-07-30
r0.7End Of Life2020-08-312021-02-28
r0.6End Of Life2020-07-312020-12-30
r0.5End Of Life2020-06-302021-06-30
r0.3End Of Life2020-05-312020-09-30
r0.2End Of Life2020-04-302020-08-31
r0.1End Of Life2020-03-282020-06-30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】

1、应用层 web应用——http协议 请求消息格式:请求行,头部行,消息体 请求方法get,post,delete,put上传文件 Email应用——SMTP,POP3/IMAP DNS应用——DNS协议 P2P应用:文件分发等…

实战项目【7】MEMS惯性传感器的精度参数和单位换算

1 前言 有不少朋友在做项目的时候经常涉及到加速度计和陀螺仪的原始数据转换为其他的单位的问题,这篇文章梳理和推导一下。 1)加速度计的原始数据 在应用时常见的转换单位有: g、m/s^2 、角度 2)陀螺仪的原始数据 在应用时常见的转换单位有&a…

〖全域运营实战白宝书 - 运营角色认知篇⑤〗- “运营“ 是否有前途?

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

UE4 回合游戏项目 23- 进入战斗

在上一篇(UE4 回合游戏项目 22- 控制新角色)基础上继续增加两个角色进入战斗的逻辑 效果: 步骤: 1. 打开“gameMode1”,新增一个变量命名为“正在控制的所有玩家”,变量类型为“roleCategory”的数组 2.打…

Jitamin 安装与配置

Jitamin Jitamin (读作/ˈdʒɪtəmɪn/) 是一款免费、开源,使用PHP语言开发的项目管理系统。Jitamin灵感来自于Vitamin,并结合了Just In Time(准时)和敏的拼音min,意指效率与敏捷是项目管理的维他命。 功能特性 简洁、美观的界面支持多主题…

Celix是什么?能做什么?

半路突然看到了OSGI,又学习了一下,大概了解了架构的一些基础知识。 像MVC,MVP等其实就是分层架构,这类是最容易想到的。 然后其实我就没有接触,如微服务架构,微内核架构。 是什么? 而Celix就是属于微内…

[附源码]java毕业设计校园网学生成绩查询系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Redis源码篇(6)——主从复制

主从复制 从服务器执行 SLAVEOF IP PORT 命令即可实现对主服务器的复制。 复制又分为完整同步和部分同步(2.8之后) 完整同步:与混合持久化过程类似,先以rdb的方式保存rdb文件然后发送给从服务器。再将期间的命令保存到复制缓存区…

[论文评析]基于人体姿态识别的立定跳远 动作智能评估系统

基于人体姿态识别的立定跳远 动作智能评估系统论文信息背景方法系统总体设计立定跳远动作智能评估系统标准动作库子系统动作采集子系统人体姿态动作评估子系统人体姿态评估模型立定跳远关键帧匹配姿态评估及对比总结论文信息 题目:基于人体姿态识别的立定跳远 动作…

AMBA:AXI/AHB/APB学习笔记

AMBA、AXI、AHB、APB学习笔记AMBA总线:各模块之间的连接AHB特性:组成部分:AXIAPBAMBA总线:各模块之间的连接 advanced microcontroller bus architecture高级微控制器总线架构 AHB Advanced High-performance Bus 高级高性能总…

微信小程序|搭建一个博客小程序

文章目录一、文章前言二、创建小程序三、功能开发(1)首页(2)领域页(3)博客详情页(4)个人中心页一、文章前言 此文主要通过小程序搭建一个博客系统,实现博客的一些基础功能…

AD环境下域用户的离线缓存登录

缓存登录主要是为了解决当公司域控制器发生故障联系不上DC或用户拿笔记本电脑回家不拔VPN的情况下,依然能够登录到系统,进行办公。如果用户登录的时候联系不到DC,那么就凭用户登录时输入的用户名和密码去缓存中校验,如果能联系上D…

如果在学习spring的时候没看过这份学习笔记+源码剖析,真的亏大了!

Spring 是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。包括在此基础上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等,在现在企业中的应用越来越广泛。因此对于 S…

YOLOv7移植经验分享

目录 一、背景 二、环境 2.1 服务器环境 2.2 SDK环境 2.3 docker环境 三、移植开发 3.1 模型迁移 3.2 算法迁移 四、部署 一、背景 YOLOv7在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器,并且在 GPU V100 上 30 FPS 或更高的所有…

python基于OCR深度学习实现商品配料表识别

1、概述 当前人民和国家对食品安全十分重视,但商家为了保证食品长时间储存,味道鲜美,在食品中添加超量或对人有严重危害得食品添加剂,严重危害到人民的安全,我们以方便面为例,一包方便面最多可有25种食品添…

十年开发老手,深度解析企业用人标准为何越来越高?!

涛哥作为一个10多年的开发老手,经历过很多场面试,也面试过很多人,这么多年下来,切身体会到企业的用人标准越来越高,企业对开发工程师的要求也越来越"过分"。所以涛哥今天就借此机会,我们一起来分…

如何制定有效的项目计划,提高团队执行力

项目风险来源有很多,项目日程紧张,导致质量下降风险上升;甲方变更,管理者对变动控制不足;项目太大。 虽然从来不可能完全消除项目风险,但可以将危害减到最小。 一、确认项目计划 项目计划是一个项目启动…

SpringBoot读取properties中配置的List集合

实体类 Data NoArgsConstructor AllArgsConstructor Accessors(chain true) public class Person {private String name;private String age;private String content; } Component//将该类交由Spring管理 ConfigurationProperties(prefix "project") //自定义.pro…

【附源码】计算机毕业设计JAVA演唱会购票系统

【附源码】计算机毕业设计JAVA演唱会购票系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA myba…

听我一句劝好吗?放下那些老掉牙的性能优化笔记吧!又不是没有新的,跟不上时代的学了也没法直接用呀!

性能概述 公司投入人力物力成本开发出的程序,如果出现程序瘫痪、界面停顿、抖动、响应迟缓等问题,会大大降低用户体验,损失大量用户。对于上述问题,都是需要性能调优来解决的问题。 程序性能主要表现在代码的执行速度、软件系统…