跳转至

AI QoS 功能

背景

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

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

alt text

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

简介

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

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

alt text

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

构建 AI QoS 模块

在运行 python -m tools.ai_qos 之前,请构建并安装 AI QoS 扩展。 DSMI 头文件(dsmi_common_interface.h)和库文件(libdrvdsmi_host.so)的路径取决于环境。请先在本机上找到这些路径,然后替换命令中的 YOUR_DSMI_INCLUDE_DIR 和 YOUR_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 功能支持两种模式:自动(Auto)和手动(Manual)。在运行推理任务之前,请进入 vLLM-Ascend 安装目录并运行以下命令:

1) 自动模式

python -m tools.ai_qos

AI QoS 自动模式会自动划分不同类型流量的优先级,并生成 QoS 标签。它还会打印 UB 交换机配置。您可以复制输出内容,登录 UB 交换机以配置 UB 交换机的 QoS 配置。该配置将覆盖 UB 交换机上当前的 QoS 配置。如果已存在 QoS 配置,请提前备份。

2) 手动模式

python -m tools.ai_qos --mode manual --AIV {priority} --SDMA {priority} --PCIEDMA {priority}

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

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

名称 类型 默认值 描述
mode str auto AI QoS 的模式,默认模式为 "auto",另一种模式为 "manual"。如果选择 "manual" 模式,需要配置部分参数。
AIV、SDMA、PCIEDMA str AIV: high,
SDMA: low,
PCIEDMA: high
用于 "manual" 模式的参数,用于确定不同类型流量的 QoS 优先级。
默认配置与 "auto" 模式相同。
AIV 涵盖基于 AIV 的设备到设备(D2D)通信,例如 dispatch 和 combine,以及基于 AIV 的算子下发。
SDMA 涵盖基于 SDMA 的设备到设备(D2D)通信,例如 Allreduce 和 Allgather,以及主机到设备/设备到主机(H2D/D2H)通信,例如 KVCache 卸载和预取。
PCIEDMA 涵盖基于 PCIe DMA 的算子下发。
这三个参数均支持 "high/middle/low"。
名称 类型 默认值 描述

如何禁用 AI QoS:

python -m tools.ai_qos unset

禁用 UB Switch 上 AI QoS 功能的命令将打印在屏幕上。请登录 UB Switch 并执行屏幕上打印的命令,以完成功能禁用。

使用限制

由于底层驱动限制,AIV 的 QoS 配置当前不生效。待未来驱动版本增加所需的适配能力后,该功能将通过模块升级提供。

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

软件 匹配版本
Ascend HDK 25.5.2 或更高版本
UB Switch LingQu Computing Network 1.5.1 或更高版本

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend