返回博客

极限测试:RTX 4090 48GB 运行 Qwen3.6-27B-FP8 — 256K 上下文实验与部署指南

单张 RTX 4090 48GB 能否运行 27B 参数模型并支持 256K 上下文窗口?答案是肯定的——通过 FP8 量化与合理配置,完整的 256K 上下文窗口可以在消费级硬件上实现。本文将分享完整的实验结果和部署指南。

测试环境

测试环境为单张 NVIDIA GeForce RTX 4090 48GB GPU,运行 vLLM 0.21.0 和 CUDA 13.2。使用的模型是 Qwen3.6-27B-FP8,即 Qwen3.6 27B 参数的 FP8 量化版本。

模型架构:

硬件配置:

上下文窗口实验结果

我们系统性地测试了从 131K 到 262K 共 10 种不同的上下文窗口配置,以找出 48GB GPU 的实际极限。

测试配置

所有测试使用相同的基础配置:

--gpu-memory-utilization 0.85
--kv-cache-dtype fp8
--max-num-batched-tokens 16384
--max-num-seqs 4
--enable-chunked-prefill
--enable-prefix-caching

测试结果:无MTP模式(最大上下文)

max-model-len 服务器启动 推理测试 备注
131,072 ✅ ✅ 基线
163,840 ✅ ✅ 163,831 输入 tokens
170,000 ✅ ✅ 169,991 输入 tokens
180,000 ✅ ✅ 172,679 输入 tokens
190,000 ✅ ✅ —
200,000 ✅ ✅ 172,679 输入 tokens
220,000 ✅ ✅ 172,679 输入 tokens
250,000 ✅ ✅ 172,679 输入 tokens
261,856 ✅ ✅ GPU: 43,707/49,140 MiB (89%)
262,144 ❌ — KV cache OOM(需 8.33 GiB,仅 8.29 GiB)

在 gpu_memory_utilization=0.85 下的最大稳定上下文:261,856 tokens(约 256K)

模型的理论最大值为 262,144 tokens。在 gpu_memory_utilization=0.85 时,我们达到了 261,856——距离绝对极限仅差 288 tokens。262,144 的失败是因为 KV cache 内存仅差 0.04 GiB。

后续测试:能否达到完整的 262,144?

上述结果引出了一个显而易见的问题:如果只差 0.04 GiB,能否通过提高 gpu_memory_utilization 来达到完整的 262,144?我们重启服务器,使用 gpu_memory_utilization=0.90 和 max_model_len=262144 进行测试:

Prompt Tokens 结果 耗时 备注
260,010 ✅ 成功 64.27s 首次请求(无缓存)
261,010 ✅ 成功 6.17s 前缀已缓存
262,010 ✅ 成功 5.26s 前缀已缓存

GPU 内存使用:45,195 / 49,140 MiB(92%)

结论:在 gpu_memory_utilization=0.90 时,RTX 4090 48GB 可以达到完整的 262,144 上下文窗口。 模型的整个理论上下文范围都可以在消费级硬件上充分利用。

关键发现

1. FP8 KV Cache 是关键

最重要的配置参数是 --kv-cache-dtype fp8。使用 FP8 格式的 KV cache 相比 FP16 可减少约 50% 的内存消耗,使得在 48GB GPU 上支持 256K 上下文成为可能。没有 FP8 KV cache,即使是 32K 上下文也会非常紧张。

2. 硬件极限接近模型理论上限

硬件极限(261,856)与模型的理论最大值(262,144)几乎相同。这意味着 RTX 4090 48GB 可以充分利用模型的整个上下文窗口能力——对于消费级硬件来说这是一个了不起的成就。

4. MTP 权衡:速度 vs 上下文 vs 并发

MTP n=3 可将令牌生成速度提升 55-143%。上下文影响取决于并发设置:

需要速度和长上下文并存时,设置 max_num_seqs=1 并启用 MTP。高并发场景下,每个请求的上下文长度会按比例减少。

部署指南

前置条件

第一步:安装 vLLM

conda create -n vllm2 python=3.10 -y
conda activate vllm2
pip install vllm==0.21.0

第二步:下载模型

从 HuggingFace 或 ModelScope 下载 Qwen3.6-27B-FP8:

# 使用 huggingface-cli
huggingface-cli download Qwen/Qwen3.6-27B-FP8 --local-dir /path/to/models/Qwen3.6-27B-FP8

# 或使用 modelscope(国内推荐)
modelscope download --model Qwen/Qwen3.6-27B-FP8 --local-dir /path/to/models/Qwen3.6-27B-FP8

第三步:启动服务

方案A:最大上下文(256K,无MTP)

需要最长上下文窗口(最高 261,856 tokens):

#!/bin/bash
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

python -m vllm.entrypoints.openai.api_server \
  --model /path/to/models/Qwen3.6-27B-FP8 \
  --port 8391 \
  --max-model-len 200000 \
  --gpu-memory-utilization 0.85 \
  --kv-cache-dtype fp8 \
  --max-num-batched-tokens 16384 \
  --max-num-seqs 4 \
  --enable-chunked-prefill \
  --enable-prefix-caching

注意: 生产环境建议使用 --max-model-len 200000 以保留余量。绝对最大值为 261,856,但 200K 提供了舒适的安全边际。

方案B:更快推理(180K,启用MTP)

需要更快的生成速度,同时保留较长上下文:

#!/bin/bash
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

python -m vllm.entrypoints.openai.api_server \
  --model /path/to/models/Qwen3.6-27B-FP8 \
  --port 8393 \
  --max-model-len 180000 \
  --gpu-memory-utilization 0.85 \
  --kv-cache-dtype fp8 \
  --max-num-batched-tokens 16384 \
  --max-num-seqs 4 \
  --enable-chunked-prefill \
  --enable-prefix-caching \
  --speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":3}'

第四步:验证部署

# 检查模型信息
curl http://localhost:8391/v1/models | python3 -m json.tool

# 测试推理
curl http://localhost:8391/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/path/to/models/Qwen3.6-27B-FP8",
    "messages": [{"role": "user", "content": "你好,你是谁?"}],
    "max_tokens": 100
  }'

配置参数参考

参数 值 说明
--max-model-len 200000 最大上下文窗口(模型支持最高 262,144;实际极限约 261,856)
--gpu-memory-utilization 0.85 GPU 内存使用比例(越低 = KV cache 增长余量越大)
--kv-cache-dtype fp8 KV cache 数据类型(FP8 相比 FP16 节省约 50% 内存;256K 上下文的关键)
--max-num-batched-tokens 16384 分块预填充中每批处理的最大 token 数
--max-num-seqs 4 最大并发序列数
--enable-chunked-prefill true 分块处理长提示以避免内存峰值
--enable-prefix-caching true 缓存公共前缀 token 以加速重复请求
--speculative-config MTP n=3 多令牌预测加速生成;配合 max_num_seqs=1 可获得最大上下文

总结

在单张 RTX 4090 48GB 上运行 Qwen3.6-27B-FP8 并支持 256K 上下文窗口不仅可行——而且通过调整 gpu_memory_utilization,完整的 262,144 上下文窗口也可以实现。关键要素包括:

  1. FP8 KV cache —— 最重要的优化,使 48GB 显存支持 256K 上下文
  2. 分块预填充 —— 处理长提示时避免 OOM 的关键
  3. MTP并发权衡 —— MTP 可将生成速度提升 55-143%;max_num_seqs=1 时支持 ~256K 上下文(无MTP的 99%),max_num_seqs=4 时支持 ~199K(76%)
  4. 保守的 gpu_memory_utilization —— 0.85 为 KV cache 增长保留余量

这套配置使得在消费级硬件上运行强大的 27B 参数模型成为可能,为本地 AI 开发和部署开辟了新的可能性。无论你是需要 256K 上下文进行文档分析,还是需要 MTP 加速生成并支持最高 256K 上下文(单请求),RTX 4090 48GB 都能胜任。