首页 > 其他分享 >昇思MindSpore进阶教程--下沉模式

昇思MindSpore进阶教程--下沉模式

时间:2024-10-01 12:19:01浏览次数:9  
标签:进阶 迭代 -- 下沉 Host sink Device 数据 MindSpore

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧

正文开始

昇腾芯片集成了AICORE和AICPU等计算单元。其中AICORE负责稠密Tensor和Vector运算,AICPU负责复杂控制逻辑的处理。

为充分发挥昇腾芯片的运算、逻辑控制和任务分发能力,MindSpore提供了数据图下沉、图下沉和循环下沉功能,极大地减少Host-Device交互开销,有效地提升训练与推理的性能。MindSpore的计算图包含网络算子以及算子间的依赖关系。

从用户的视角来看,网络训练的流程如下:
在这里插入图片描述
本教程以训练的执行流程为例介绍数据下沉、图下沉和循环下沉的原理和使用方法。

数据下沉

为了提升网络的执行性能,通常使用专用芯片来执行算子,一个芯片对应一个Device,Host与Device的一般交互流程如下:
在这里插入图片描述
由上图可见,每个训练迭代都需要从Host拷贝数据到Device,可通过数据下沉消除Host和Device间拷贝输入数据的开销。

使能数据下沉后,MindSpore会在Device侧创建专门的数据缓存队列,MindSpore数据处理引擎使用高性能数据通道将数据的预处理结果发送到Device的数据队列上,计算图通过GetNext算子直接从数据队列拷贝输入数据,Host向数据队列发送数据和计算图从数据队列读取数据形成流水并行,执行当前迭代的同时可向数据队列发送下一个迭代的数据,从而隐藏了Host-Device数据拷贝的开销,MindSpore高性能数据处理引擎的原理参考这里。

GPU后端和昇腾后端都支持数据下沉,GPU数据下沉的Host-Device交互流程如下:
在这里插入图片描述
用户可通过train接口的dataset_sink_mode控制是否使能数据下沉。

图下沉

一般情况下,每个训练迭代都需要下发并触发device上每个算子的执行,Host与Device交互频繁。

为减少Host与Device的交互,在图编译时,将网络中的算子打包并一起下发到device,每次迭代只触发一次计算图的执行即可,从而提升网络的执行效率。
在这里插入图片描述
GPU后端暂不支持图下沉;使用昇腾设备时,开启数据下沉会同时启用图下沉。

循环下沉

启用数据下沉和图下沉后,每个迭代的计算结果都会返回Host,并由Host判断是否需要进入下一个迭代,为减少每个迭代的Device-Host交互,可以将进入下一个迭代的循环判断下沉到Device,这样等所有迭代执行完成后再将计算结果返回到Host。循环下沉的Host-Device交互流程如下:

在这里插入图片描述
用户通过train接口的dataset_sink_mode和sink_size参数控制每个epoch的下沉迭代数量,Device侧连续执行sink_size个迭代后才返回到Host。

使用方法

Model.train实现数据下沉
Model的train接口参数dataset_sink_mode可以控制数据是否下沉。dataset_sink_mode为True表示数据下沉,否则为非下沉。所谓下沉即数据通过通道直接传送到Device上。

dataset_sink_mode参数可以配合sink_size控制每个epoch下沉的数据量大小。当dataset_sink_mode设置为True,即数据下沉模式时:

如果sink_size为默认值-1,则每一个epoch训练整个数据集,理想状态下下沉数据的速度快于硬件计算的速度,保证处理数据的耗时隐藏于网络计算时间内;

如果sink_size>0,此时原始数据集可以被无限次遍历,下沉数据流程仍与sink_size=-1相同,不同点是每个epoch仅训练sink_size大小的数据量,如果有LossMonitor,那么会训练sink_size大小的数据量就打印一次loss值,下一个epoch继续从上次遍历的结束位置继续遍历。

下沉的总数据量由epoch和sink_size两个变量共同控制,即总数据量=epoch*sink_size。

当使用LossMonitor、TimeMonitor或其它Callback接口时,如果dataset_sink_mode设置为False,Host侧和Device侧之间每个step交互一次,所以会每个step返回一个结果,如果dataset_sink_mode为True,因为数据在Device上通过通道传输,Host侧和Device侧之间每个epoch进行一次数据交互,所以每个epoch只返回一次结果。

标签:进阶,迭代,--,下沉,Host,sink,Device,数据,MindSpore
From: https://blog.csdn.net/weixin_42553583/article/details/142669079

相关文章

  • 第四章 CSS样式基础
    4.1CSS概述4.1.1CSS的基本概念CSS中文释义为“层叠样式表”,它是以HTML为基础,设置网页的外观显示样式,如字体、颜色、背景的控制及整体的布局等,还可以针对不同的浏览器设置不同的样式4.1.2传统HTML的缺点1.维护困难:为了修改某个特殊标记的格式,需要花费很多时间,尤其是对......
  • 系统找不到gepdit.msc的解决方法
    关于gpedit.msc文件打不开,Windows说找不到该文件,主要原因是Windows系统版本家庭版不具备这个功能。1.点击最上面的查看然后在文件扩展名前面打钩2.然后在桌面空白处右击新建文本文档3.把下面代码全选复制粘贴进去保存4.在点击这个文件夹修改后缀把.txt修改成......
  • 实验1
    任务一#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");printf("O\n");printf("<H>\n");printf("II\n");return......
  • System.out.printf
    程序示例:importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){System.out.print("请输入你的名字:");Scannerin=newScanner(System.in);Stringname=in.nextLine();System.out.print(&......
  • 值班离岗智能识别监测系统
    值班离岗智能识别监测系统通过AI视频分析技术,值班离岗智能识别监测系统能自动检测画面中人员的岗位状态(睡岗或者离岗),一旦发现工作时间人员不在岗位的时间超出后台设置时间,值班离岗智能识别监测系统便会立即抓拍存档报警,同步将违规信息传送至后台平台。值班离岗智能识别监测系统对......
  • ai安全帽识别检测
    ai安全帽识别检测通过AI视频智能分析技术,ai安全帽识别检测对现场摄像头的视频流智能分析,ai安全帽识别检测自动对现场人员是否佩戴安全帽进行识别检测,一旦发现现场工地施工人员没有按要求佩戴安全帽,ai安全帽识别检测系统自动进行预警并保存图像到本地同步提示后台值班人员及时处理......
  • Google AlphaChip改变了计算机芯片设计
      每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https://......
  • 初识C语言
    C语言人机交互的一门语言 一刚发明计算机时人们普遍用着二进制语言也就是0和1的组合,那时的人们要编程,要翻书对应其数字0和1代表的意义,后来人们将一些常见的0和1写成助记符于是就形成了汇编语言,然而汇编语言仍然不够省事,于是人们苦思冥想,想出了编译器这一转折性的app,人们......
  • Linux 部署Zookeeper集群详解
    Zookeeper是一个分布式协调服务,它可以用来解决分布式系统中的很多问题,如配置管理、分布式锁、集群管理等。以下是如何在Linux环境下部署Zookeeper集群的详细步骤,以及Zookeeper集群的工作原理和选举原理。Zookeeper集群工作原理Zookeeper集群由一个领导者(Leader)和多个跟随......
  • MySql学习笔记:什么是数据库?
    数据库的概念:         数据库(Database),简而言之可视为数字化的文件柜,是一个长期储存在计算机内有组织的、统一管理的数据集合,用于存储和管理大量相关信息。        数据库是一个按数据的结构来存储和管理数据的计算机系统,也就是说,数据库通常有两方面含义:......