深度解读昇腾CANN多流并行技术,提高硬件资源利用率

news2024/11/20 0:23:26

随着人工智能应用日益成熟,文本、图片、音频、视频等非结构化数据的处理需求呈指数级增长,数据处理过程从通用计算逐步向异构计算过渡。面对多样化的计算需求,昇腾AI处理器内置丰富的硬件计算资源用于处理不同的计算任务。其中,AI Core、Vector Core与AI CPU分别负责AI计算场景下的矩阵、向量与标量计算,DVPP支持图像、视频等数据的加速处理,而HCCL作为华为集合通信库,则提供单机多卡及多机多卡间的数据并行、模型并行集合通信方案。

在给定硬件算力的情况下,如何高效利用这些计算资源、提高计算效率显得尤其重要。多样化的计算任务以task的形式下发到各硬件资源执行,GE(Graph Engine)图引擎采用多流并行算法,在满足计算图任务内部依赖关系的前提下,支持高效并发执行计算任务,从而大大提高硬件资源利用率和AI计算效率。 

 1 多流并行技术实现

计算图编译时,GE会为计算图中的每个节点分配一个硬件资源(即对应一种执行引擎),在任务执行时按编译时分配的stream调度顺序下发到对应的引擎执行。

各引擎使用不同的硬件计算资源,若同一时间只能执行某种引擎的一个task,则其余引擎会处于闲置状态,导致硬件资源严重浪费,影响端到端性能。若采用多流并行技术,在满足依赖关系的前提下,将不同task下发到对应的引擎上,驱动各个引擎并行执行,则可大大提升硬件资源的利用率。

GE采用了多流并行算法,将计算图的拓扑结构、硬件资源规格和执行引擎作为计算要素,为每个节点分配Stream。Stream与硬件资源绑定,任务执行时会按编译时分配的stream调度顺序下发到对应的引擎执行。同一Stream上的任务串行执行,不同Stream间的任务并发执行,从而提升硬件计算资源利用率。

GE多流并行技术的实现流程如下:

  1. 1、基于网络节点功能和硬件资源特性,给每个节点分配执行引擎。
  2. 2、基于网络拓扑结构和每个节点的执行引擎,为每个节点分配Stream。分配Stream时会同时考虑硬件规格、资源利用率等,提升并发度。
  3. 3、不同Stream间可以进行同步来保证执行时序。

GE多流并行主要包含以下场景:
(1)计算与通信引擎并行:计算算子(如Convolution、Add等)会生成计算task,通信算子(HcomAllReduce等)会生成卡间通信task,两类task无拓扑依赖时可并发执行。

(2)不同计算引擎并行:矩阵运算(AI Core)、向量运算(Vector Core)和图像预处理(DVPP)等不同引擎的task,可下发到不同的引擎上并发执行。

(3)相同计算引擎内并行:当计算图中某个节点无法占满一个计算引擎的全部计算资源,且拓扑结构可并发时,该引擎的不同拓扑集合的task可并发执行。

 

2 多流并行执行效果

并行执行效果跟网络拓扑结构、节点引擎类型、AI处理器能力等因素存在相关性,理论最优并行场景下,整网执行时长为耗时最长的Stream的执行时长,其余Stream的执行时长都掩盖在该Stream的时长内。如下图所示,通信耗时可以掩盖在计算耗时内,向量计算耗时可以掩盖在矩阵运算耗时内。

基于Atlas 800I A2推理产品,在经过计算通信流水并行优化后,LLaMA-65B参数模型全量图执行性能提升30%左右,盘古系列71B参数模型全量图执行性能提升15%左右。

然而,多流并行是一种资源换执行效率的技术,会占用更多的Device流资源,一般来说,静态shape场景下开启多流并行后,内存占用增加7%左右,用户可结合实际情况选择使用。

3 如何使能多流并行技术

GE的多流并行技术是基于深度学习计算图模式下的计算优化手段,在静态shape的离线推理场景和Pytorch框架的计算图模式下默认使能多流并行技术,开发者可通过相应的参数enable_single_stream灵活控制。

import torchair as tng

config = tng.CompilerConfig()

# 关闭图单流执行功能

config.ge_config.enable_single_stream = False

# 开启计算通信并行功能

config.experimental_config.cc_parallel_enable = True

npu_backend = tng.get_npu_backend(compiler_config=config)

...

model = Model()

model = torch.compile(model, backend=npu_backend, dynamic=False)

4 获取学习资源

GE多流并行技术的介绍就到这里,欢迎大家关注后续技术分享。如需获取更多学习资源请登录昇腾社区。

往期推荐:《深度解读昇腾CANN计算图优化技术,提升算法计算效率》

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

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

相关文章

6.基于SpringBoot的SSMP整合案例-业务层开发

目录 1.业务层标准开发 1.1接口定义 1.2实现类定义 1.3测试类定义 1.4小结: 2.业务层快速开发 2.1使用MyBatisP1us提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl),t> 接口定义: 实现类定义: 2.2在通用类基础上做功…

springboot实验报告管理系统-计算机毕业设计源码10596

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

思维模型:看透本质的思维框架,和它组合个个是王炸(非常详细)零基础入门到精通, 收藏这一篇就够了

为什么要从「为什么」开始? 如何想到又做到,提高行动力? 知行合一的途径?有用的工具? 剧透一下,读完本篇,你会收获一些王炸组合。 01 黄金思维圈 Why→How→What 黄金思维圈是西蒙斯涅克…

EF code first约定 Fluent API、数据特性

EF code First 约定 ● 关于ID的约定(主键约定):类型中以ID命名的或者命名以ID结尾的,如ID或PostID。如果类型为数字或者GUID那么将会被认为是Identity列。   ● 关于类关系的约定(表之间的外键约定):使用导航属性(既该属性是另一个实体类…

Linux 安装 Redis 教程

优质博文:IT-BLOG-CN 一、准备工作 配置gcc:安装Redis前需要配置gcc: yum install gcc如果配置gcc出现依赖包问题,在安装时提示需要的依赖包版本和本地版本不一致,本地版本过高,出现如下问题&#xff1a…

【Linux】线程周边002之线程安全

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.Linux线程互斥 1…

明星中药企业系列洞察(八)解题!仲景宛西制药如何奋力打造百亿级大健康产业?

近日,仲景宛西制药携六味地黄丸、逍遥丸等经典产品亮相第 88 届全国药品交易会。从最初的百泉药交会、樟树药交会,到郑州全国药品交易会,再到今年(2024 年)上海药交会,仲景宛西制药在品牌塑造,产…

Nature:使用语义熵检测大语言模型中的幻觉

使用语义熵检测大语言模型中的幻觉 Detecting hallucinations in large language models using semantic entropy 论文阅读摘要研究目标论文图表概述总结关键解决方案语义熵计算:虚构内容检测: 双向蕴涵在大语言模型中的应用上下文的重要性蕴涵估计器 实验设计语义熵计算步骤结…

【CT】LeetCode手撕—1143. 最长公共子序列

目录 题目1- 思路2- 实现⭐1143. 最长公共子序列——题解思路 3- ACM 实现 题目 原题连接:1143. 最长公共子序列 1- 思路 模式识别:最长公共子序列——> 动规五部曲 2- 实现 ⭐1143. 最长公共子序列——题解思路 class Solution {public int longe…

Android14之RRO资源文件替换策略(二百二十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

Python 获取字典中的值(八种方法)

Python 字典(dictionary)是一种可变容器模型,可以存储任意数量的任意类型的数据。字典通常用于存储键值对,每个元素由一个键(key)和一个值(value)组成,键和值之间用冒号分隔。 以下是 Python 字典取值的几…

vite项目如何在本地启动https协议

vite项目如何在本地启动https协议 本地启动正常配置在vite.config.js文件中默认启动http协议的请求,如何改成https呢?今天的开发中遇到了这个问题项目需求: 本地启动https协议的前端页面并且正常访问后台https协议的接口 解决方法&#xff1a…

微尺度气象数值模拟—WRF-LES大涡模拟;NDOWN工具使用;PALM编译、运行;PALM静态数据预备

针对微尺度气象的复杂性,大涡模拟(LES)提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟,这些过程往往与天气模式、地形影响和人为因素如城市布局紧密相关。在这种规模上,传统的气象模…

名企面试必问30题(十二)——简单介绍一下你的家庭情况

1.思路 对于面试官来说,他提出这个问题,只是为了深挖您的性格、稳定性、行事风格,包括未来定居规划、生育规划等基础信息,这是正常情况。您不要过多围绕其他家庭成员来讲,否则面试官无法获取他想要的,您也难…

新手第一个漏洞复现:MS17-010(永恒之蓝)

文章目录 漏洞原理漏洞影响范围复现环境复现步骤 漏洞原理 漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt在处理FEA(File Extended Attributes)转换时。该函数在将FEA list转换成NTFEA(Windows NT FEA)list前&am…

2024新版大屏互动微信上墙源码大屏互动神器年会婚庆微现场3D签到

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码,可以用来构建具有互动功能的大屏幕系统,为活动现场提供各种互动体验。 修复版的系统源码在原有功能的基础上,增加了更加完善的用户体验和稳…

【SGX系列教程】(二)第一个 SGX 程序: HelloWorld,linux下运行

文章目录 0. SGX基础原理分析一.准备工作1.1 前提条件1.2 SGX IDE1.3 基本原理 二.程序设计2.1 目录结构2.2 源码设计2.2.1 Encalve/Enclave.edl:Enclave Description Language2.2.2 Enclave/Enclave.lds: Enclave linker script2.2.3 Enclave/Enclave.config.xml: Enclave 配置…

深入理解Java核心技术模块化局部变量类型推断

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Python计算n的阶乘的多种方法

1 问题 在课上,我们学习了用递归函数去计算一个自然数n的阶乘。但计算一个自然数n的阶乘是否就这一种方法呢? 2 方法 关于计算一个自然数n的阶乘,通过搜索,我们寻找到了除运用递归函数外的其他三种方法: 方法一 通过导…

【PyQt5】一文向您详细介绍 QLineEdit() 的作用

【PyQt5】一文向您详细介绍 QLineEdit() 的作用 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&…