深度解读昇腾CANN模型下沉技术,提升模型调度性能

news2024/11/13 19:11:16

AI模型的运行通常情况下需要CPU和NPU(昇腾AI处理器)等AI专用处理器协同工作,CPU所在位置称为主机端(Host),而NPU所在位置称为设备端(Device)。对于采用Host调度的AI模型来说,Host下发Task的时序和Device执行Task的时序是异步的,如果Device执行Task的速度比Host下发Task的速度快,则Device会处于空闲状态。比如,大模型场景的增量推理或训练的FineTune阶段,都是计算量较小的场景,此时很容易出现单个算子的Host下发时间比Device上的算子执行时间还长,从而导致Device间歇处于空闲状态。这种现象通常称为Host Bound,这种模型也称为Host Bound模型。

如何减少Host Bound模型的Device空闲时间,从而优化模型执行性能显得尤其重要,GE(Graph Engine)图引擎通过图模式的Host调度和模型下沉调度的方式,可提升模型调度性能,缩短模型E2E执行时间。

模型Host调度

Host CPU将模型中的算子依次下发到Device执行(如下图中的标号①所示),每一个算子在执行流上以1个或多个Task的形式存在,昇腾AI处理器依次拉取执行流上的Task执行(如下图中的标号②所示),我们称这个过程为Host调度。Host调度需要Host和Device频繁交互,在实际的训练或推理场景中,模型会运行多次,每次运行都会触发Host把模型上的所有算子遍历下发一遍。

图1 Host调度

Device Bound与Host Bound

如果Device上Task执行速度比Host下发慢,则Device上Task调度开销和算子执行时间成为瓶颈,这种模型通常称为Device Bound模型,如图2所示。Device Bound的模型,Task的下发开销会被已下发Task的执行时间掩盖起来。

    

图2 Host调度场景Device Bound执行时序分析

如果Device上Task执行速度比Host下发快,则Host调度开销成为瓶颈,这种模型通常被称为Host Bound模型,如图3所示。Host Bound的模型,Task的下发开销不能完全被已下发Task的执行时间掩盖,Device执行时序上存在间歇的空闲状态。 

图3 Host调度场景Host Bound执行时序分析

单算子模式Host调度与图模式Host调度

在前面几期介绍中,我们知道当前业界主流的深度学习框架提供了Eager执行(Eager Execution,即时执行)模式与图执行模式。Eager模式也叫单算子模式,它是一种Host调度模式,由Host CPU逐个下发算子,一个算子的下发流程包含Python处理、Python到C++数据结构转换、Tiling计算,申请算子的Workspace内存和输出内存,Launch等Host操作。为了加速单算子Host调度,在PyTorch中,昇腾适配层采用了生产者—消费者双线程模式加速,生产者线程主要负责Launch之前的处理动作,消费者线程主要负责Launch算子。

相比于单算子模式,图模式的Host调度可以避免总是返回Python调用栈,避免冗余流程与数据结构转换,并且可以直接使用图编译阶段完成的Infer Shape与Tiling计算结果。因此,图模式Host单线程调度与单算子模式Host双线程调度相比,调度性能持平或略优。

模型下沉调度

图模式调度可以降低Host侧的调度耗时,并一定程度减少模型执行E2E耗时,但如何降低Device上执行时序的空闲时间仍是需要考虑的问题。对于静态shape模型,昇腾支持下沉调度,可大幅优化Host调度性能。

所谓静态shape模型,是指模型每次执行的输入tensor shape是固定不变的,模型中的所有算子,给定输入shape后,都可以确定自己的输出shape,那么该模型为静态shape模型。

静态shape模型在编译时即可确定所有算子的输入输出shape,结合昇腾内存复用算法,可完成模型级内存编排;静态shape模型在编译时还可提前完成所有算子的Tiling计算等Host侧计算。综上,静态shape模型可以在编译时完成所有执行时的Host调度工作,这是静态shape模型下沉调度的理论基础。

下沉调度原理

模型下沉调度分为两个阶段,模型加载和模型执行。

图4 模型下沉示意图

  • 模型加载

模型加载的具体动作和Host调度类似,即遍历图中的所有算子并将其整体下发至Device流上,区别在于下发到流上不立即执行。模型加载是一次性的动作,在首次模型执行时完成模型加载,如图4中的过程①所示。

  • 模型执行

模型加载完成之后,可以像下发单算子Task一样,向执行流下发一个模型执行Task,昇腾AI处理器调度到该Task时(如图4 “执行流”中的E),执行模型中所有Task(如图4中的过程③)。如果需要多次运行模型,仅需多次下发模型执行Task,如图4中的过程②所示。

Host Bound调度和模型下沉调度的时序比较如图5所示,可以看出模型下沉执行的开始有一个模型下发的头开销,模型下沉执行E2E会有一个相对于Host调度的收益,模型的下沉头开销越小,收益将越大。

图5 模型下沉调度Host/Device时序分析

每次模型下发时,支持更新模型的Feature Map内存地址和输入输出内存地址,如果模型的Feature Map内存和模型输入输出内存发生了更新,则在模型下沉头开销(即上图中的m_l_t,后文有介绍)中会完成模型内算子相关地址的刷新。

下沉效果

模型下沉执行存在如下优势:

  • 减少CPU的负载

对于模型下沉执行的方式,执行时不需要Host和Device频繁交互,调度的开销仅包含模型下沉的头开销和Task从流上调度到加速器上的开销。总的来说,模型下沉执行的方式,Host CPU的负载降低了,在一定程度上整机、集群的功耗也会降低。

  • 减少Rank之间的通信抖动

对于Host调度执行方式,集群场景下由于不同卡上的Host下发时序不一定完全同步,卡间集合通信可能存在一定程度上的抖动。而下沉执行方式则不存在该问题,因为Task已提前排布到Device上。

  • 提升E2E的收益

由于Task已提前下沉到了Device,对于Host Bound的模型,E2E会有性能提升。以Host Bound的LLaMA-7B模型的推理场景为例,图6是Host调度的Profiling性能数据,图7是模型下沉执行的Profiling性能数据。通过Profiling结果可以看出该模型是一个Host Bound模型,采用Host调度方式,Device上计算时间和空隙的时间比例接近1:1,采用模型下沉执行方式,Device空隙大幅减少,并且端到端有18ms的收益,吞吐量整体提升37%。

图6 LLaMA-7B Decoding Host调度Profiling

图7 LLaMA-7B Decoding模型下沉Profiling

下沉头开销

下沉执行头开销包括以下几部分:

1、模型输入输出Tensor到内部InputData/OutputData数据结构转换。如图8中的stage1_t。

2、如果模型的Feature Map内存和模型输入输出内存有变更,刷新相关联算子的相关地址。如图8中的stage2_t。

3、如果模型的输入不支持零拷贝,(如模型的输入为Host内存),则下发异步拷贝Task。如图8中的stage3_t。

4、下发模型执行Task。如图8中的stage4_t。

图8 模型下沉头开销拆分

以盘古71B增量推理模型为例(模型输入输出总个数约1600个,模型内节点总数约6300个,模型运行时,Feature Map内存地址不变更,10个输入输出内存地址变更),当前模型下沉的头开销约2ms,关于头开销的性能优化在持续进行中。

更多介绍

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

往期推荐:

《深度解读昇腾CANN计算图优化技术,提升整网执行效率》

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

《深度解读昇腾CANN内存复用技术,降低网络内存占用》

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

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

相关文章

金蝶云星空与金蝶云星空对接集成付款单查询打通[标准][付款单新增]-v1

金蝶云星空与金蝶云星空对接集成付款单查询打通[标准][付款单新增]-v1 对接源平台:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用…

vitest 单元测试应用与配置

vitest 应用与配置 一、简介 Vitest 旨在将自己定位为 Vite 项目的首选测试框架,即使对于不使用 Vite 的项目也是一个可靠的替代方案。它本身也兼容一些Jest的API用法。 二、安装vitest // npm npm install -D vitest // yarn yarn add -D vitest // pnpm pnpm …

CoT-SC论文速读

1.论文速读 本文提出了一个重要的Decoder策略为:“Self-Consistency”,并将其用在CoT的Prompt工作中。 该策略作用:让LLM在处理复杂问题时,让他尝试多个推理路径,每一个推理路径都是一次CoT(Chain of Thought&#x…

构建实用的NLP应用程序:重塑人类与计算机的协同工作方式

文章目录 一、NLP技术的核心价值二、构建实用NLP应用程序的关键步骤三、NLP应用程序在协同工作中的创新应用《赠ChatGPT中文范例的自然语言处理入门书》编辑推荐内容简介作者简介精彩书评目录前言/序言获取方式 在数字化时代,自然语言处理(NLP&#xff0…

哥德巴赫猜想c++

方法一 #include<bits/stdc.h> using namespace std; //定义函数&#xff0c;判断素数 bool sushu(int n){bool rtrue;//先假设是素数&#xff0c;即真//循环因子范围&#xff0c;找到一个因子就不是素数for(int i2;i<sqrt(n);i){//判断2~n的根号是否素数if(n%i0){//…

码住!热门且创新idea:GNN+强化学习!

如何提高学习效率、优化策略&#xff0c;并解决复杂的图结构相关问题&#xff1f;或许你可以考虑&#xff1a;GNN强化学习。 GNN结合强化学习是当前的热门创新方向&#xff0c;它通过利用GNN在图形数据上的强大表示能力与强化学习在决策制定中的优势&#xff0c;不仅能够有效处…

鸿蒙语言基础类库:【@ohos.uitest (UiTest)】 测试

UiTest UiTest提供模拟UI操作的能力&#xff0c;供开发者在测试场景使用&#xff0c;主要支持如点击、双击、长按、滑动等UI操作能力。 该模块提供以下功能&#xff1a; [By]&#xff1a;提供控件特征描述能力&#xff0c;用于控件筛选匹配查找。[UiComponent]&#xff1a;代…

中电金信:成功的智慧运营转型,重点是把握“一个基本点和两大主线”

“运营”是银行不可或缺的基础职能&#xff0c;负责产品的服务交付过程和业务的落地处理&#xff0c;解决商业模式下“怎么做”的问题。纵观全球领先银行的运营转型历程&#xff0c;已从传统分散运营逐步转向集中运营、共享运营&#xff0c;乃至价值创造。从国内银行运营转型发…

微信小程序毕业设计-青少年科普教学系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

基于SpringBoot协同过滤算法商品推荐系统(源码+lw+部署文档+讲解等)

前言&#xff1a; 博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBo…

C++面试问题

C基础 什么是野指针&#xff1f; 指向未分配或已释放内存的指针。比如未初始化、delete后未指向空、保存了局部变量的地址 怎么解决野指针问题&#xff1f; 使用智能指针释放后置空指针初始化避免返回局部变量的地址 C空类会创造那些函数&#xff1f; 默认构造析构函数拷…

【qt】TCP客户端如何断开连接?

disconnectFromHost() 来关闭套接字,断开连接. 当我们关闭窗口时,也需要断开连接. 需要重写关闭事件 如果当前的套接字状态是连接上的,我们就可以来断开连接. 运行结果:

空安全编程的典范:Java 8中的安全应用指南

文章目录 一、Base64 编码解码1.1 基本的编码和解码1.2 URL 和文件名安全的编码解码器1.3 MIME Base64编码和解码 二、Optional类三、Nashorn JavaScript 一、Base64 编码解码 1.1 基本的编码和解码 Base64 编码&#xff1a; 使用 Base64.getEncoder().encodeToString(origin…

vue3 快速入门 (一) : 环境配置与搭建

1. 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 2. 安装Node.Js 首先&#xff0c;我们需要安装Node.Js。Node.js提供了运行 JavaScript 代码的环境。并且Node.js 带来了 npm&#xff0c;它是JavaScript世界的包管理工具。开发vue时&…

苹果手机相册图片怎么转换成jpg而不会降低质量

在苹果设备的世界里&#xff0c;随着 iOS 11 的推出&#xff0c;苹果引入了一种新的图像格式 - 高效图像编码&#xff08;High Efficiency Image Format, HEIF&#xff09;。当用户在 iPhone 或 iPad 上拍摄照片时&#xff0c;默认情况下&#xff0c;这些设备会保存图片为 HEIC…

软件测试——web单功能测试

工作职责&#xff1a; 1.负责产品系统测试&#xff0c;包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写&#xff0c;包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求&#xff1a; 1.熟练…

达梦数据库系列—28. 主备集群高可用测试

目录 监视器关闭 监视器启动&#xff0c;Detach备库 主备正常&#xff0c;手动switchover 主库故障&#xff0c;自动switchover 主库故障&#xff0c;手动Takeover 主库故障&#xff0c;备库强制takeover 主库重启 备库故障 公网连接异常 主库私网异常 备库私网异常…

uniapp打包成Android时,使用uni.chooseLocation在App端显示的地址列表是空白?一直转圈的解决办法

问题描述&#xff1a; uniapp打包后的测试版app在ios里可以显示高德地图的定位列表&#xff0c;但是安卓手机却不显示定位列表&#xff0c;一直在转圈圈&#xff0c;怎么回事&#xff1f;之前的功能在正式版都能用&#xff0c;真机运行也能用&#xff0c;为什么测试版的安卓手…

【数智化案例展】某省会城市——轨道交通线网云平台建设

‍ 逸迅科技案例 本项目案例由逸迅科技投递并参与数据猿与上海大数据联盟联合推出的《2024中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 本项目将打造一个先进的线网指挥中心大数据平台&#xff0c;它将作为这座城市轨道…