AI QoS差异化调度特性说明
1 技术背景
面向AI大模型训练,普遍采用混合并行方式进行分布式训练,以MoE大模型为例,采用TP(张量并行)、EP(专家并行)、DP(数据并行)、PP(流水线并行)的混合并行策略。并行策略的流量在超节点内通过UB网络进行NPU与NPU之间的(D2D)通信。
在不同的模型切分以及模型配置下,超节点内存在不同类型的流量冲突,包括D2D(如TP、EP)流量之间,以及H2D流量(如Swap)与D2D流量之间,如图1所示,在UB Switch处,会产生incast网络冲突,产生网络拥塞,影响整体通信性能。

图1 不同类型流量的流量冲突
由于不同流量对于算效发挥的贡献不同,某些通信流量可以通过上层相关机制实现较好的通算掩盖,如H2D的Swap流量或D2D的DP流量等,但某些流量难以掩盖或掩盖程度较低,因此可以针对不同类型流量进行差异化QoS调度,以实现算效最优的QoS映射。
不同类型流量产生冲突时,在UB Switch处,可以采用虚拟通道(VL)方式进行流量隔离,并在VL间进行差异化调度,实现:
1)不同类型流量间的VL隔离,避免拥塞扩散
2)不同流量间的差异化调度

如图2所示,将不同类型流量映射至不同的VL,实现流量隔离的目的,并设置不同VL的优先级,采用SP方式(Strict Priority)进行调度,则不同类型流量同时达到UB Switch时,会优先将高优先级VL调度排空后,再调度下一级队列,依此类推,以达到不同类型流量差异化调度的目的。
2 方案介绍
结合以上背景,本特性提供一种AI QoS差异化调度方案,实现:
1)不同类型的流量映射至不同VL;
2)VL间进行差异化调度,从而实现提高整体算效的目的。
特性提供两种类型使能方式:
1)自动模式,AI QoS通过感知AI大模型训练的流量类型、通信域、通信量以及算效贡献等,设计了一种算效优先的优先级映射与调度算法,并实现不同类型流量冲突度最小的VL映射以及算效优先的差异化QoS调度
2)手动模式,用户可手工指定不同类型并行策略的QoS优先级,AI QoS按照用户手工指定的优先级,经过多层传递与QoS语义映射,将任务级的QoS语义转换为UB协议QoS语义,在UB报文中设置QoS值,并映射至UB Switch的相应VL,在VL间进行差异化调度。手动模式支持Low/Middle/High三档位的QoS优先级。
注:H2D流量由于底层能力,只支持通道级整体QoS优先级,暂不支持算子级QoS优先级,即仅支持H2D流量与D2D等其他流量区分QoS优先级,不支持同为H2D流量的不同算子间的QoS优先级区分。
方案整体架构如图3所示:

D2D流量以并行策略为粒度,在创建Group时向torch_npu进行QoS标记下发,并经过CANN传递至NPU,最终按报文格式封装至UB报文中。H2D流量仅支持按通道级粒度进行全局QoS优先级设置(不包含算子下发的H2D流量),暂不支持算子粒度H2D流量的QoS优先级设置
灵衢网络UB Switch已预置QoS模板,包括QoS值至VL的映射关系以及VL间的调度策略,且支持开放QoS配置模板,用户可通过配置模板人工指定QoS值至VL的映射关系以及VL间的调度策略
3 使用方法
3.1 自动模式
训练脚本中添加:
--aiqos # AI QoS特性开关
--aiqos-mode auto # 配置AI QoS模式为自动模式
自动模式当前支持TP PP DP EP CP典型并行策略
3.2 手动模式
训练脚本中添加:
--aiqos #AI QoS特性开关
--aiqos-mode manual #配置AI QoS模式为手动模式
--aiqos-schedule {tp:high,pp:middle,dp:low} # 配置不同并行策略的QoS优先级
如上例所示,TP优先级设置为高,PP优先级设置为中,DP优先级设置为低。
手动模式当前支持dp、dp-cp、intra-dp-cp、inter-dp-cp、cp、mp、tp、pp、embd、pos-embd、tp-dp-cp、tp-dp、tp-cp、ep、ep-tp、tp-ep-mp、tp-ep-pp、ep-dp、hcp并行策略
4 关于DCMI接口的使用说明
4.1 DCMI接口使用原理介绍
使用目的:A3代际NPU采用一种QoS融合策略以实现总线域NPU的QoS功能,该策略通过将控制面QoS值(通过DCMI接口下发的mpam QoS)与随路下发的细粒度QoS值(通过训练脚本下发的随路QoS)进行融合得到最终的QoS值。AI QoS特性通过调用DCMI接口以确保NPU最终接受的QoS值为AI QoS特性自动/手动模式指定的随路QoS值。此外,本接口还用于下发H2D/D2H流量的QoS值。
原理介绍:指定融合策略为取控制面QoS值与随路QoS值的最大值,并通过设置mpam QoS的水线使mpam QoS低于随路QoS,从而使融合策略最终生成的QoS值为随路QoS。
参数说明(fusion_qos):fusion_qos中bw_low为水线下限,bw_high为水线上限,target为mpamid值,只能为0,hardlimit为0,表示不对带宽进行硬件限制。
参数说明(set_h2d_qos):set_h2d_qos用于调整H2D流量的qos值,qos值参数与灵衢交换网络配套,支持低优先级和中优先级,对应的灵衢网络qos值为2, 4。mpamid取值为0-31,bitmap默认值为[0x1, 0, 0, 0],表示H2D流量所在的流量通道。
4.2 so编译方法
进入mindspeed/ops/csrc/qos目录下,手动编译pybind11,修改目录下CMakeLists.txt中pybind11_install_dir为pybind11安装目录,执行如下命令,会在output目录下生成SO:
mkdir build
cd build
cmake ..
make -j
4.3 so使用实例
import aiQos
CARD_ID_LIST = [0, 1, 2, 3, 4, 5, 6, 7]
DEVICE_ID_LIST = [0, 1]
def fusion_qos(bw_low=10, bw_high=50, target=0, hardlimit=0):
"""
Set MPAM QoS bandwidth limit
Parameters:
bw_low (int): Minimum bandwidth, default value 10
bw_high (int): Maximum bandwidth, default value 50
target (int): Target bandwidth, default value 0
hardlimit (int): Hard bandwidth limit, default value 0
"""
aiQos.init()
for card_id in CARD_ID_LIST:
for device_id in DEVICE_ID_LIST:
aiQos.set_gbl_qos(card_id=card_id, device_id=device_id, mode=1)
aiQos.set_bw(
target=target,
bw_low=bw_low,
bw_high=bw_high,
hardlimit=hardlimit,
card_id=card_id,
device_id=device_id
)
def set_h2d_qos(qos, mpamid, bitmap=[0x1, 0, 0, 0]):
"""
Set QoS (Quality of Service) parameters for H2D (Host to Device) direction
Parameters:
qos (str): QoS level (required, string only)
- Only supports "low" (mapped to 2) and "middle" (mapped to 4)
- No integer values are allowed
mpamid (int): MPAM (Memory Partitioning and Monitoring) ID (required, no default value)
Range: 0-31 (MPAM ID is a hardware resource identifier; values outside this range throw ValueError)
bitmap (list): Bitmap parameter for QoS configuration, default value [0x1, 0, 0, 0]
Format: List of 4 integers, each element represents QoS control bits for different dimensions
Raises:
ValueError: 1. mpamid out of 0-31 range; 2. QoS string not "low"/"middle"
TypeError: 1. mpamid not integer; 2. QoS not string type
RuntimeError: Failed to initialize QoS module or apply QoS configuration
"""
if not isinstance(mpamid, int):
raise TypeError(f"mpamid must be an integer (0-31). Got type: {type(mpamid).__name__}")
if mpamid < 0 or mpamid > 31:
raise ValueError(f"mpamid must be between 0 and 31. Got: {mpamid}")
if not isinstance(qos, str):
raise TypeError(f"QoS must be a string ('low'/'middle'). Got type: {type(qos).__name__}")
qos_lower = qos.lower()
if qos_lower == "low":
qos_numeric = 2
print(f"Info: Mapped QoS string '{qos}' to numeric value {qos_numeric}")
elif qos_lower == "middle":
qos_numeric = 4
print(f"Info: Mapped QoS string '{qos}' to numeric value {qos_numeric}")
else:
raise ValueError(f"QoS string only supports 'low' or 'middle'. Got: '{qos}'")
try:
aiQos.init()
for card_id in CARD_ID_LIST:
for device_id in DEVICE_ID_LIST:
aiQos.set_gbl_qos(card_id=card_id, device_id=device_id, mode=1)
aiQos.set_h2d_qos(
card_id=card_id,
device_id=device_id,
mpamid=mpamid,
qos=qos_numeric,
bitmap=bitmap
)
except Exception as e:
raise RuntimeError(f"Failed to configure H2D QoS: {str(e)}") from e
fusion_qos()
set_h2d_qos('low', 20)
5 使用场景与版本配套
AI QoS特性支持Atlas 800T A3超节点服务器及Atlas 900 A3 SuperPoD集群,需以下软件版本配套:
| 软件 | 配套版本 |
|---|---|
| torch_npu | 7.3.RC1* |
| CANN | CANN 8.6* |
| UB Switch | LingQu Computing Network 1.6.0* |
*预计配套版本,具体版本待相关组件正式发布后进行更新