CPU 绑定#
概述#
CPU 绑定是 vLLM 的一项性能优化功能,专为配备 ARM 架构和昇腾 NPU 的服务器设计。它将 vLLM 进程和线程固定到特定的 CPU 核心,以减少 CPU-NPU 跨 NUMA 通信开销并稳定推理延迟。此功能仅调整主机端的 CPU 亲和性策略,不会改变模型执行逻辑或影响推理结果。
使用方法#
启用 CPU 绑定的在线服务示例(默认)#
vllm serve Qwen/Qwen2.5-7B-Instruct \
--additional-config '{"enable_cpu_binding": true}'
禁用 CPU 绑定的在线服务示例#
vllm serve Qwen/Qwen2.5-7B-Instruct \
--additional-config '{"enable_cpu_binding": false}'
启用 CPU 绑定的离线推理示例#
from vllm import LLM
llm = LLM(
model="Qwen/Qwen2.5-7B-Instruct",
additional_config={"enable_cpu_binding": True},
)
禁用 CPU 绑定的离线推理示例#
from vllm import LLM
llm = LLM(
model="Qwen/Qwen2.5-7B-Instruct",
additional_config={"enable_cpu_binding": False},
)
依赖项#
安装#
Ubuntu/Debian#
sudo apt-get update
sudo apt-get install -y util-linux numactl procps
RHEL/CentOS/Alma/Rocky#
sudo yum install -y util-linux numactl procps-ng
openEuler#
sudo dnf install -y util-linux numactl procps-ng
IRQ 绑定的额外注意事项#
为获得最佳效果,如果您在 Docker 容器内运行(容器内可能没有 systemctl),请在启动 vLLM 前手动在主机上停止 irqbalance 服务。同时确保容器具有写入 /proc/irq/*/smp_affinity 以进行 IRQ 绑定所需的权限:
停止
irqbalance服务:For example, on Ubuntu and other systemd-based Linux distributions, you can stop irqbalance with:
sudo systemctl stop irqbalance
完成 vLLM 进程后,您可以在主机上恢复 irqbalance:
sudo systemctl start irqbalance
Note: On systems that do not use systemd, use the corresponding service-management command provided by the distribution.
权限:
对
/proc/self/status和/proc/interrupts的读取权限对
/proc/irq/*/smp_affinity的写入权限(用于 IRQ 绑定)
常见问题与故障排除#
错误/警告信息 |
核心原因 |
解决方案 |
|---|---|---|
无法获取运行的 NPU 信息。 |
npu-smi 进程表为空,或者 |
1. Ensure the process is running on visible NPUs; 2. Verify that the |
用于绑定的 CPU 不足... |
分配给每个 NPU 的 CPU 核心数少于最低要求 5 个。 |
1. Expand the allowed CPU list; 2. Reduce the number of visible NPUs. |
未找到 NPU 拓扑亲和性... |
npu-smi 无法检索 NPU 拓扑亲和性信息。 |
验证 npu-smi 安装的完整性,并确保用户具有足够的执行权限。 |
在 rankX 中绑定 CPU 失败... |
CPU 绑定过程失败(例如,taskset 不可用,或用户缺少对 /proc/irq 的写入权限)。 |
1. Confirm that required tools (taskset, lscpu, npu-smi) are installed and available; 2. Verify the Cpus_allowed_list in |
主要限制#
仅限 ARM 架构:在 x86_64 系统上会自动跳过绑定。
需要对称的 NUMA 布局以获得最佳性能:CPU 编号应与 NUMA 节点对齐。非对称布局可能导致跨 NUMA 的 CPU 池,降低局部性。
IRQ 绑定需要对 /proc/irq 的写入权限。内存绑定依赖于
migratepages工具;如果不可用,则跳过内存迁移。
常见问题解答#
Q1: CPU 绑定在 x86_64 上有效吗?
否。在非 ARM CPU 上会跳过绑定。
Q2: 为什么只绑定当前 rank 的 IRQ?
为了避免多个进程覆盖同一设备的 IRQ 亲和性设置。
Q3: 如果我的 cpuset 已经限制了 CPU 怎么办?
绑定器使用来自 /proc/self/status 的 Cpus_allowed_list 作为唯一符合条件的 CPU 集合。请确保此列表足够大。
Q4: CPU 绑定会改变模型输出吗?
不会。它只影响主机端的亲和性,不应改变数值结果。
总结#
核心目标:通过将 vLLM 进程和线程固定到特定的 CPU 核心来减少跨 NUMA 通信,从而稳定昇腾 NPU 部署中的推理延迟(仅适用于 ARM 架构)。
使用方法:在在线和离线工作流中,通过
additional_config中的enable_cpu_binding参数启用或禁用。主要限制:仅限 ARM;依赖于对称的 NUMA 布局;如果 CPU 池少于 5 个核心,绑定会失败;绑定错误会触发警告日志但不会终止进程。