AI QoS特性#

背景#

​在推理场景中,存在不同类型的流量,如算子下发、集合通信和KVCache。这些流量通过网络传输并相互影响,增加了推理时延。

​例如,在Agentic AI时代,随着上下文长度不断增加,KVCache的大小也逐渐增长。为节省HBM使用,采用将KVCache卸载到DDR的方法来提升推理TPS。同时,为最大化计算资源利用率,通常采用计算掩盖KVCache的流水线编排方法。该方法在当前层的计算/通信期间预取下一层的KVCache以减少总体时延。然而,这种方法引入了KVCache与算子下发/集合通信之间的流量冲突问题,导致推理时延增加并影响SLO。

替代文本

​如上图所示,当节点内设备到设备(D2D)流量、节点内主机到设备(H2D)流量和节点间D2D流量传输时,UB交换机上会发生流量冲突。

简介#

​当不同类型的流量相互冲突时,可以使用虚拟通道(VL)在UB交换机上隔离流量,并在VL之间执行差异化调度。这有助于:(1)隔离不同类型流量的VL以防止拥塞扩散;(2)对不同类型流量执行差异化调度。

​如下图所示,不同类型的流量被映射到不同的VL以隔离流量。此外,设置每个VL的优先级并使用严格优先级(SP)调度模式。当不同类型的流量同时到达UB交换机时,首先调度高优先级VL中的流量,然后调度中优先级VL中的流量。此过程重复直到所有流量被调度完毕。通过这种方式,实现了对不同类型流量的差异化调度。

替代文本

​不同流量通过不同通道传输。因此,AI QoS解决方案通过以下方式实现不同流量的隔离和差异化调度以满足业务需求:(1)在主机上为不同NPU通道设置优先级,(2)建立NPU通道优先级与UB交换机VL之间的映射关系,(3)基于优先级在UB交换机的不同VL之间执行差异化调度。

构建AI QoS模块#

在使用tools/ai_qos.py之前,请先构建并安装AI QoS扩展。DSMI包含/库路径取决于环境。请先定位您机器上的路径,然后替换命令中的YOUR_DSMI_INCLUDE_DIRYOUR_DSMI_LIBRARY_FILE(例如/usr/local/Ascend/driver/include/usr/local/Ascend/driver/lib64/driver/libdrvdsmi_host.so)。

在大多数部署中,这些命令在容器内执行。创建容器时,请确保DSMI头文件/库目录已挂载到容器文件系统中;否则CMake无法找到这些文件。

从vLLM-Ascend仓库根目录运行以下命令:

cmake -S tools/ai_qos -B tools/ai_qos/build \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=${PWD}/vllm_ascend \
  -DDSMI_INCLUDE_DIR=YOUR_DSMI_INCLUDE_DIR \
  -DDSMI_LIBRARY=YOUR_DSMI_LIBRARY_FILE
cmake --build tools/ai_qos/build -j
cmake --install tools/ai_qos/build

使用说明#

​AI QoS特性支持两种模式:自动和手动。进入vLLM-Ascend安装目录,在运行推理任务前执行以下命令:

​1)自动模式:

​ python tools/ai_qos.py

​AI QoS自动模式自动分类不同类型流量的优先级并生成QoS标签。同时打印UB交换机配置。您可以复制输出并登录UB交换机配置QoS配置。此配置将覆盖UB交换机上当前的QoS配置。如果存在任何现有QoS配置,请提前备份。

​2)手动模式:

​ python tools/ai_qos.py --mode manual --AIV_D2D {priority} --AIV_H2D {priority} --SDMA_D2D {priority} --SDMA_H2D {priority} --PCIEDMA_H2D {priority}

​AI QoS手动模式根据用户设置的不同类型流量的优先级计算流量的QoS标签,并生成和打印UB交换机配置。您可以复制输出并登录UB交换机配置QoS配置。此配置将覆盖UB交换机上当前的QoS配置。如果存在任何现有QoS配置,请提前备份。

​在手动模式下,您可以指定仅一种类型流量的优先级。参数说明如下:

名称

类型

默认值

描述

mode

str

auto

AI QoS的模式,默认模式为"auto",另一种模式为"manual",如果选择"manual"模式则需要配置一些参数。

qos_manual_config

/

AIV_D2D: high,
AIV_H2D: high,
SDMA_D2D: high,
SDMA_H2D: low,
PCIEDMA_H2D: high

"manual"模式的参数,决定不同类型流量的QoS优先级。
默认配置与"auto"模式相同。
典型流量类型如下供参考:AIV_D2D:基于AIV的设备到设备通信,如dispatch和combine。
AIV_H2D:基于AIV的算子下发。
SDMA_D2D:基于SDMA的设备到设备通信,如Allreduce和Allgather。
SDMA_H2D:基于SDMA的主机到设备/设备到主机通信,如KVCache卸载和预取。
PCIEDMA_H2D:基于PCIEDMA的算子下发。
您可以更改不同类型流量的优先级,提供"high/middle/low"选项。由于硬件限制,"PCIEDMA_H2D"仅支持"high/low"优先级。

​如何禁用AI QoS:

​ python tools/ai_qos.py unset

​禁用UB交换机上AI QoS特性的命令将打印在屏幕上。请登录UB交换机并执行屏幕上打印的命令以完成特性禁用。

使用约束#

​由于底层驱动限制,AIV_H2D和AIV_D2D的QoS配置当前不生效。一旦未来驱动版本中添加了所需的适配能力,此特性将通过模块升级交付。

​AI QoS特性支持Atlas 800T A3服务器和Atlas 900 A3 SuperPoD集群。必须在特权容器中使用,并需要以下软件版本:

软件

匹配版本

Ascend HDK

25.5.2及以上版本

UB交换机

LingQu Computing Network 1.5.1及以上版本