**测试日期**:2026-06-06 ~ 2026-06-07
**测试人员**:系统运维团队
**硬件环境**:华为 Atlas 800T A2 服务器,8 × Ascend 910B4(64GB HBM2e)
**软件环境**:CANN 8.5.1 / vLLM-Ascend 0.18.0rc1 / Python 3.11 / Ubuntu 22.04
**报告版本**:V1.0(8卡NUMA绑定部署版)

一、测试背景与目标

1.1 背景

本次测试基于华为昇腾 Atlas 800T A2 服务器(8 × 910B4 NPU,每卡64GB HBM),针对 Qwen3.6-27B-W8A8 模型进行多卡部署验证。与之前单卡32G 910B4测试(该环境下27B W8A8模型因显存不足无法运行)不同,本次64G显存环境为27B模型单卡部署提供了充足空间,核心目标是在8卡环境下实现最优的并行推理架构。

1.2 测试目标

  1. 完成8卡910B4 NUMA亲和性绑定部署,最大化CPU-NPU协同效率
  2. 验证Qwen3.6-27B-W8A8在单卡64G环境下的加载与推理稳定性
  3. 对比Nginx least_conn与round_robin负载均衡算法在长推理场景的表现
  4. 实现工具调用(Function Calling)和Reasoning内容分离的支持
  5. 记录8卡并行压测下的吞吐量、延迟及NUMA绑定收益

二、环境搭建过程

2.1 硬件确认

项目

规格

服务器型号

华为 Atlas 800T A2

NPU型号

昇腾910B4 × 8

单卡显存

64GB HBM2e(实际可用约65.5GB)

CPU

AMD EPYC 7542 × 2(32核/颗,共64核/128线程)

NUMA架构

NPS1(2个NUMA节点,每节点32核)

2.2 软件栈安装

2.2.1 CANN与驱动安装

安装CANN Toolkit 8.5.1、910B算子库、NNAL加速库及NPU驱动固件:

# CANN Toolkit
./Ascend-cann-toolkit_8.5.1_linux-x86_64.run --full
./Ascend-cann-910b-ops_8.5.1_linux-x86_64.run --install
./Ascend-cann-nnal_8.5.1_linux-x86_64.run --install

# NPU驱动固件
sudo ./Ascend-hdk-910b-npu-driver_25.5.2_linux-x86-64.run --full --install-for-all
sudo ./Ascend-hdk-910b-npu-firmware_7.8.0.7.220.run --full

# 验证
npu-smi info

2.2.2 vLLM-Ascend安装

# 创建虚拟环境
python3.11 -m venv /data/vllm-ascend-env
source /data/vllm-ascend-env/bin/activate

# PyTorch + torch-npu
pip install torch==2.9.0+cpu torchvision==0.24.0+cpu torchaudio==2.9.0+cpu
pip install torch-npu==2.9.0

# vLLM 0.18.0+empty(源码安装,禁用CUDA编译)
git init && git add . && git commit -m "init" && git tag v0.18.0
export VLLM_TARGET_DEVICE=empty
pip install --no-build-isolation .

# vLLM-Ascend
pip install vllm-ascend==0.18.0rc1

# 关键依赖修复
pip install numpy==1.26.4 opencv-python-headless==4.11.0.86 fastapi==0.136.3
pip install triton-ascend==3.2.0.dev20260322
pip uninstall -y cupy-cuda12x xformers

三、NUMA拓扑研究与绑定策略

3.1 NPU互联拓扑分析

通过 npu-smi info -t topo 查看NPU与CPU的PCIe亲和性:

$ npu-smi info -t topo
           NPU0       NPU1       NPU2       NPU3       NPU4       NPU5       NPU6       NPU7       CPU Affinity
NPU0       X          PHB        PHB        PHB        SYS        SYS        SYS        SYS        0-31,64-95
NPU1       PHB        X          PHB        PHB        SYS        SYS        SYS        SYS        0-31,64-95
NPU2       PHB        PHB        X          PHB        SYS        SYS        SYS        SYS        0-31,64-95
NPU3       PHB        PHB        PHB        X          SYS        SYS        SYS        SYS        0-31,64-95
NPU4       SYS        SYS        SYS        SYS        X          PHB        PHB        PHB        32-63,96-127
NPU5       SYS        SYS        SYS        SYS        PHB        X          PHB        PHB        32-63,96-127
NPU6       SYS        SYS        SYS        SYS        PHB        PHB        X          PHB        32-63,96-127
NPU7       SYS        SYS        SYS        SYS        PHB        PHB        PHB        X          32-63,96-127

关键发现:NPU0-3通过PHB(PCIe Host Bridge)互联,归属CPU0/NUMA0;NPU4-7归属CPU1/NUMA1。跨组通信需经过SYS路径(Infinity Fabric),存在额外延迟。

3.2 NUMA绑定策略

采用 numactl 将每个vLLM实例绑定到与其NPU同NUMA的CPU核心,避免跨NUMA内存访问:

服务

NPU

NUMA节点

numactl参数

vllm-910b-8000

NPU0

NUMA0

--cpunodebind=0 --membind=0

vllm-910b-8001

NPU1

NUMA0

--cpunodebind=0 --membind=0

vllm-910b-8002

NPU2

NUMA0

--cpunodebind=0 --membind=0

vllm-910b-8003

NPU3

NUMA0

--cpunodebind=0 --membind=0

vllm-910b-8004

NPU4

NUMA1

--cpunodebind=1 --membind=1

vllm-910b-8005

NPU5

NUMA1

--cpunodebind=1 --membind=1

vllm-910b-8006

NPU6

NUMA1

--cpunodebind=1 --membind=1

vllm-910b-8007

NPU7

NUMA1

--cpunodebind=1 --membind=1

四、8卡部署详情

4.1 部署架构

采用 "8独立实例 + Nginx负载均衡" 架构,每卡运行一个独立的vLLM服务,Nginx作为统一入口:

架构模式

8 × 单卡实例(非Tensor Parallel)

负载均衡

Nginx round_robin + keepalive

对外端口

2198

API认证

Bearer sk-qwen-27b-w8a8-2026

4.2 vLLM启动参数(单实例)

numactl --cpunodebind=0 --membind=0   vllm serve /data/models/Qwen3.6-27B-w8a8     --served-model-name qwen3.6-27b-w8a8     --tensor-parallel-size 1     --port 8000     --enforce-eager     --quantization ascend     --dtype bfloat16     --max-model-len 262144     --gpu-memory-utilization 0.95     --enable-auto-tool-choice     --tool-call-parser qwen3_xml     --reasoning-parser qwen3     --enable-prefix-caching

4.3 关键参数说明

参数

设置值

说明

--enforce-eager

启用

禁用图编译,规避910B算子缺失问题

--quantization

ascend

W8A8昇腾专用量化

--max-model-len

262144

最大上下文26万tokens

--gpu-memory-utilization

0.95

NPU HBM利用率上限

--tool-call-parser

qwen3_xml

Qwen3 XML格式工具调用解析

--reasoning-parser

qwen3

思考内容与最终答案分离

--enable-prefix-caching

启用

重复prompt加速,降低首token延迟

numactl绑定

NUMA0/1

CPU-NPU亲和性绑定

五、压测结果与分析

5.1 单卡基准性能

在NUMA绑定环境下,单卡推理64 tokens的延迟约4.4秒:

$ time curl -s http://localhost:8000/v1/chat completions   -H "Authorization: Bearer sk-qwen-27b-w8a8-2026"   -d '{"model":"qwen3.6-27b-w8a8","messages":[{"role":"user","content":"请用50字介绍自己"}],"max_tokens":64}'

real    0m3.96s
user    0m0.003s
sys     0m0.008s

5.2 8卡并行压测

使用 ab 工具同时压测8个实例,验证NUMA绑定后的并发性能:

# 8终端同时执行
ab -n 20 -c 2 -T "application/json"   -H "Authorization: Bearer sk-qwen-27b-w8a8-2026"   -p /tmp/bench.json -s 60   http://localhost:800X/v1/chat/completions

端口

NPU

吞吐(req/s)

平均延迟(s)

8000

NPU0

0.43

4.70

8001

NPU1

0.42

4.73

8002

NPU2

0.42

4.71

8003

NPU3

0.43

4.67

8004

NPU4

0.43

4.69

8005

NPU5

0.42

4.76

8006

NPU6

0.42

4.72

8007

NPU7

0.42

4.77

8卡总吞吐:3.39 req/s(接近单卡0.42 × 8 = 3.36的理论值)

5.3 Nginx统一入口压测

通过Nginx 2198端口进行负载均衡压测:

$ ab -n 160 -c 16 -T "application/json"   -H "Authorization: Bearer sk-qwen-27b-w8a8-2026"   -p /tmp/bench.json -s 120   http://10.255.254.64:2198/v1/chat/completions

Requests per second:    3.28 [#/sec] (mean)
Time per request:       4882.133 [ms] (mean)
50%   4412
90%   4667
95%   4783

结论:Nginx round_robin + keepalive 配置下,8卡利用率均匀,总吞吐3.28 req/s,与直接压测8卡(3.39 req/s)差距仅3%,转发开销极小。

六、关键问题与解决方案

序号

问题描述

发生场景

解决方案

状态

1

libatb.so缺失,EngineCore子进程崩溃

venv环境启动

将LD_LIBRARY_PATH持久化到activate脚本

✅ 解决

2

NPU拓扑NUMA亲和性未知

多卡部署前

npu-smi info -t topo + lscpu分析

✅ 解决

3

工具调用解析器qwen3不支持

添加--tool-call-parser qwen3

改为qwen3_xml(vLLM 0.18.0支持)

✅ 解决

4

KV Cache不足(gpu-util=0.85)

8000启动

统一gpu-util为0.95

✅ 解决

5

Nginx least_conn负载不均

Nginx统一入口压测

改为round_robin + keepalive

✅ 解决

6

Nginx对外端口2189错误

实际业务需求

修正为2198

✅ 解决

7

--host参数限制localhost访问

curl localhost:8000失败

去掉--host,恢复默认0.0.0.0

✅ 解决

8

max-model-len不统一

原始配置混乱

全部统一为262144

✅ 解决

6.1 NUMA绑定核心经验

1. 必须先用 npu-smi info -t topo 确认NPU与CPU的PCIe亲和性,再决定numactl绑定策略。

2. vLLM的EngineCore子进程不继承shell环境变量,numactl必须在ExecStart中直接调用。

3. NUMA 0的32核支撑4个实例无压力,8卡并行时单卡性能衰减<3%。

6.2 Nginx负载均衡优化

vLLM推理请求属于长连接/长请求(~4.5秒),least_conn算法在长请求场景下表现不佳(连接粘滞)。round_robin强制均匀分发,配合keepalive减少连接建立开销。

七、结论与建议

7.1 核心结论

  1. 8卡910B4(64G)环境下,Qwen3.6-27B-W8A8单卡部署完全可行,每卡加载约60GB HBM,剩余空间用于KV Cache
  2. NUMA亲和性绑定(numactl)是关键优化手段,8卡并行时性能衰减<3%,几乎线性扩展
  3. vLLM-Ascend 0.18.0在NPU上仅支持 ascend(W8A8)量化,FP8/AWQ仍被显式禁用
  4. Nginx round_robin + keepalive 是长推理请求场景的最优负载均衡策略
  5. 工具调用(qwen3_xml)和Reasoning解析(qwen3)已完整支持并验证通过

7.2 最终部署状态

8个vLLM服务

全部 active (running)

8张NPU负载

均 ~60GB HBM占用

端口监听

8000-8007, 2198

Nginx状态

active,round_robin负载均衡

开机自启

8个vLLM + Nginx 全部 enabled

单卡吞吐

~0.42 req/s(64 tokens,~4.4s)

8卡总吞吐

~3.3 req/s

工具调用

✅ 支持(qwen3_xml)

Reasoning分离

✅ 支持(qwen3)

Prefix Caching

✅ 已启用

7.3 后续建议

短期:监控NPU温度和AICore利用率,配置告警;部署logrotate防止日志膨胀。

中期:尝试开启Continuous Batching进一步优化吞吐;评估是否启用图编译(需解决算子缺失)。

长期:跟踪vLLM-Ascend社区,等待FP8/AWQ NPU支持;探索更大模型(72B/110B)的PP+TP混合并行。

附录

A. Systemd服务模板

[Unit]
Description=vLLM Qwen3.6-27B-W8A8 on NPU${DEV} (NUMA${NUMA})
After=network.target

[Service]
Type=simple
User=hmtsgpu
Environment="ASCEND_RT_VISIBLE_DEVICES=${DEV}"
Environment="VLLM_API_KEY=sk-qwen-27b-w8a8-2026"
Environment="OMP_NUM_THREADS=8"
ExecStart=/bin/bash -c 'source ... && numactl --cpunodebind=${NUMA} --membind=${NUMA}   vllm serve /data/models/Qwen3.6-27B-w8a8 ...'
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

B. Nginx配置

upstream vllm_backend {
    server 10.255.254.64:8000;
    ...
    server 10.255.254.64:8007;
    keepalive 64;
}
server {
    listen 2198;
    location /v1/ {
        proxy_pass http://vllm_backend;
        proxy_http_version 1.1;
        proxy_read_timeout 300s;
    }
}

C. 工具调用测试示例

curl -s http://10.255.254.64:2198/v1/chat/completions   -H "Authorization: Bearer sk-qwen-27b-w8a8-2026"   -d '{
    "model": "qwen3.6-27b-w8a8",
    "messages": [{"role": "user", "content": "北京今天天气怎么样"}],
    "tools": [...],
    "max_tokens": 256
  }'

# 返回:finish_reason: tool_calls, 参数正确

D. 监控命令

# NPU实时状态
watch -n 2 'npu-smi info | grep -E "NPU|AICore|Power"'

# 服务状态
systemctl status vllm-910b-800{0..7}

# 端口监听
ss -tlnp | grep -E "800[0-7]|2198"



报告编制:系统运维团队
审核日期:2026-06-07

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐