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 用法 + 已知坑

← 返回文章列表