license: gemma library_name: transformers pipeline_tag: text-generation base_model: TrevorJS/gemma-4-26B-A4B-it-uncensored tags:
- 26b
- 4-bit
- 4b-active
- aarch64
- abliterated
- aeon
- aeon-7
- agentic
- arm64
- blackwell
- chat
- chunked-prefill
- coding
- compressed-tensors
- conversational
- dflash
- dgx-spark
- edge
- english
- flashinfer-cutlass
- fp4
- fp8-kv-cache
- function-calling
- gb10
- gemma
- gemma-4
- gemma4
- gpu
- grace-blackwell
- image-text-to-text
- instruct
- llmcompressor
- long-context
- mixture-of-experts
- moe
- multimodal
- native-fp4
- nvfp4
- nvidia
- on-device
- openai-api
- openai-compatible
- prefix-caching
- production-ready
- quantized
- reasoning
- refusal-removed
- safetensors
- sliding-window-attention
- sm_121a
- sparse-moe
- speculative-decoding
- text-generation
- thinking
- tool-calling
- transformer
- uncensored
- unfiltered
- vision
- vision-language
- vllm
- weight-quantization model_type: gemma4 quantization: nvfp4 language:
- en
- zh
快速链接
| 资源 | 链接 |
|---|---|
| 模型权重 + 完整文档 | HuggingFace 上的 AEON-7/Gemma-4-26B-A4B-it-Uncensored-NVFP4 |
| DFlash vLLM 容器 (DGX Spark) | ghcr.io/aeon-7/aeon-vllm-ultimate:latest |
| DFlash 草稿模型 (Drafter) | z-lab/gemma-4-26B-A4B-it-DFlash |
快速开始
完整的开箱即用复制粘贴配方 —— 拉取容器、拉取模型(全新下载)、拉取 DFlash 草稿模型(全新下载),然后使用经过严格验证的 DGX Spark 配置配方进行部署服务(DFlash n=10,草稿模型 flash_attn,主干模型 triton_attn)。下方的配方说明涵盖了针对特定镜像标签的草稿模型后端以及生产级 GPU 利用率 / 上下文分级配置;另请参阅容器镜像详情。
# 1. 拉取 AEON vLLM Ultimate 镜像(vLLM 0.24.0 sm_121a 源码编译 + PR#44389 NVFP4-KV +
# PR#40898/#41703 DFlash 草稿模型修复 + DFlash 高并发修复)。
# :latest = :2026-07-01-v0.24.0;回滚版本 :2026-06-18-v0.23.0-dflashfix。
docker pull ghcr.io/aeon-7/aeon-vllm-ultimate:latest
# 2. 下载目标模型(全新下载)。
huggingface-cli download AEON-7/Gemma-4-26B-A4B-it-Uncensored-NVFP4 \
--local-dir ./models/gemma4
# 3. 下载 DFlash 草稿模型(全新下载 —— 拉取最新的 z-lab 构建)。
huggingface-cli download z-lab/gemma-4-26B-A4B-it-DFlash \
--local-dir ./models/gemma4-dflash
# 4. 部署服务 —— 适用于 :latest (2026-06-11+) 的配置方案:DFlash n=10,草稿模型 flash_attn,主干模型 triton_attn。
# (该镜像的 ENTRYPOINT 默认为 bash,因此使用 --entrypoint vllm 覆盖。)
docker run --gpus all --ipc host --network host \
-e VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 \
-e TORCH_MATMUL_PRECISION=high \
-e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \
-e VLLM_TEST_FORCE_FP8_MARLIN=0 \
-e VLLM_USE_FLASHINFER_SAMPLER=1 \
-v "$PWD/models/gemma4:/models/gemma4:ro" \
-v "$PWD/models/gemma4-dflash:/models/gemma4-dflash:ro" \
--entrypoint vllm \
ghcr.io/aeon-7/aeon-vllm-ultimate:latest \
serve /models/gemma4 \
--served-model-name gemma4-aeon-uncensored gemma4-fast gemma4-deep \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 1 \
--dtype auto \
--quantization compressed-tensors \
--linear-backend flashinfer_cutlass \
--moe-backend cutlass \
--attention-backend triton_attn \
--max-model-len 262144 \
--max-num-seqs 64 \
--max-num-batched-tokens 32768 \
--gpu-memory-utilization 0.65 \
--enable-chunked-prefill \
--enable-prefix-caching \
--trust-remote-code \
--enable-auto-tool-choice \
--tool-call-parser gemma4 \
--reasoning-parser gemma4 \
--speculative-config '{"method":"dflash","model":"/models/gemma4-dflash","num_speculative_tokens":10,"attention_backend":"flash_attn"}'
配方说明 —— 草稿模型后端与镜像标签强绑定:
- 在
:latest/:2026-07-01-v0.24.0(当前最新;与:2026-06-18-v0.23.0-dflashfix修复分支行为相同)上: 草稿模型必须使用attention_backend: flash_attn(通过 PR #41703 的use_mm_prefix=False为多模态 Gemma 目标启用)。在此镜像上,flex_attention会在收到第一个请求时崩溃(新 KV 共享路径中的非连续 KV 视图)。--enable-prefix-caching是安全的且推荐开启 —— 已在 DFlash 上经过浸泡测试验证(参见下方的修复部分)。 - 在回滚标签
:2026-06-04-pr44389(修复前)上: 情况正好相反 —— 仅支持加载flex_attention(flash_attn会失败并报错partial multimodal token full attention not supported),草稿模型会静默运行且不带滑动窗口支持(在超过 2k 上下文时接受率接近 0%),且--enable-prefix-caching会导致接受率缓慢崩溃(见下文)。不建议使用。 - 无论哪种情况,主干模型均保持使用
triton_attn(针对 Gemma 的异构注意力头维度),且切勿设置--kv-cache-dtype fp8—— DFlash 的非因果草稿模型需要 BF16 KV。--reasoning-parser gemma4可以干净地将enable_thinking的输出拆分到reasoning_content中。num_speculative_tokens=10是我们生产集群当前运行的值;草稿模型的训练块大小为 16,而 z-lab 发布的默认值为 15 —— 针对修复后的草稿模型进行 n=10 与 15 的重新基准测试仍在进行中(此前“10 胜过 15”的结论是在修复前的草稿模型上测得的,不应视为定论)。该模型的config.json已经自带视觉忽略列表修复(re:.*embed_vision.*,re:.*vision_tower.*),因此 vLLM 会保持视觉塔为 BF16 精度。
此默认配置文件适用于智能体网关(agentic gateways)—— 一个大型全上下文对话加上受 --max-num-seqs 64 上限约束的多个短生命周期子智能体。对于短上下文吞吐量基准测试,请使用 --max-model-len 32768 --max-num-seqs 256。
性能表现 —— DGX Spark:原生默认 vs 极致优化
这是本模型的核心亮点。 在 DGX Spark / GB10 上,AEON DFlash 容器将默认“能跑,但很慢”的原生基线转变为一个真正可用的长上下文本地智能体模型 —— 并且 AEON 源码构建版本现在可以平稳扩展至 64 个并发请求,而在先前的镜像中,并发推测解码会导致崩溃。
测试基于 AEON 源码构建版本(vLLM 0.23.0 sm_121a + DFlash num_speculative_tokens: 10,草稿模型 flash_attn,主干模型 triton_attn;当前 :latest 现为 vLLM 0.24.0,吞吐量持平),单流(c=1),按任务类别划分:
| 类别 | 🟢 解码 tok/s | TTFT p50 | TPOT p50 | 预填充 (PP) | DFlash 接受率 | 对比原生 |
|---|---|---|---|---|---|---|
| 代码编写 (Coding) | 155.8 | 83 ms | 6.4 ms | 601 tok/s | 58.9% | 3.2× |
| 数学计算 (Math) | 127.8 | 145 ms | 7.8 ms | 420 tok/s | 48.7% | 2.6× |
| 逻辑推理 (Reasoning) | 118.9 | 105 ms | 8.4 ms | 439 tok/s | 43.9% | 2.4× |
| 散文写作 (Prose) | 49.8 | 105 ms | 20.1 ms | 324 tok/s | 11.1% | 1.0× |
| 自然语言 (Natural language) | 67.3 | 97 ms | 14.9 ms | 393 tok/s | 20.0% | 1.4× |
| 信息提取 / JSON (Extraction / JSON) | 202.4 | 85 ms | 4.9 ms | 602 tok/s | 77.5% | 4.3× |
对比 原生未经优化的 vllm/vllm-openai 0.20.1 基线(约 47–49 tok/s,无 DFlash,无 sm_121a 优化)→ 解码速度最高提升 4.3 倍(平均约 2.5 倍),且现在可平稳扩展至 c=64 并发(代码类别总计 1,937 tok/s)且无崩溃。参见我们为 DGX Spark 所做的修复。
关于原生基线的说明: 原生/未优化数据采用官方原生 vLLM(
vllm/vllm-openai0.20.1,无 DFlash,无 AEON/sm_121a 优化)测得,属于临时数据 —— 待更新,后续将在当前版本上进行全新的全原生重新基准测试。优化数据测自当前的aeon-vllm-ultimate:latest(vLLM 0.24.0)构建版本。(完整的原生扫描数据及来源保留在下文。)
长上下文层级(当前构建版本)
随着上下文增长,DFlash 接受率依然保持稳定 —— DFlash 滑动窗口注意力修复(PR #40898)使草稿模型在远超 2k 标记后依然发挥效用。单流(c=1),以测得的 prompt_tokens_p50 作为上下文大小:
| 上下文 | 类别 | 解码 tok/s | TTFT p50 | 预填充 (PP) | DFlash 接受率 |
|---|---|---|---|---|---|
| ~16k | 代码编写 (Coding) | 128.2 | 3.8 s | 4,270 tok/s | 58.7% |
| ~16k | 逻辑推理 (Reasoning) | 102.8 | 5.2 s | 3,915 tok/s | 46.4% |
| ~16k | 信息提取 / JSON (Extraction / JSON) | 169.8 | 5.2 s | 3,890 tok/s | 77.5% |
| ~32k | 代码编写 (Coding) | 92.8 | 10.2 s | 3,188 tok/s | 46.7% |
| ~32k | 逻辑推理 (Reasoning) | 83.0 | 14.1 s | 2,899 tok/s | 40.8% |
| ~32k | 信息提取 / JSON (Extraction / JSON) | 156.3 | 14.1 s | 2,888 tok/s | 77.5% |
模型规格
| 属性 | 规格值 |
|---|---|
| 架构 | Gemma 4 混合专家架构 (Mixture of Experts) |
| 总参数量 / 激活参数量 | 26B / 每个 token 约 4B(128 个专家中激活 top-8) |
| 层数 | 30 层(25 层滑动窗口 + 5 层全局全注意力) |
| 最大上下文 | 262,144 tokens |
| 量化方式 | NVFP4 (compressed-tensors) |
| 磁盘模型大小 | 15.3 GB |
| 显存占用 | 16.25 GB |
| 视觉模块 | 27 层 ViT (BF16) |
| 工具调用 | 原生 Gemma 4 格式 |
2026-06-11 — DFlash 草稿模型修复 (vLLM PR #40898 + #41703)
该模型先前发布的所有 DFlash 数据均是在存在缺陷的草稿模型执行路径上测量的。我们在生产环境中定位了 vLLM 端的三个根本缺陷,并将上游修复(目前两个 PR 在上游仍处于 open 状态)合并到了 aeon-vllm-ultimate:latest 中:
| 缺陷(修复前镜像) | 症状表现 | 修复方式 |
|---|---|---|
被拒绝的 token 上下文 KV 写入损坏了草稿模型的分页 KV 缓存;--enable-prefix-caching 使这种损坏变得持久且自加速 | 草稿接受率在数分钟到数小时的流量中从 34–56% 衰减至 0.0% → 解码速度放慢约 6 倍(从 144 降至 24 tok/s),唯有重启才能恢复 | #41703 屏蔽被拒绝/无效的上下文槽位 |
| z-lab 草稿模型在 5 层中有 4 层为 滑动窗口 2048 (sliding-window-2048),但先前按全注意力运行 | 任何上下文大于 2k token 的请求接受率均接近 0%(长对话、智能体历史记录、超长系统提示词) | #40898 为 DFlash 添加滑动窗口注意力 (SWA) 支持 |
| 草稿模型路径中缺失 Gemma-4 sqrt(hidden) 嵌入归一化器 + 最终 logit softcap | 压低了接受率上限 —— 平均接受长度 (MAL) 为 4.4–6.6,而 z-lab 公布的基准为 6.1–8.6 | #41703 |
修复后镜像的验证结果(生产配置:--gpu-memory-utilization 0.68 --max-model-len 184320 --max-num-seqs 32 --enable-prefix-caching,草稿模型 flash_attn,n=10):
| 测试关卡 | 修复前 | 2026-06-11-pr41703 |
|---|---|---|
| 长上下文(约 9k 系统提示词)草稿接受率 | ~0–7% | 43.3% / MAL 5.3 |
| 开启前缀缓存 + 集群并发峰值 + 10 分钟生产浸泡测试 | 在约 25 分钟内崩溃至 0% | 52.0% / MAL 6.20 —— 负载下持续向好 |
| 单流代码生成 (c=1, greedy) | 刚启动 144 tok/s,逐步衰减至 ~24 | 149–150 tok/s,持久稳定 |
| 长上下文(约 9k)吞吐量 | ~46 tok/s(APC 无法使用) | 78 tok/s(APC 加速已缓存的前缀) |
| 线上生产探测(30 种人设语音集群) | — | 60% 接受率 / MAL 7.0 |
在此配置下的 KV 缓存容量:在 180k 上下文下提供 726k token / 3.94× 并发度。平均接受长度首次达到 z-lab 公布的指标范围。在修复后镜像上的完整按类别并发重新测试正在进行中;下一节为历史修复前的基准测试数据。
性能表现 —— 历史短上下文基准测试(修复前镜像,2026-06-09)
⚠️ 测试于修复前镜像(
:2026-06-04-pr44389),采用在当前:latest上会崩溃的 flex-drafter 配方 —— 且草稿模型存在缺陷(无 SWA、无嵌入归一化器),仅限短上下文提示词。保留此项数据作为真实的历史底线参考;修复后的镜像实测性能更高(见上文)。在此镜像上的长上下文表现远差于表中所示(超过 2k token 的上下文接受率接近 0%)。
按类别单流 + 并发扫描(c=1…128,每个类别全新启动服务,0 请求错误),DFlash n=10,BF16 KV:
| 类别 | c=1 tok/s | 峰值聚合 tok/s | 对比先前的 DFlash v2 (n=15) |
|---|---|---|---|
| 代码编写 (Coding) | 144.2 | 1,724 @ c=128 | +53% c1 / +51% 峰值 |
| 数学计算 (Math) | 99.6 | 1,335 @ c=128 | +35% / +34% |
| 逻辑推理 (Reasoning) | 73.6 | 1,087 @ c=128 | +21% / +24% |
| 信息提取 / JSON (Extraction / JSON) | 158.4 | 1,315 @ c=32 | +2% c1 |
| 自然语言 (Natural language) | 53.8 | 684 @ c=128 | +5% 峰值 |
| 散文写作 (Prose) | 36.5 | 486 @ c=128 | — |
这次修复前测试显示,在偏向推理的类别中,n=10 比 z-lab 默认的 15 高出 20–50% —— 但当时两组测试运行的都是有缺陷的草稿模型,因此在修复后镜像上完成重新基准测试前,关于 n=10 与 15 的对比结论应视为未定论(草稿模型的块大小为 16)。
若追求极致的多请求聚合吞吐量(极高并发,c≥128),在修复前镜像上测得不带草稿模型的效果最好(通过下方原生路径在 c=256 时达到约 3,000–3,700 tok/s)。请注意,当时观察到的“草稿模型在 c=256 时失稳”的行为,很可能正是如今已修复的 KV 损坏缺陷所致 —— 在将其作为当前指导之前,高并发交叉点需要在修复后镜像上重新测量。
原生社区版 vLLM 基线(无 DFlash)
使用 2026-05-06 拉取的官方社区镜像 vllm/vllm-openai:latest 进行基准测试(vLLM 0.20.1,PyTorch 2.11.0+cu130,transformers 5.7.0,镜像摘要 sha256:9eff9734a30b6713a8566217d36f8277630fd2d31cec7f0a0292835901a23aa4)。本次运行使用相同的模型权重、32K 上下文、--max-num-batched-tokens 32768 以及 --max-num-seqs 256,但未配置 DFlash 草稿模型,也没有设置 AEON 容器环境变量覆盖项。上游 vLLM 目前已支持在 GB10 上通过 FlashInfer CUTLASS NVFP4 线性核函数和 VLLM CUTLASS MoE 启动此模型。
全量基准扫描:6 个自然提示词类别 × 8 个并发级别(1, 4, 8, 16, 32, 64, 128, 256)= 48 个基准测试点,0 次请求错误。
| 类别 | c=1 tok/s | c=1 TTFT p50 | 峰值聚合 tok/s | c=256 聚合 tok/s | c=256 TTFT p50 |
|---|---|---|---|---|---|
| 代码编写 (Coding) | 49.12 | 130.7 ms | 3,356.61 @ c=256 | 3,356.61 | 542 ms |
| 数学计算 (Math) | 48.79 | 134.0 ms | 3,006.60 @ c=256 | 3,006.60 | 1,078 ms |
| 逻辑推理 (Reasoning) | 48.90 | 113.8 ms | 3,241.42 @ c=256 | 3,241.42 | 274 ms |
| 散文写作 (Prose) | 48.86 | 115.9 ms | 3,222.85 @ c=256 | 3,222.85 | 662 ms |
| 自然语言 (Natural language) | 49.38 | 72.4 ms | 3,418.94 @ c=256 | 3,418.94 | 650 ms |
| 信息提取 / JSON (Extraction / JSON) | 47.34 | 120.6 ms | 3,674.70 @ c=256 | 3,674.70 | 385 ms |
当纯粹的多请求聚合吞吐量比推测单流速度更重要时,请使用原生社区路径。当您需要更低的交互式 TPOT 并享受集成的 Gemma 4 DFlash 服务方案时,请使用 AEON DFlash 镜像。
为什么这项任务极其艰难:DGX Spark 上的 Gemma 4
在 DGX Spark 上运行 Gemma 4 NVFP4 过去需要完全从源码构建的软件栈。截至 2026-05-06 的社区 vllm/vllm-openai:latest 镜像,上游 vLLM 已经可以在 GB10 上启动该模型,而 AEON 的 aeon-vllm-ultimate 镜像则将优化(且现已修正 —— 见上文修复部分)后的 DFlash 路径打包成了一键拉取即用的容器。从底层硬件芯片到推理服务框架,再到模型权重本身,该技术栈的每一层都存在过值得深入了解的兼容性鸿沟。
DGX Spark 带来的挑战
NVIDIA DGX Spark 搭载了 GB10 Grace Blackwell 芯片:基于 ARM64 (aarch64) 的 SM 12.1 架构。这是绝大多数机器学习生态仍在努力追赶适配的前沿硬件:
- SM 12.1 上的 Python Wheel 仍存在较高风险。 官方 PyPI 发布的二进制轮子历史上一贯面向 SM 8.0/8.9/9.0(Ampere/Ada/Hopper)。直接运行
pip install vllm可能会安装针对错误 GPU 架构编译的 CUDA 核函数;请务必使用经过测试的 Docker 镜像或从源码编译。 - SM 12.1 缺少预构建的 FlashInfer wheel。 FlashInfer 提供了融合 MoE 分发核函数,这是实现高速专家路由的关键。如果没有针对该架构进行编译,MoE 模型将无法使用经过优化的 CUTLASS/Triton 后端。
- ARM64 架构 意味着许多仅限 x86 的预构建二进制文件根本无法运行。即便有些软件包宣称支持 CUDA,其主机端(host-side)代码通常也仅针对 x86 编译。
- 273 GB/s 内存带宽:对于桌面级设备而言非常出色,但与数据中心级 GPU 相比(H100: 3.35 TB/s, A100: 2 TB/s)仍有较大差距。这使得模型架构的选择至关重要:在每个 token 生成过程中都需要读取全部参数的稠密模型在此类硬件上会遭受严重的带宽瓶颈。
实际结果是:当前的原生 vLLM 虽然可以部署该模型,但若要构建高可靠性的生产环境,仍需严格锁定镜像版本、模型格式、注意力后端、KV 数据类型以及并发设置,而不是盲目假定任何 vLLM 标签都能表现一致。
Gemma 4 带来的挑战
Gemma 4 不仅仅是一个新模型,它的架构非常独特,打破了现有工具链中的诸多惯性假设:
1. 必须依赖 transformers v5+(目前尚无其他模型强制要求)
Gemma 4 是首个要求将 transformers 大版本升级到 v5 的主流模型。较旧的原生 vLLM 镜像内置的是 v4.x,无法解析 Gemma 4 的配置。当前的社区镜像可能已包含 transformers v5,但仍需固定版本,因为 v4/v5 之间的 API 差异仍可能导致模型加载失败。
2. 异构注意力头维度
大多数模型在所有层上都具有统一的注意力头维度。而 Gemma 4 的滑动窗口层为 head_dim=256,全局全注意力层则为 global_head_dim=512。这直接破坏了假设所有层头维度统一的注意力后端。vLLM 专为 Gemma 4 强制启用了 TRITON_ATTN 后端以处理这种情况 —— 其他后端(FlashAttention、FlashInfer attention)会导致数值异常发散或程序崩溃。
3. 滑动窗口与全注意力层混合架构
在全部 30 层中,有 25 层使用 1024 token 的滑动窗口注意力,另外 5 层使用全局全注意力;且所有 30 层均挂载 MoE 块(128 个专家,激活 top-8 —— 经权重校验:每一层都包含路由器和专家张量)。这两种注意力类型具有不同的计算模式和 KV 缓存需求 —— 交织贯穿于整个模型层级中。
4. 庞大的 MoE 专家数量
每层拥有 128 个专家,且全 30 层均执行 top-8 路由。这意味着共有 128 × 30 = 3,840 个专家权重块,每个权重块包含 4 个 NVFP4 张量(weight_packed、weight_scale、weight_global_scale、input_global_scale)。该模型中的张量总数达到了 47,648 个。要正确加载和路由这些张量,需要能够处理堆叠专家格式的 FusedMoE 核函数,且 compressed-tensors 的命名规范与 vLLM 预期的规范不匹配(见下文)。
NVFP4 量化带来的挑战
NVFP4(NVIDIA 4 位浮点 —— 具有块缩放因子的 E2M1 元素)是将一个 26B 参数模型压缩进 15.3 GB 的关键。但在开源生态中存在两种完全不同的 NVFP4 格式,彼此之间互不兼容:
ModelOpt NVFP4(NVIDIA TensorRT-LLM 工具链):将权重存储为 weight、weight_scale_inverse、input_scale。这是 NVIDIA 自家工具导出的格式,也是大多数 vLLM NVFP4 代码路径所预期的格式。
Compressed-tensors NVFP4(llmcompressor/vLLM 社区):将权重存储为 weight_packed、weight_scale、weight_global_scale、input_global_scale。张量名称不同、缩放比例约定不同、打包格式也不同。
本项目模型使用的是 compressed-tensors 格式(在 H200 上使用 llmcompressor 进行量化)。vLLM 的 Gemma 4 权重加载器中硬编码了不匹配的张量命名假设。具体表现为:
- 专家路径不匹配:Compressed-tensors 将 MoE 专家命名为
layers.X.experts.{id}.{proj}.weight_packed。而 vLLM 的 FusedMoE 预期为layers.X.moe.experts.{id}.{proj}.weight_packed—— 请注意其中的.moe.节点。若不打补丁,每一个专家张量都会加载失败并抛出 KeyError。 - 后缀格式不匹配:权重加载器构造的名称类似于
w2_weight.weight_packed,而实际应该为w2_weight_packed。需要将_weight.简化为_。 - 维度断言失败:原生代码对权重张量断言
dim == 2,但 NVFP4 打包张量由于 4-bit 打包具有不同的张量维度。
本仓库附带的 gemma4_patched.py 通过对权重加载管线进行针对性修补,一次性解决了上述所有三个问题。
误量化问题
在使用 llmcompressor 进行量化时,通常需要指定忽略模式以保留需要保持 BF16(全精度)的层。最初的量化使用了类似 re:.*visual.* 和 re:.*gate.* 的正则模式来跳过视觉和路由层。但 Gemma 4 的命名规范与此不符:
| 层类型 | 预期正则匹配 | Gemma 4 中的实际名称 | 结果 |
|---|---|---|---|
| 视觉塔 | re:.*visual.* | model.vision_tower.* | 被误量化(错误) |
| 视觉嵌入 | re:.*visual.* | model.embed_vision.* | 被误量化(错误) |
| MoE 路由器 | re:.*gate.* | model.*.router.proj.* | 被误量化(错误) |
量化这些层会导致模型彻底损坏:
- NVFP4 格式的视觉塔会直接导致崩溃,因为 vLLM 会为其分配标准的
Linear层(预期为.weight张量,却收到了weight_packed/weight_scale等) - NVFP4 格式的 MoE 路由器 会损坏专家路由机制 —— 路由器负责决定为每个 token 激活哪些专家,对路由 logit 进行 4 位量化会导致退化的异常专家选择
- 视觉嵌入投影层 连接 ViT 输出与语言模型 —— 此处的量化误差会级联传导到后续的每一层
我们通过从基础模型(TrevorJS/gemma-4-26B-A4B-it-uncensored)中提取原始 BF16 权重,替换 safetensors 文件中被错误量化的张量修复了此问题:
- 从视觉塔中移除了 760 个 NVFP4 张量,替换为 190 个原始 BF16 权重(包含偏置和 layernorm 在内共 355 个视觉张量)
- 从 router.proj 层移除了 120 个 NVFP4 张量,替换为 30 个 BF16 权重
- 从 embed_vision 中移除了 4 个 NVFP4 张量,替换为 1 个 BF16 权重
控制 Token 泄漏问题
Gemma 4 使用内部控制 token 进行多通道生成(思考思维链、工具调用、最终输出)。这些 token 在词表中具有特定的 ID:
| Token ID | Token | 作用说明 |
|---|---|---|
| 100 | <|channel> | 开始内部通道(例如:思考) |
| 101 | <channel|> | 结束内部通道 |
| 98 | <|think|> | 进入思考模式 |
| 48 | <|tool_call> | 开始工具调用 |
| 49 | <tool_call|> | 结束工具调用 |
如果没有正确的 EOS 配置,模型可能会在生成过程中误入其“思考”通道,导致这些内部控制 token 作为纯文本直接输出到 API 响应中。更严重的是,它可能会陷入无限重复循环 —— 没完没了地生成 <|channel>thought<channel|>call:process{...} 作为可见文本。表现为模型在对话中不断“刷屏”乱码。
修复方法是在 generation_config.json 的 eos_token_id 列表中加入 token 98、100 和 101,确保 vLLM 在任何内部通道 token 泄露至最终输出前干净利落地终止生成。
容器中包含的核心技术(秘密配方)
当前的容器镜像是 ghcr.io/aeon-7/aeon-vllm-ultimate:latest(= :2026-07-01-v0.24.0)。用户只需拉取一个镜像,无需任何本地打补丁或从源码编译操作。
| 组件 | 属性与功能 | 核心价值 |
|---|---|---|
| vLLM 0.24.0 (sm_121a 源码编译) + PR #44389 | 专为 GB10 构建的 v0.24.0 + Triton NVFP4 KV 缓存 | 可选开启最高达 3 倍的 KV 缓存容量(--kv-cache-dtype nvfp4;仅限因果推测解码)。 |
| PR #40898 + #41703 补丁叠加 | 领先上游提前合并的 DFlash 草稿模型修复 | 屏蔽被拒绝槽位的 KV 写入(在前缀缓存下杜绝接受率崩溃)、草稿模型滑动窗口支持、Gemma-4 嵌入归一化器 + logit softcap、多模态 Gemma 目标上的 flash_attn 草稿模型。 |
| AEON sm_121a 专属补丁 | 3 项幂等运行时补丁 | 确保 GB10 正确性(可选导入延迟绑定、混合块大小 None 保护、推测解码 CUDA 图捕获大小对齐)。 |
| PyTorch 2.11.0 + CUDA 13 | 底层框架与运行时环境 | 支持 SM 12.1 (GB10) 硬件架构。 |
| transformers 5.10 dev | 模型配置与分词器加载 | 支持识别 gemma4_unified 等前沿模型类。 |
| DFlash 草稿模型 | z-lab/gemma-4-26B-A4B-it-DFlash(单独挂载) | 5 层 SWA-2048 块扩散草稿模型 —— 现已真正以滑动窗口运行。 |
| 原生 FP4 CUTLASS 核函数 | 线性层使用 FlashInfer CUTLASS,MoE 使用 VLLM CUTLASS | 切勿在此镜像上强行启用 Marlin;在 GB10 上原生 FP4 路径性能更优。 |
| 主干 TRITON_ATTN / 草稿 FLASH_ATTN | 注意力计算引擎 | Triton 妥善处理 Gemma 4 的异构头维度 (256/512);草稿模型的非因果注意力运行于 FlashAttention 之上(本镜像强制要求)。 |
| torch.compile + CUDA 图 | 图捕获与算子融合 | 为所配置的批大小捕获解码计算图,削减解码热点路径上的 Python 调用开销。 |
为什么 MoE 使这一切成为可能
DGX Spark 的根本瓶颈在于内存带宽:273 GB/s。在自回归解码期间,GPU 必须为生成的每一个 token 完整读取一遍模型权重。这直接决定了 tok/s 的理论上限:
tok/s = 内存带宽 / 每 token 读取的字节数
对于一个 NVFP4 精度的稠密 27B 模型(权重约 13.5 GB):
273 GB/s / 13.5 GB = ~20 tok/s(理论极限,尚未计入 KV 缓存与开销)
而对于本 MoE 模型(128 个专家中激活 top-8,每个 token 仅激活约 2.8 GB):
273 GB/s / 2.8 GB = ~97 tok/s(理论极限)
我们实现了单流约 37–158 tok/s(视任务类别而定 —— 代码编写在修复后镜像上持久保持 149–150 tok/s;散文约 37 tok/s,信息提取/JSON 约 158 tok/s 来自修复前的短上下文测试,属保守下限,修复后镜像重新测试进行中)—— 在代码任务上聚合吞吐量突破 1,700 tok/s(修复前测试),在信息提取上通过原生无草稿路径达到约 3,700 tok/s。与理论极限的差距主要来自于 KV 缓存读取、注意力计算、路由器开销、草稿模型验证以及内存访问模式。但核心结论在于:MoE 将一个在带宽上面临不可能完成的任务(稠密 27B)转变成了一个带宽充裕的从容任务。
| 模型类型 | 每 Token 读取参数量 | GB10 上理论最高 tok/s | 实际可用 tok/s |
|---|---|---|---|
| 稠密 27B BF16 | ~54 GB | 5 | 无法实用 |
| 稠密 27B NVFP4 | ~13.5 GB | 20 | ~15 |
| MoE 26B top-8/128 NVFP4 + DFlash | ~2.8 GB + 草稿模型 | 97 | 代码编写 149–150(修复后镜像);自然对话约 54 / 提取约 158(修复前测试);聚合 1,700+ |
这就是为什么在带宽受限的硬件上,架构选择远比盲目的参数总量更为重要。在相同硬件上,采用 NVFP4 的 26B MoE 模型的推理速度远超 BF16 的稠密 7B 模型。
我们为 DGX Spark 所做的修复
所有 AEON 模型均运行在同一个统一容器镜像上 —— ghcr.io/aeon-7/aeon-vllm-ultimate:latest(= :2026-07-01-v0.24.0;回滚版本 :2026-06-18-v0.23.0-dflashfix)—— 该镜像是由针对 GB10 / sm_121a 从源码构建的 vLLM v0.24.0 与 AEON 推测解码优化技术栈深度融合而成。
| 修复项目 | 功能说明 | 为什么对 GB10 至关重要 |
|---|---|---|
| DFlash 高并发修复 (新) | 将推测草稿模型的 KV 块表切片至未填充的实际批次(block_table[:num_reqs]) | 修复前草稿模型在并发请求数 ≥32 时崩溃(FlashAttention 中填充与未填充块表形状不匹配)。现已平稳扩展至 c=64。此改动将上游 PR #43982(先前仅针对 MTP 修复,从未应用于 DFlash)移植至 DFlash —— 甚至在先前的镜像中该问题也依然存在。 |
| Triton NVFP4 KV 缓存 (PR #44389) | 软件实现的 NVFP4 KV 缓存路径 | sm_121a 架构上唯一的 4-bit KV 路径(上游官方实现强行限定必须为 B200)→ 获得约 3 倍 KV 缓存容量 / 每 GB 统一内存支持更长的上下文。 |
| DFlash 滑动窗口注意力 (PR #40898) | 将草稿模型的 SWA 层作为真正的滑动窗口执行 | 随着智能体对话历史的延长,长上下文草稿接受率得以维持(该模型在 ~16k 时约为 47%,在 ~32k 时约为 41%),不再像先前一样在超过约 2k token 后断崖式崩溃。 |
| sm_121a 原生构建 | TORCH_CUDA_ARCH_LIST=12.1a, ENABLE_NVFP4_SM100=0 | 编译 GB10 实际调度执行的 SM120 家族 CUTLASS NVFP4/FP8 核函数 —— 释放真正的 4 位 Tensor Core 吞吐量,去除无用的 B200 专属无用核函数。 |
| sm_121a 启动与 CUDA 图补丁 | RTLD-lazy 延迟加载 _C_stable_libtorch;对齐推测解码 CUDA 图捕获尺寸 | 绕过 GB10 上缺失的 MXFP4(仅限 SM100)符号依赖顺利启动;防止在推测解码的部分接受解码步骤中触发 cudaErrorIllegalAddress 错误。 |
| 统一内存调优 | --gpu-memory-utilization 0.6-0.7,全量 CUDA 图,异步调度,z-lab DFlash 草稿模型 | GB10 在 CPU 和 GPU 之间共享同一片 LPDDR5X 统一内存池;请保持 gpu-util 在 0.6-0.7(若存在共存服务 / 高并发 / fp16 KV / DFlash 则调得更低)—— 高于约 0.8 时共享内存池会发生频繁换页颠簸并使整机卡死,即便 0.85 也会停滞 —— 在此设置下可同时兼顾全图捕获与推测解码吞吐。 |
针对该模型的实际成效:
- 平稳扩展至 64 个并发请求且绝无崩溃(先前的镜像在推测解码下 c≥32 即崩溃)—— 在代码任务上 c=64 时聚合吞吐量高达 1,937 tok/s。
- 在 Blackwell Tensor Core 上实现原生 NVFP4 4-bit 计算 —— 兼具 4 位的极致速度与接近 16 位的运算精度。
- 推测解码 (DFlash) 从短提示词(c=1 时代码编写 58.9% / 信息提取 77.5%)到超长智能体历史(16k 时约 47%,32k 时约 41%)均能保持高接受率。
- 相比原生未优化的官方 vLLM 基线,单流解码速度最高提升 4.3 倍(各类别平均提升约 2.5 倍)。
关于原生基线的补充说明: “原生 / 未优化”对比数据来自原生官方 vLLM(
vllm/vllm-openai0.20.1,默认配置,无推测解码,无 DGX-Spark / sm_121a 专属优化)。这些属于临时数据,将在当前版本上完成全新的全原生重新基准测试后予以更新。优化后的数据测自最新的aeon-vllm-ultimate:latest(vLLM 0.24.0)构建版本。
容器镜像详情
AEON vLLM Ultimate(强烈推荐)
ghcr.io/aeon-7/aeon-vllm-ultimate:latest(= :2026-07-01-v0.24.0)— 代码仓库与完整模型卡片
| 组件 | 版本 |
|---|---|
| vLLM | 0.24.0 sm_121a 源码编译 + PR #44389 NVFP4-KV + PR #40898/#41703 DFlash 修复 + DFlash 高并发修复(PR #43982 移植至 DFlash) |
| PyTorch | 2.11.0+cu130 |
| transformers | 5.10.0.dev (HEAD) |
| flashinfer | 0.6.12 |
| DFlash 草稿模型 | 挂载 z-lab/gemma-4-26B-A4B-it-DFlash,草稿模型后端使用 flash_attn |
| 目标 GPU | NVIDIA GB10 (DGX Spark, sm_121a);亦支持 RTX 50 系列 (sm_120) |
固定版本标签::2026-07-01-v0.24.0(当前 :latest),:2026-06-18-v0.23.0-dflashfix(回滚版本)。较旧的 :2026-06-11-pr41703(vLLM 0.22.1 分支,DFlash 在 c≥32 时崩溃)、:2026-06-04-pr44389(修复前版本,仅支持 flex 草稿模型,前缀缓存与 DFlash 搭配使用不安全)以及 aeon-gemma-4-26b-a4b-dflash:v2(vLLM 0.20.1)分支均已被废弃替换,仅供历史对比参考。
原生社区基准镜像
vllm/vllm-openai:latest@sha256:9eff9734a30b6713a8566217d36f8277630fd2d31cec7f0a0292835901a23aa4
| 组件 | 版本 |
|---|---|
| vLLM | 0.20.1 |
| PyTorch | 2.11.0+cu130 |
| transformers | 5.7.0 |
| 推测解码 | 无 |
该镜像可用作当前上游官方的参照点。它并非 AEON DFlash 定制包,不包含 Gemma 4 DFlash 草稿模型支持路径。
包含的全部修复项
该模型在量化后需要进行多项关键修复才能在 vLLM 中正常运行。所有修复均已直接固化集成至本 HuggingFace 发布版本中 —— 无需用户进行额外的调试:
- 反量化了 760 个视觉塔张量(27 个 ViT 层)、120 个路由器张量(30 个 MoE 层)以及 4 个嵌入投影张量 —— 全部从原始 BF16 权重中完整恢复
- 修补了 vLLM 针对 compressed-tensors NVFP4 MoE 格式的权重加载器(
gemma4_patched.py—— 针对_weight_iterator和load_weights的 3 处专门补丁) - 在
config.json中补齐了audio_config与num_experts_per_tok(满足 vLLM 配置解析器的严格要求) - 创建了
preprocessor_config.json与processor_config.json以支持多模态输入 - 配置了 EOS token ID 列表
[1, 106, 50, 98, 100, 101],杜绝思考/内部通道 token 泄露
完整技术细节请参阅:HuggingFace 模型卡片
相关模型
| 模型 | 类型 | 体积 | tok/s (DGX Spark) | 相关链接 |
|---|---|---|---|---|
| 本项目模型 (Gemma 4 26B MoE + DFlash) | MoE NVFP4 | 15.3 GB | 代码单流持续 149–150 (c=1, 修复后镜像) / 代码聚合 1,724 (修复前测试;重新测试中) / 信息提取聚合约 3,700 (原生无草稿路径) | HuggingFace |
| Gemma 4 31B DECKARD AWQ_FULL | 稠密 NVFP4 | 20.5 GB | ~12-14 | HuggingFace | GitHub |
| Gemma 4 31B DECKARD SVDQuant | 稠密 NVFP4 | 20.9 GB | ~10-13 | HuggingFace |
| Qwen3.5-27B Uncensored | 稠密 NVFP4 | ~15 GB | ~15-18 | HuggingFace |
MoE vs 稠密模型:MoE 模型的运行速度比稠密模型快 3-4 倍,因为其每个 token 仅需读取约 4B 激活参数(128 个专家中激活 top-8),而稠密模型则需完整读取 27-31B 参数。追求高吞吐量与高并发时请选择 MoE,追求极致综合质量时可选择稠密模型。
免责声明、责任豁免与风险自负协议
这是一个未审查 (Uncensored) 的模型。 下载、访问或使用该模型、关联的容器镜像(ghcr.io/aeon-7/aeon-vllm-ultimate)或其任何衍生作品,即表明您明确知悉并同意以下条款:
风险承担
相较于经过安全对齐的模型,未审查语言模型具有显著升高的风险,包括但不限于:生成有害、误导性、非法或令人反感的内容;易受对抗性滥用;可能协助违反适用法律法规的活动;以及在输出可能未经人工审核即被执行的自动化或智能体管线中带来被放大的风险。
这些工具功能极其强大,可用于大量合法且至关重要的用途 —— 包括安全研究、红队对抗演练、内容分析、创意工作以及安全过滤器干扰正常业务流程的特定场景。然而,安全防护栏的缺位要求运营者承担相应更高的审慎注意义务。您必须根据您的具体使用场景和所在司法管辖区,自行实施适当的安全防护、内容过滤、访问控制和监控机制。
责任限制
本模型和容器镜像的作者、贡献者及分发者(“提供方”)对于因使用或滥用这些材料而导致的任何行为、生成的内容、遭受的损害或法律后果,概不承担任何直接或间接的责任。这包括但不限于:
- 模型生成的任何有害、非法、不道德或令人反感的内容
- 基于模型输出做出的任何决策或采取的任何行动
- 因使用该模型或容器而产生的任何损害 —— 无论直接、间接、附带、衍生、特殊或惩罚性损害,即便提供方已被告知发生此类损害的可能性
- 用户对任何当地、州、国家或国际法律法规的违反
用户责任
您(用户)对以下各项承担全部且唯一的责任和法律后果:
- 在您的操作下模型生成的所有输出内容
- 确保您的使用符合您所在司法管辖区的所有适用法律、法规及道德标准
- 部署适当的访问控制、内容审查过滤和人工监督机制
- 将该模型部署至生产环境、自动化系统或面向公众的系统所产生的任何后果
- 审慎评估未审查模型是否适用于您的特定业务场景
条款接受
下载或使用本发布版本的任何组件 —— 包括模型权重、容器镜像、配置文件或补丁代码 —— 即表示您接受这些条款,并自愿承担所有相关的风险与责任。 如果您不同意这些条款,请勿下载或使用这些材料。
许可证
本模型继承了来自 Google 的 Gemma 许可证。
支持这项工作
如果本发布版本对您有所帮助,非常感谢您的打赏赞助。所有打赏都将直接投入到更多的算力开销、更多的模型开发和更多的开源发布中。
以太坊 L2 网络(Base、Arbitrum、Optimism、Polygon 等)及 EVM 兼容代币可直接转账至相同的以太坊地址。