---
title: 模型下沉调度
description: "在AI模型运行中，通常需要CPU和AI专用处理器（如NPU，又称AI处理器）协同工作。CPU所在位置称为主机端（Host），而NPU所在位置称为设备端（Device）。主机端擅长处理复杂的逻辑计算，而设备端擅长进行高并行计算。通过高效的计算调度机制，实现Host和Device之间的高效协同是提高AI模型性能的关键，能够显著提升异构系统资源的利用率。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0087.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0087.html
indexId: f578c6277f3edf092a93833996f13b387924b5f877c49ebd370bb89750fcd1e270
---
# 模型下沉调度

#### 特性简介

在AI模型运行中，通常需要CPU和AI专用处理器（如NPU，又称AI处理器）协同工作。CPU所在位置称为主机端（Host），而NPU所在位置称为设备端（Device）。主机端擅长处理复杂的逻辑计算，而设备端擅长进行高并行计算。通过高效的计算调度机制，实现Host和Device之间的高效协同是提高AI模型性能的关键，能够显著提升异构系统资源的利用率。

Host CPU将模型中的算子依次下发到Device执行（如下图中的标号①所示），每一个算子在执行流上以1个或多个Task的形式存在，昇腾AI处理器依次拉取执行流上的Task执行。这种Host调度带来的问题是，需要Host和Device频繁交互，在实际的训练或推理场景中，模型会运行多次，每次运行都会触发Host把模型上的所有算子遍历下发一遍。

图1 Host调度示意图

对于输入tensor shape固定不变的静态shape的模型，在编译时即可确定所有算子的输入输出shape，结合昇腾内存复用算法，可完成模型级内存编排；静态shape模型在编译时还可提前完成所有算子的Tiling计算等Host侧计算。因此，GE提供了静态图下沉调度模式，让模型中的算子在加载阶段提前以整图的形式下发到Device上，在执行时，只需在Host侧下发一个模型执行的Task即可触发模型在Device上调度执行。相比于Host调度模式，下沉调度模式可大大降低Host侧调度开销，有效减少Host和Device之间的交互。

图2 静态图下沉调度示意图


#### 实现原理

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

- 模型加载：模型加载的具体动作和Host调度类似，即遍历图中的所有算子并将其整体下发至Device流上，区别在于下发到流上不立即执行。模型加载是一次性的动作，在首次模型执行时完成模型加载，如上图中的过程1所示。
- 模型执行：模型加载完成之后，可以像下发单算子Task一样，向执行流下发一个模型执行Task，昇腾AI处理器调度到该Task时（如上图 “执行流”中的E），执行模型中所有Task（如上图中的过程3）。如果需要多次运行模型，仅需多次下发模型执行Task，如上图中的过程2所示。

Host Bound调度和模型下沉调度的时序比较如下图所示，可以看出模型下沉执行的开始有一个模型下发的头开销，模型下沉执行E2E会有一个相对于Host调度的收益，模型的下沉头开销越小，性能提升幅度将越大。模型下沉调度Host/Device时序分析如下所示：


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