Qwen3.8-Flash-Next-Uncensored in NVIDIA Jetson AGX Thor T5000 2026-09-18版本
一、模型来源
https://huggingface.co/myllmbox/Qwen3.8-Flash-Next-hibrid48-uncensored
二、模型规格(读 config.json + 分片 header 实测,非抄卡)
架构 Qwen4ExpForConditionalGeneration / model_type qwen4_exp(混合线性注意力 MoE 多模态)
隐藏维度 2560 · 48 层 = ★ 36 层 GDN 线性注意力 + 12 层标准注意力(full_attention_interval=4)
标准注意力 24 heads / 2 KV heads(GQA 12×)· head_dim 256
MoE ★ 512 个路由专家 · 每 token 激活 10 个 · moe_intermediate 640 + 1 个共享专家
GDN 线性注意力 16 key heads / 48 value heads · head_dim 128 · conv kernel 4
词表/上下文 248,320 / 262,144(★ 无 YaRN)· tie_word_embeddings=False
视觉塔 hidden 1152 · 27 层 · gelu_tanh(本次服务已用 --limit-mm-per-prompt 关掉多模态)
MTP 投机头 mtp_num_hidden_layers = 1
2.1 参数量(按 25 个分片的 header 反算,非估算)
| 组件 | 参数量 | 占比 |
|---|---|---|
| MoE 路由专家 | 120.796 B | 67.1% |
| PLE 表(多语言 n-gram 嵌入) | 51.233 B | 28.5% |
| MTP 投机头 | 2.607 B | 1.4% |
| GDN 线性注意力 | 2.087 B | 1.2% |
| 其它(norm/混合器) | 0.704 B | 0.4% |
| 词表嵌入 / lm_head | 各 0.636 B | 各 0.4% |
| 标准注意力 | 0.617 B | 0.3% |
| 视觉塔 | 0.449 B | 0.2% |
| 共享专家 | 0.236 B | 0.1% |
| 合计 | 180.000 B | — |
180 B 参数 / 98.11 GiB 权重 → 平均 4.68 bpw。
三、量化规格(compressed-tensors 0.18.0)
quant_method compressed-tensors · format: mixed-precision · status: "compressed"
kv_cache_scheme None ★ → KV 不量化(本机就是 bf16 KV)
observer 全部为 memoryless_minmax ★ → 未校准(无状态 minmax = 直接取权重 amax 定 scale,等价 RTN 路线)
| 组 | 精度 | 粒度 | 目标 | 参数量 |
|---|---|---|---|---|
group_0 |
8bit FP8 | per-tensor | attn / GDN / shared_expert(300 条) | 2.9 B |
group_1 |
4bit NVFP4 | group=16 | MoE 路由专家 re:.*mlp\.experts\..*proj$ |
120.8 B |
group_lm_head |
4bit NVFP4 | group=16 | re:.*lm_head$(单列一组) |
0.636 B |
ignore |
不量化 | — | 751 条,全部 model.visual.* |
0.45 B |
实测张量分布(读 safetensors 头,不靠 config 口述):U8 打包 75,273 · fp8 缩放 75,573 · fp32 全局缩放 75,266 · 未量化 bf16 仅 1,428。
四、vLLM 镜像来源与补丁
4.1 镜像血统
| 项 | 值 |
|---|---|
| 镜像 | vllm-thor-plemmap:latest(32.3 GB,构建于 2026-09-14 15:46) |
| 基础 | vllm/vllm-openai:nightly-385dce36bcee42309924a5ece951a96db3dce7f2(vLLM 官方 nightly,commit 385dce36,即 0.28.1rc1.dev580+g385dce36b) |
4.2 我们加的补丁(docker history 可见 3 个注入模块)
采用 site-packages 的 .pth 自动导入注入(zz_*.pth + 同名 .py):
| 模块 | 作用 |
|---|---|
vllm_ple_mmap_thor.py |
PLE 表的 mmap 加载(服务日志里的 [ple-mmap-thor] 统计就是它) |
humming_sm110_thor.py |
humming 原生 NVFP4/MXFP8 内核在 sm_110 上的适配(GPU 张量核自检那行来自它) |
mtp_logits_fp8.py |
MTP logits 的 FP8 路径(当前 VLLM_MTP_LOGITS_FP8=0,关闭) |
/opt/qwen38-thor.patch |
156 行补丁文件,改两处:vllm/models/qwen4_exp/nvidia/ple_layer.py 与 .../ops/qsa_indexer.py |
五、启动参数(docker inspect 实录,非脚本口述)
serve /model
--served-model-name qwen3.8-flash-next qwen3.8-flash-next-uncensored
--host 0.0.0.0 --port 8001
--gpu-memory-utilization 0.73 --max-model-len 262144
--max-num-seqs 4 --max-num-batched-tokens 16384
--limit-mm-per-prompt {"image":0,"video":0} # 关掉多模态,省内存
--reasoning-parser qwen3 --tool-call-parser qwen3_xml --enable-auto-tool-choice
--async-scheduling --safetensors-load-strategy lazy --trust-remote-code
--kernel-config {"enable_jit_warmup":false,"enable_cutedsl_warmup":false,"enable_flashinfer_autotune":false}
--compilation-config {"cudagraph_mode":"PIECEWISE","splitting_ops":[...qwen_gdn_attention_core,
qwen4_exp_ple_short_conv, ple_mmap_lookup_ids...]}
--moe-backend auto --linear-backend humming
--speculative-config {"method":"mtp","num_speculative_tokens":2}
关键环境变量:
VLLM_PLE_MMAP=1 · VLLM_PLE_MMAP_DIR=/model · VLLM_PLE_MMAP_STATS=1
VLLM_MARLIN_USE_ATOMIC_ADD=0 · VLLM_DISABLED_KERNELS=FlashInferCutlassMxfp8LinearKernel
VLLM_MTP_LOGITS_FP8=0 · PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=1800 · TORCH_CUDA_ARCH_LIST=…10.0 11.0 12.0
启动方式(一条命令):
cd /home/nvidia/mtpvocab
MTP=2 BATCHED=16384 SEQS=4 PORT=8001 GPU_MEM=0.73 bash start_seqs.sh
六、实测数据
9.1 统一测量口径:thorbench.py(自包含,零依赖)
上游 MiaAI Lab 用 sparkDash 做基准。我读了它——它的编排脚本 bench/sweep.py 里的 DASH = "http://localhost:5555/api/sparks/spark-1/llm/bench" 说明真正发流量的活儿在它的 Node server 里,脚本只负责编排 + 读 /metrics 算差分。所以照抄协议、不装 server 更划算(还省掉了给 LLM 端点注入 api-key 的额外反代——sparkDash 没有上游 LLM key 的配置项)。
协议要点(已固化进 /home/nvidia/mtpvocab/thorbench.py):
- prefill:每个尺寸一个全新随机前缀 → prefix cache 结构上不可能命中
- decode:temp 0 +
enable_thinking: false(实验室协议),多并发、多种提示词类型 - 跑前跑后各抓一次
/metrics做差分:ms/step、tokens/step、per_pos[p] - 每秒采样
MemAvailable/MemFree最小值;统计内核新增的NV_ERR_NO_MEMORY - 每档追加一行 JSONL(可复现数据集)
9.2 per-position 接受率:第 2 发草稿只值一半
thorbench 采集到的按位置接受率(六组,稳定收敛):
| 并发 | 每步草稿 | 第 1 位 | 第 2 位 | 第 3 位 | 每步 token | 命中率 |
|---|---|---|---|---|---|---|
| 1 | 2.000 | 0.731 | 0.463 | 0 | 2.194 | 59.7% |
| 1 | 2.000 | 0.683 | 0.444 | 0 | 2.128 | 56.4% |
| 2 | 2.000 | 0.715 | 0.470 | 0 | 2.185 | 59.3% |
| 2 | 2.000 | 0.700 | 0.416 | 0 | 2.116 | 55.8% |
| 4 | 2.000 | 0.710 | 0.448 | 0 | 2.158 | 57.9% |
| 4 | 2.000 | 0.680 | 0.441 | 0 | 2.122 | 56.1% |
9.3 新的并发基线(此前没有的)
| 并发 | 聚合 tok/s | 每流中位 | ms/step |
|---|---|---|---|
| 1 | 37.2 ~ 45.3 | 38.4 ~ 46.3 | 46.1 ~ 57.1 |
| 2 | 62.6 ~ 70.2 | 32.7 ~ 36.5 | 58.0 ~ 66.9 |
| 4 | 104.0 ~ 104.8 | 27.1 ~ 27.2 | 77.9 ~ 80.0 |
附件
本文配套脚本包:thorbench 统一口径测量 + PLE mmap 补丁 + humming sm_110 适配(7 个脚本 + 3 个注入桩,共 1289 行)。
📦 下载 flashnext-thor-pack-2026-09-18.zip
| 文件 | 说明 |
|---|---|
thorbench.py |
统一口径测量脚本(自包含,零依赖,仅 python3 + urllib) |
vllm_ple_mmap_thor.py |
PLE 表 mmap 补丁(376 行) |
humming_sm110_thor.py |
humming 原生 NVFP4/MXFP8 内核 sm_110 适配 |
mtp_logits_fp8.py |
MTP logits 的 FP8 路径 |
ple_bench.py |
PLE 抓行开销微基准(样本偏小,保留作反面记录) |
ple_interleave_test.py |
PLE 交错化公平测试 |
zz_*.pth ×3 |
site-packages 自动导入注入桩 |
README.md |
用法 + 已知坑 |
Written on September 18, 2026