Qwen3 Next 在 TensorRT LLM 上的部署指南

简介: 本指南介绍如何在TensorRT LLM框架上部署Qwen3-Next-80B-A3B-Thinking模型,基于默认配置实现快速部署。涵盖环境准备、Docker容器启动、服务器配置与性能测试,支持BF16精度及MoE模型优化,适用于NVIDIA Hopper/Blackwell架构GPU。

本指南详细说明了如何在 TensorRT LLM 框架上部署 Qwen3-Next 模型。内容基于经验证的默认配置,帮助快速完成部署流程。进阶性能调优和扩展特性将在后续更新中提供。

前置条件

在开始之前,请确保你的环境满足以下条件:

  • GPU:NVIDIA Blackwell 或 Hopper 架构的 GPU 显卡
  • 操作系统:Linux(暂不支持 Windows)
  • CUDA 驱动:版本 575 或更高
  • Docker:需要安装 NVIDIA 容器工具包
  • Python 环境:Python3 和 pip(可选,用于精度评估)

模型准备

本指南使用以下模型版本:

部署步骤

步骤 1:启动 Docker 容器

构建并启动 Docker 容器,为后续部署准备运行环境。

cd TensorRT-LLM

make -C docker release_build IMAGE_TAG=qwen3-next-local

make -C docker release_run IMAGE_NAME=tensorrt_llm IMAGE_TAG=qwen3-next-local LOCAL_USER=1

步骤 2:配置服务器参数

创建配置文件 /tmp/config.yml,用于配置 TensorRT LLM 服务器的运行参数:

EXTRA_LLM_API_FILE=/tmp/config.yml

cat << EOF > ${EXTRA_LLM_API_FILE}
enable_attention_dp: false
cuda_graph_config:
  enable_padding: true
  max_batch_size: 720
moe_config:
    backend: TRTLLM
stream_interval: 20
num_postprocess_workers: 4
kv_cache_config:
    enable_block_reuse: false
    free_gpu_memory_fraction: 0.6
EOF

步骤 3:启动服务器

执行以下命令启动加载 Qwen3-Next 模型的 TensorRT LLM 服务器:

trtllm-serve Qwen/Qwen3-Next-80B-A3B-Thinking \
    --host 0.0.0.0 \
    --port 8000 \
    --max_batch_size 16 \
    --max_num_tokens 4096 \
    --tp_size 4 \
    --pp_size 1 \
    --ep_size 4 \
    --trust_remote_code \
    --extra_llm_api_options ${EXTRA_LLM_API_FILE}

服务器启动完成后即可开始发送请求。

配置参数说明

以下为 trtllm-serve 命令的主要参数说明:

--tp_size(张量并行度)

指定用于模型推理的 GPU 数量。通常设置为可用 GPU 的数量。

--ep_size(专家并行度)

用于 MoE(混合专家)模型的并行度设置,通常与可用 GPU 数量相同。对于非 MoE 模型,此参数无效。

--kv_cache_free_gpu_memory_fraction(KV 缓存内存占比)

控制为 KV 缓存保留的显存比例,取值范围为 0 到 1。设置缓冲区可避免内存溢出。

注意:若发生显存溢出(OOM),可尝试将此值降低至 0.7 或更小。

--max_batch_size(最大批处理大小)

单次推理的最大批处理请求数。实际批处理大小还受单个请求长度(输入+输出)的影响。

--max_num_tokens(最大 Token 数)

单次批处理中所有请求的最大总 Token 数。

--max_seq_len(最大序列长度)

单个请求的最大 Token 长度(输入+输出)。该参数通常由系统根据模型配置自动推断,一般无需手动设置。

--trust_remote_code(信任远程代码)

启用此参数允许 TensorRT LLM 从 Hugging Face 下载模型和分词器文件。

YAML 配置文件中的高级选项

YAML 配置文件允许进行更细致的性能调优。通过 --extra_llm_api_options 参数传递给服务器:

cuda_graph_config(CUDA 图优化)

CUDA 图配置用于性能优化:

  • enable_padding:启用后输入自动填充至指定批处理大小,可显著提升性能。默认为 false,建议启用。

  • max_batch_size:CUDA 图的最大批处理大小,默认为 0(禁用)。建议与命令行参数 --max_batch_size 保持一致。

moe_config(MoE 模型配置)

MoE 模型的相关配置:

  • backend:MoE 运算的后端实现,默认为 CUTLASS

更多高级配置选项详见 TorchLlmArgs 类说明

服务器测试

健康检查

运行以下命令检查服务器是否就绪:

curl -s -o /dev/null -w "Status: %{http_code}\n" "http://localhost:8000/health"

返回 Status: 200 表示服务器已就绪。首次查询可能较慢,因为系统需要进行初始化和编译。

服务器显示"应用程序启动完成"消息后,可发送推理请求:

curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json"  -d '{
    "model": "Qwen/Qwen3-Next-80B-A3B-Thinking",
    "messages": [
        {
            "role": "user",
            "content": "Where is New York?"
        }
    ],
    "max_tokens": 1024,
    "top_p": 1.0
}' -w "\n"

成功的响应格式如下(内容可能较长,仅展示结构示例):

{"id":"chatcmpl-64ac201c77bf46a7a3a4eca7759b1fd8","object":"chat.completion","created":1759022940,"model":"Qwen/Qwen3-Next-80B-A3B-Thinking","choices":[{"index":0,"message":{"role":"assistant","content":"好的,用户在问"纽约在哪里?"嗯,这似乎很简单,但我需要小心。纽约可能意味着不同的东西——也许他们对城市与州感到困惑。\n\n第一个想法:他们是计划旅行的游客吗?或者也许是在做家庭作业的学生?甚至可能是只在电影中听过"纽约"并不确定它是城市还是州的国外人。\n\n我应该立即澄清两种可能性。人们经常混淆它们。就像,如果有人说"我要去纽约",他们可能是在谈论纽约市,但严格来说纽约州更大。\n\n让我分解一下:\n- 纽约市(NYC)是著名的——曼哈顿、摩天大楼、时代广场。\n- 然后是纽约州(NY)整个州,其中包括纽约市,但也包括州北部的地区,如奥尔巴尼(州首府)、布法罗,甚至阿迪朗达克山脉。\n\n等等,我应该提到纽约市在纽约州内吗?是的,这很重要。否则他们可能认为这是两个独立的地方。还有,这个州位于哪里?美国东北部,与其他州接壤,如宾夕法尼亚州、新泽西州……也许提几个邻邦来提供背景。\n\n哦!城市与州的混淆非常普遍。就像人们说"纽约的热狗"意思是纽约市,但忘记了它是更大州的一部分。我应该举个例子吗?\n- "如果有人说'纽约的热狗',他们指的是纽约市"\n- 但是"纽约州警察"覆盖整个州"\n\n……也许加一个有趣的事实?比如纽约市只是州内的一个城市?或者州首府不是纽约市而是奥尔巴尼?是的,这将有助于消除混淆。\n\n还要——用户可能在字面上询问坐标吗?不太可能,但以防万一,我可以添加:"地理上,纽约市位于大约北纬40.7°和西经74°..."但只有在答案感觉太干燥的情况下。对于州,大约北纬42°至45°?嗯,可能没有必要。坚持地标:毗邻伊利湖、大西洋沿岸……\n\n等等——用户可能在字面上询问 GPS 坐标?不太可能,但以防万一。\n\n优先级:清晰、简单、正确。不要假设先验知识。说"纽约可以指..."然后分为两种情况。以"当人们在随意交谈中说'纽约'时,他们通常指的是这个城市"结尾。这是关键的外卖。\n\n...反复检查:奥尔巴尼真的是州首府吗?是的。而纽约市是最大的城市但不是首府。明白了。另外,纽约州按面积排名第27?也许无关。坚持基础知识。\n\n最终结构:\n1. "纽约可以指两样东西:城市或州。"\n2. 对于城市:\n   - 它在哪里(美国东北部)\n   - 在纽约州内部\n   - 著名的部分(曼哈顿等)\n3. 对于州:\n   - 更大的区域,包括城市\n   - 边界(宾州、新泽西州、康州、马萨诸塞州、佛蒙特州、加拿大)\n   - 首府是奥尔巴尼(不是纽约市!)\n4. 清晰的总结:"在日常交谈中,'纽约'通常指的是纽约市。"\n\n是的。这涵盖了一切,而不会压倒他们。没有降价,只是纯英文。保持温暖——在最后加上"希望有帮助!"\n\n那是一个常见的困惑点!**"纽约"可以指两样不同的东西**,重要的是要区分它们:\n\n### 1. **纽约市(NYC)**\n   - **它是什么**:美国最大和最著名的城市,以时代广场、中央公园、自由女神像和华尔街等地标而闻名。\n   - **它在哪里**:\n     - 位于**美国东北部**。\n     - 位于**哈德逊河**与**大西洋**相遇的河口处。\n     - **纽约州**的一部分(见下文)。\n   - **地理细节**:\n     - 坐标:大约**北纬 40.7°,西经 74.0°**。\n     - 由**5 个自治区**组成:曼哈顿(大多数人想象的"城市")、布鲁克林、皇后区、布朗克斯和史坦顿岛。\n     - 纽约市的全景视图(包括布鲁克林和新泽西州天际线):","reasoning_content":null,"reasoning":null,"tool_calls":[]},"logprobs":null,"finish_reason":"length","stop_reason":null,"mm_embedding_handle":null,"disaggregated_params":null,"avg_decoded_tokens_per_iter":1.0}],"usage":{"prompt_tokens":15,"total_tokens":1039,"completion_tokens":1024},"prompt_token_ids":null}

故障排查

问题 解决方案
显存溢出 减小 max_batch_sizemax_seq_len
模型加载失败 验证模型文件完整性和格式
性能不佳 运行 nvidia-smi 检查 GPU 利用率
容器启动失败 验证 NVIDIA 容器工具包安装
连接失败 检查 8000 端口是否被占用

性能基准测试

TensorRT LLM 提供基准测试工具用于性能评估。创建测试脚本 bench.sh

cat <<'EOF' > bench.sh
#!/usr/bin/env bash
set -euo pipefail

concurrency_list="1 2 4 8 16 32 64 128 256"
multi_round=5
isl=1024
osl=1024
result_dir=/tmp/qwen3_output

for concurrency in ${concurrency_list}; do
    num_prompts=$((concurrency * multi_round))
    python -m tensorrt_llm.serve.scripts.benchmark_serving \
        --model Qwen/Qwen3-Next-80B-A3B-Thinking \
        --backend openai \
        --dataset-name "random" \
        --random-input-len ${isl} \
        --random-output-len ${osl} \
        --random-prefix-len 0 \
        --random-ids \
        --num-prompts ${num_prompts} \
        --max-concurrency ${concurrency} \
        --ignore-eos \
        --tokenize-on-client \
        --percentile-metrics "ttft,tpot,itl,e2el"
done
EOF
chmod +x bench.sh

性能调优建议:启用注意力 DP 时,建议将并发度扫描至 max_batch_size * GPU 数量

保存测试结果,可添加以下参数:

--save-result \
--result-dir "${result_dir}" \
--result-filename "concurrency_${concurrency}.json"

更多测试参数详见 benchmark_serving.py 源代码

执行测试脚本:

./bench.sh

注意:完整的并发测试可能耗时较长。

目录
相关文章
|
2月前
|
缓存 PyTorch API
TensorRT-LLM 推理服务实战指南
`trtllm-serve` 是 TensorRT-LLM 官方推理服务工具,支持一键部署兼容 OpenAI API 的生产级服务,提供模型查询、文本与对话补全等接口,并兼容多模态及分布式部署,助力高效推理。
441 155
|
2月前
|
缓存 物联网 PyTorch
使用TensorRT LLM构建和运行Qwen模型
本文档介绍如何在单GPU和单节点多GPU上使用TensorRT LLM构建和运行Qwen模型,涵盖模型转换、引擎构建、量化推理及LoRA微调等操作,并提供详细的代码示例与支持矩阵。
603 2
|
2月前
|
存储 缓存 负载均衡
TensorRT LLM 中的并行策略
TensorRT LLM提供多种GPU并行策略,支持大模型在显存与性能受限时的高效部署。涵盖张量、流水线、数据、专家及上下文并行,并推出宽专家并行(Wide-EP)应对大规模MoE模型的负载不均与通信挑战,结合智能负载均衡与优化通信核心,提升推理效率与可扩展性。
463 154
|
2月前
|
存储 缓存 PyTorch
如何优雅地为 TensorRT-LLM 添加新模型
本指南详细介绍如何在TensorRT-LLM中优雅集成新大语言模型,涵盖模型配置、定义、权重加载与注册全流程,支持作为核心模块或独立扩展集成,助力高效推理部署。(238字)
188 1
|
4月前
|
存储 人工智能 NoSQL
万字解码 Agentic AI 时代的记忆系统演进之路
本文深入探讨了在 Agentic AI 时代,记忆(Memory) 作为智能体核心能力的定义、构建与技术演进。
1380 9
万字解码 Agentic AI 时代的记忆系统演进之路
|
2月前
|
缓存 运维 监控
vLLM推理加速指南:7个技巧让QPS提升30-60%
GPU资源有限,提升推理效率需多管齐下。本文分享vLLM实战调优七招:请求塑形、KV缓存复用、推测解码、量化、并行策略、准入控制与预热监控。结合代码与数据,助你最大化吞吐、降低延迟,实现高QPS稳定服务。
695 7
vLLM推理加速指南:7个技巧让QPS提升30-60%
|
2月前
|
文字识别 测试技术 开发者
Qwen3-VL新成员 2B、32B来啦!更适合开发者体质
Qwen3-VL家族重磅推出2B与32B双版本,轻量高效与超强推理兼备,一模型通吃多模态与纯文本任务!
2614 12
|
2月前
|
缓存 异构计算
LLM 内存需求计算方式
GPU上大语言模型的内存主要由模型权重和KV缓存构成。70亿参数模型以16位精度加载时,权重占约14GB;KV缓存则随批大小和序列长度线性增长,显著影响显存使用,限制推理吞吐与长上下文处理。
272 11