当前位置:   article > 正文

昇思25天学习打卡营第1天|基本介绍_昇思和cuda

昇思和cuda

1、昇思MindSpore介绍

  昇思是华为推出的一个深度学习框架。为华为昇腾AI全栈中的一个重要部分,其推出主要的目标为:易开发高效执行全场景统一部署。支持端(手机与IOT设备)、边(基站与路由设备)、云(服务器)场景不同系列硬件,如昇腾产品、英伟达NVIDIA产品、Arm高通骁龙、华为麒麟芯片等。目前市场上不同公司都在推出自己的深度学习框架,出了昇思之外还有百度的飞浆(PaddlePaddle),谷歌TensorFlow、facebook的Pytorch。本系列博客主要介绍华为内部的昇思深度学习框架的介绍以及使用。

1.1 昇思模块架构介绍

在这里插入图片描述

  • ModelZoo(模型库):ModelZoo提供可用的深度学习算法网络,也欢迎更多开发者贡献新的网络(ModelZoo地址)。
  • MindSpore Extend(扩展库):昇思MindSpore的领域扩展库,支持拓展新领域场景,如GNN/深度概率编程/强化学习等,期待更多开发者来一起贡献和构建。
  • MindSpore Science(科学计算):MindScience是基于昇思MindSpore融合架构打造的科学计算行业套件,包含了业界领先的数据集、基础模型、预置高精度模型和前后处理工具,加速了科学行业应用开发。
  • MindExpression(全场景统一API):基于Python的前端表达与编程接口,支持两个融合(函数/OOP编程范式融合、AI+数值计算表达融合)以及两个统一(动静表达统一、单机分布式表达统一)。
  • 第三方前端:支持第三方多语言前端表达,未来计划陆续提供C/C++等第三方前端的对接工作,引入更多的第三方生态。
  • MindSpore Data(数据处理层):提供高效的数据处理、常用数据集加载等功能和编程接口,支持用户灵活地定义处理注册和pipeline并行优化。
  • MindCompiler(AI编译器):图层的核心编译器,主要基于端云统一的MindIR实现三大功能,包括硬件无关的优化(类型推导、自动微分、表达式化简等)、硬件相关优化(自动并行、内存优化、图算融合、流水线执行等)、部署推理相关的优化(量化、剪枝等)。
  • MindRT(全场景运行时):昇思MindSpore的运行时系统,包含云侧主机侧运行时系统、端侧以及更小IoT的轻量化运行时系统。
  • MindSpore Insight(可视化调试调优工具):昇思MindSpore的可视化调试调优工具,能够可视化地查看训练过程、优化模型性能、调试精度问题、解释推理结果。
  • MindSpore Armour(安全增强库):面向企业级运用时,安全与隐私保护相关增强功能,如对抗鲁棒性、模型安全测试、差分隐私训练、隐私泄露风险评估、数据漂移检测等技术。

  所有算法和模型都托管在模型库ModelZoo中,模型库地址:https://gitee.com/mindspore/models
  全场景统一API 为什么叫全场景统一,是因为Expression 集成了端边云三个场景的API并且语法统一化,极大地方便了开发者使用,不同的应用场景下都可以做到一键部署。
  AI编译器:主要对我们编写的神经网络模型代码进行编译,编译成计算机可以识别的语言或者指令流。在这个过程中会做一些自动微分、自动并行,以及一些硬件无关的优化,算子融合硬件相关优化。还有推理部署优化。
  CANN(NPU)、CUDA(GPU)、Eign(CPU) oneDNN(CPU)为易购计算框架,可以承载硬件执行的算子和驱动。

“端”(手机与IOT设备) 是指边缘设备,如传感器、智能手机、摄像头等。这些设备可以收集到各种类型的数据,如图像、视频、音频、温度、湿度等。在边缘计算中,“端”是数据来源的地方,它能够实时处理和存储数据,并将数据传输到“边”和“云”中。
“边”(基站与路由设备) 是指边缘服务器,它是位于“端”和“云”之间的计算设备。边缘服务器能够对数据进行预处理、存储和处理,然后将处理后的数据传输到“云”中。边缘服务器通常部署在靠近数据来源的地方,能够更快地处理数据,提高数据处理效率。
“云”(服务器) 是指云计算,它是边缘计算的重要组成部分。云计算是指将数据和应用程序存储在远程服务器上,并通过互联网进行访问和操作。在边缘计算中,“云”是用于存储和处理“端”和“边”传输来的数据的地方。它可以对数据进行高级分析、机器学习和预测模型建立等操作,以便更好地应对不断变化的应用场景。

1.2 执行流程

MindSpore各个模块之间的整体配合关系如图所示:
在这里插入图片描述
  在处理流程中最重要的为模型的训练和验证模块也是MindSpore主体框架,即图片中的蓝色部分,主要提供神经网络在训练、验证过程中相关的基础API功能。
  MindSpore Data模块进行数据预处理,包括数据采样、数据迭代、数据格式转换等不同的数据操作。
  MindSpore Insight模块对loss曲线、算子执行情况、权重参数变量等调试调优相关的数据进行可视化,方便用户在训练过程中进行调试调优。
  MindSpore Armour模块,为MindSpore提供AI安全机制。如攻击者在训练阶段掺入恶意数据,影响AI模型推理能力,该模块为框架提供了约定的安全能力。
  蓝色方框往上的内容跟算法开发相关的用户更加贴近,包括存放大量的AI算法模型库ModelZoo,提供面向不同领域的开发工具套件MindSpore DevKit,另外还有高阶拓展库MindSpore Extend,这里面值得一提的就是MindSpore Extend中的科学计算套件MindSciences,MindSpore首次探索将科学计算与深度学习结合,将数值计算与深度学习相结合,通过深度学习来支持电磁仿真、药物分子仿真等等。
  神经网络模型训练完后,可以导出模型或者加载存放在MindSpore Hub中已经训练好的模型。接着有MindIR提供端云统一的IR格式,通过统一IR定义了网络的逻辑结构和算子的属性,将MindIR格式的模型文件 与硬件平台解耦,实现一次训练多次部署。因此如图所示,通过IR把模型导出到不同的模块执行推理。

1.3 设计理念

支持全场景统一部署

昇思MindSpore源于全产业的最佳实践,向数据科学家和算法工程师提供了统一的模型训练、推理和导出等接口,支持端、边、云等不同场景下的灵活部署,推动深度学习和科学计算等领域繁荣发展。

提供Python编程范式,简化AI编程

昇思MindSpore提供了Python编程范式,用户使用Python原生控制逻辑即可构建复杂的神经网络模型,AI编程变得简单。

提供动态图和静态图统一的编码方式

目前主流的深度学习框架的执行模式有两种,分别为静态图模式和动态图模式。静态图模式拥有较高的训练性能,但难以调试。动态图模式相较于静态图模式虽然易于调试,但难以高效执行。 昇思MindSpore提供了动态图和静态图统一的编码方式,大大增加了静态图和动态图的可兼容性,用户无需开发多套代码,仅变更一行代码便可切换动态图/静态图模式,用户可拥有更轻松的开发调试及性能体验。例如:
设置set_context(mode=PYNATIVE_MODE)可切换成动态图模式。
设置set_context(mode=GRAPH_MODE)可切换成静态图模式。

采用AI和科学计算融合编程,使用户聚焦于模型算法的数学原生表达

在友好支持AI模型训练推理编程的基础上,扩展支持灵活自动微分编程能力,支持对函数、控制流表达情况下的微分求导和各种如正向微分、高阶微分等高级微分能力的支持,用户可基于此实现科学计算常用的微分函数编程表达,从而支持AI和科学计算融合编程开发。

分布式训练原生

随着神经网络模型和数据集的规模不断增大,分布式并行训练成为了神经网络训练的常见做法,但分布式并行训练的策略选择和编写十分复杂,这严重制约着深度学习模型的训练效率,阻碍深度学习的发展。MindSpore统一了单机和分布式训练的编码方式,开发者无需编写复杂的分布式策略,在单机代码中添加少量代码即可实现分布式训练,提高神经网络训练效率,大大降低了AI开发门槛,使用户能够快速实现想要的模型。
例如设置set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL)便可自动建立代价模型,为用户选择一种较优的并行模式。

1.4 API层次结构

昇思MindSpore向用户提供了3个不同层次的API,支撑用户进行AI应用(算法/模型)开发,高级API提供了更好的封装性,低阶API具有更高的灵活性,其结构如下图所示。
在这里插入图片描述

  • 低阶API,主要包括张量定义、基础算子、自动微分等模块,用户可使用低阶API轻松实现张量定义和求导计算。例如用户可通过Tensor接口自定义张量,使用grad接口计算函数在指定处的导数。
  • 中阶API,其封装了低阶API,提供网络层、优化器、损失函数等模块,用户可通过中阶API灵活构建神经网络和控制执行流程,快速实现模型算法逻辑。例如用户可调用Cell接口构建神经网络模型和计算逻辑,通过使用Loss模块和Optimizer接口为神经网络模型添加损失函数和优化方式,利用Dataset模块对数据进行处理以供模型的训练和推导使用。
  • 高阶API,其在中阶API的基础上又提供了训练推理的管理、混合精度训练、调试调优等高级接口,方便用户控制整网的执行流程和实现神经网络的训练推理及调优。例如用户使用Model接口,指定要训练的神经网络模型和相关的训练设置,对神经网络模型进行训练。

2、华为昇腾AI介绍以及与昇思的关系

昇腾计算或者也称为昇腾AI,其包含了从底层硬件到顶层应用的全流程基础硬件及软件。包含昇腾Ascend系列芯片、Atlas系列硬件、CANN芯片使能、MindSpore AI框架、ModelArts、MindX应用使能等。昇腾AI全栈如下:
在这里插入图片描述
昇腾应用使能:华为各大产品线基于MindSpore提供的AI平台或服务能力
MindSpore:支持端、边、云独立的和协同的统一训练和推理框架
CANN:昇腾芯片使能、驱动层
计算资源:昇腾系列化IP、芯片和服务器

3、昇思的安装以及demo演示

3.1 安装

昇思版本:2.2.14
硬件平台:CPU
操作系统: Windows-x64
编程语言: Python 3.9
安装方式:Pip

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.2.14/MindSpore/cpu/x86_64/mindspore-2.2.14-cp39-cp39-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注意参考下方安装指南,添加运行所需的环境变量配置
  • 1
  • 2

更多其他系统硬件安装方式参考:
https://www.mindspore.cn/install/

3.2 demo演示

基于昇思框架的快速入门示例

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

输出:

[ 4. 10. 18.]
[ERROR] CORE(240,ffffb7bb4930,python):2024-07-13-06:51:31.616.630 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_240/1604708453.py]
  • 1
  • 2

3.3 day1 打卡

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/924249
推荐阅读
相关标签
  

闽ICP备14008679号