返回博客

极限测试: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.90max_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 都能胜任。