4090 48GB SGlang+DFlash2 平均 110 tok/s 27B W4A16-AWQ
-
根据 xiaote 的建议,这是目前测试下来我认为最优的启动参数了,目前实际测下来 11 轮 · 373 步 首 token 平均 1.9s · 112 tok/s
#!/usr/bin/env bash
SGLang + DFlash2 投机解码
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VENV_DIR="${ROOT_DIR}/venv"
MODEL_DIR="${ROOT_DIR}/models"MODEL_PATH="${MODEL_PATH:-${MODEL_DIR}/Qwen3.8-27B-W4A16-AWQ}"
DFlash2 草稿模型
DRAFT_MODEL_PATH="${DRAFT_MODEL_PATH:-${MODEL_DIR}/Qwen3.8-27B-DFlash2-FP8-tcclaviger}"
DRAFT_QUANTIZATION="${DRAFT_QUANTIZATION:-fp8}"SERVED_MODEL_NAME="${SERVED_MODEL_NAME:-qwen3.8-27b-w4a16-awq-dflash2}"
CONTEXT_LENGTH="${CONTEXT_LENGTH:-163840}"
KV_CACHE_DTYPE="${KV_CACHE_DTYPE:-bfloat16}"
MEM_FRACTION_STATIC="${MEM_FRACTION_STATIC:-0.91}"
MAX_TOTAL_TOKENS="${MAX_TOTAL_TOKENS:-163840}"
DRAFT_TOKENS="${DRAFT_TOKENS:-8}"
CHUNKED_PREFILL_SIZE="${CHUNKED_PREFILL_SIZE:-4096}"
MAX_PREFILL_TOKENS="${MAX_PREFILL_TOKENS:-16384}"
RANDOM_SEED="${RANDOM_SEED:-123456789}"
HOST="${HOST:-0.0.0.0}"
PORT="${PORT:-8199}"
API_KEY="${API_KEY:-dummy}"
LOG_FILE="${LOG_FILE:-${ROOT_DIR}/logs/sglang-dflash2.log}"CUDA 13.3
export CUDA_HOME="${CUDA_HOME:-/home/root1/code/llm/cuda-toolkit}"
export PATH="${CUDA_HOME}/bin:${PATH}"
export LD_LIBRARY_PATH="${CUDA_HOME}/lib:${LD_LIBRARY_PATH:-}"for p in "${MODEL_PATH}" "${DRAFT_MODEL_PATH}"; do
if [[ ! -e "${p}" ]]; then
echo "模型文件缺失: ${p}" >&2
exit 1
fi
doneif ss -ltn "sport = :${PORT}" | tail -n +2 | grep -q .; then
echo "端口 ${PORT} 已被占用" >&2
exit 2
fimkdir -p "$(dirname "${LOG_FILE}")"
echo "启动 ${SERVED_MODEL_NAME} @ ${HOST}:${PORT} (ctx=${CONTEXT_LENGTH}, DFLASH2, kv=${KV_CACHE_DTYPE})"
exec "${VENV_DIR}/bin/python" -m sglang.launch_server
--model-path "${MODEL_PATH}"
--served-model-name "${SERVED_MODEL_NAME}"
--speculative-algorithm DFLASH
--speculative-draft-model-path "${DRAFT_MODEL_PATH}"
--speculative-num-draft-tokens "${DRAFT_TOKENS}"
--speculative-draft-model-quantization "${DRAFT_QUANTIZATION}"
--tool-call-parser qwen3_coder
--reasoning-parser qwen3
--default-chat-template-kwargs '{"reasoning_effort":"medium"}'
--attention-backend flashinfer
--speculative-draft-attention-backend triton
--linear-attn-backend triton
--chunked-prefill-size "${CHUNKED_PREFILL_SIZE}"
--max-prefill-tokens "${MAX_PREFILL_TOKENS}"
--mamba-radix-cache-strategy extra_buffer_lazy
--max-mamba-cache-size 12
--cuda-graph-max-bs-decode 8
--context-length "${CONTEXT_LENGTH}"
--kv-cache-dtype "${KV_CACHE_DTYPE}"
--mem-fraction-static "${MEM_FRACTION_STATIC}"
--max-total-tokens "${MAX_TOTAL_TOKENS}"
--random-seed "${RANDOM_SEED}"
--host "${HOST}"
--port "${PORT}"
--api-key "${API_KEY}"
--sleep-on-idle
--enable-cache-report
--enable-metrics
--log-level info > "${LOG_FILE}" 2>&1 -
@xiaote 正常编码没问题,效果很好。但尝试以下提示词时,会长时间思考最终因为思考过长,已达到输出 token 上限回答被截断,试过pi hsd都无法正常回答并开始任务,连续4轮思考都被截断了,以下是提示词:使用html单文件写一个超级马里奥的游戏,要保证游戏细节,可玩性,不要脱离原版游戏的体验,尽可能还原所有细节。
有没有成功的?实测开启 HiCache 输出速度会砍掉一半!
-
,
T terry 固定了此主题
-
thinking 计入输出预算,长任务截断是预算问题,不是模型问题。
马里奥这种"单文件还原全部细节"的 prompt 会让思考阶段疯狂拉长——Qwen3.8 的 thinking 和回答共用 max output tokens,思考写嗨了,正文还没开始就被截。4 轮全截基本就是这个原因。按收益排序的解法:
- 拉高输出上限。客户端 max_tokens 从默认值提到 16384~32768(DSH 里对应配置项),sglang 侧确认 --max-total-token-num 给 KV 池留足——你 48G 卡上 AWQ 权重才 13.5G,富余很大,随便开。
- 降 reasoning effort。你现在 medium,对这种"要写几千行代码"的任务,medium 思考会把预算吃掉大半。试 low(或 minimal),思考短了,输出预算全留给代码。别直接 off——复杂代码还是需要一点思考,low 是甜点。
- 任务拆分。先要骨架+核心机制,再一轮轮补细节。"尽可能还原所有细节"单发请求必然超预算,这是预算硬边界,不是参数能救的。
- 论坛还没人贴同样 prompt 的成功案例,terry 说了有空会测 4bit 版(PID:14280)。你先 max_tokens 拉高 + effort 降 low 试,大概率能出完整可玩版本,到时贴出来大家抄。
HiCache 砍半速度:正常,不是你的配置问题。TID:1329/1341 实测过——HiCache 有价值的是多会话前缀复用(L2 缓存命中),代价就是 tok/s,你自己 14157 也测过"掉得厉害"。你的场景是单会话长写码,L2 命中收益接近于零,关掉是对的,terry 说的"宁可不要 hicache"也是这个意思。
-
,系统 取消固定了此主题
-
@Dady-Pan 结合另外一篇 + 楼主 折騰 的配置,DS 那张表判断对了一半:那是 SGLang 的官方环境地板(Ubuntu 22.04+ / CUDA 12.1+ / Python 3.10+ / torch 2.3+,量化支持 FP8、AWQ、GPTQ),你机器 24.04 + 新驱动 + Python 3.12 全满足,这段没问题。
但"能跑起来" ≠ "能抄出 110 tok/s",真正要对齐的是这三样:
- SGLang 必须是最新版。DFlash2 是今年的新投机解码 kernel,老 release 根本没有。走官方安装(pip install "sglang[all]" 最新版),别装 apt/conda 的旧包。这类 kernel 跟 commit 强绑定,版本差一个都可能行为不同。
- 模型和量化照抄楼主:Qwen3.8-27B W4A16-AWQ(HF 格式,权重约 13.5G)。SGLang 不吃 GGUF,别换成 Q4_K_M 之类;40 系 Ada 原生支持 FP8,想试 FP8 也可以。
- torch/transformers 别自己挑版本:sglang 安装时会锁定配套版本,手动装"最新版"反而容易打架。
最准的版本号直接问楼主:让他贴一下
sglang --version和pip show torch最稳。另外预期管理:110 tok/s 是投机解码加持的持续写入速度,DFlash 对 qwen3.8 的用法社区有 cookbook(LMSYS 那篇),不是所有模型都能吃到这个加速。 -
,
T terry 固定了此主题
-
,系统 取消固定了此主题

