开源扩散语言模型第一,消费级显卡跑不动,要69GB显存
Clover-35B-A3B-Preview 是 DiffuSpace 发布的首个模型。按官方博客报告的基准,发布时它在开源扩散语言模型里拿到最好成绩。
Clover 的写法是:每个块从一串被遮住的 token 开始,块内置信度高的位置并行解析、一起填充;如果所有位置的置信度都不够,就填最自信的那个,保证块还能继续往前推。默认每块 32 个 token,置信度阈值 0.95。已解析的块成为下一块的前缀,逐块往下走。
这要求模型在写当前块时能看到块内还没确定的位置。Clover 用双向块注意力解决:在原有主干上加一组可学习的 GDN 参数,包括右卷积权重和 softmax 控制,让噪声块内部的 token 能互相注意,同时保留因果前缀。
它的底座是 Qwen3.6-35B-A3B,一套 35B 参数的混合专家(MoE)架构,每个 token 只激活约 3B 参数。主干 40 层,256 个路由专家,top-8 路由,每层一个共享专家;这套 GDN/全注意力混合主干被保留下来,模型只处理文本。上下文窗口 128K token,提示和生成结果合计最多 131,072 个 token。
块去噪时,Clover 会把每个块路由到的专家收缩成一个子集,减少块里出现的不同专家数量,省算力。参数 moe_block_coreset_top_p 默认 0.9,意思是保留块内聚合路由质量的 90%,不是所有专家的 90%。调低它,选中的专家更少,可能有质量代价。
模型内置重复控制和结束偏向。生成时默认值从 generation_config.json 自动加载,正常使用不用额外传参,贪心解码也生效。具体默认值:presence_penalty 0.9,frequency_penalty 0.0,repetition_penalty 1.05,dllm_length_penalty 和 dllm_think_end_bias 都是 10。长度控制从第 8192 个响应 token 开始逐步加强,再用 8192 个 token 达到全强度;思考阶段的结束偏向在 4096 个 token 处启动,再用 4096 个 token 达到全强度。长文本常见的重复,由这些参数在内部处理掉。
硬件门槛不低。快速开始示例需要约 69 GB 显存装 BF16 权重,这还没算推理状态;消费级显卡达不到这个量级。128K 限制写死在代码里,超过上下文的请求会被直接拒绝,包括为解析最终完整块预留的空间。
对开发者,官方给了 SGLang 和 llama.cpp 的自推测解码实现,也有 Hugging Face Transformers 版本。Transformers 版本是独立的 PyTorch 推理路径。它和 SGLang 内核有微小数值差异,即使解码设置一样,生成文本也可能不同。官方建议服务和评估用 SGLang。快速开始示例基于 Transformers 5.19.0 和 PyTorch 2.10 或更高版本。
Clover 的权重来自 Qwen3.6-35B-A3B,上游模型资产版权归阿里云,采用 Apache-2.0 许可证。模型实现源自 Hugging Face Transformers 里用于 Qwen3.6 架构的 Qwen3.5-MoE 代码,版权归 Qwen Team 和 HuggingFace 团队。Clover 在 Qwen 架构上加了文本块扩散推理、双向 GDN 参数和生成控制。
69 GB 显存,SGLang 服务评估,128K 上限——这些信息都指向同一个定位:给部署者用的模型。
关键事实
- Clover-35B-A3B-Preview 是 DiffuSpace 发布的首个模型,在发布时于其博客报告的基准上,在开源扩散语言模型中达到最先进性能。
- Clover 采用 35B 参数混合专家(MoE)主干,每个 token 约 3B 激活参数,支持块扩散生成和 128K 上下文窗口。
- Clover 是纯文本模型,源自 Qwen3.6-35B-A3B,保留其混合 Gated DeltaNet (GDN) / 全注意力 MoE 主干,具有 40 层、256 个路由专家、top-8 token 路由和每层一个共享专家。
- Clover 使用双向块注意力:额外的学习 GDN 参数(包括右卷积权重和 softmax 控制)允许 token 在噪声块内进行注意力,同时保留因果前缀。
- Clover 支持 128K 上下文,即提示和生成响应合计最多 131,072 个 token。
- Clover 使用块扩散与低置信度解码:每个块以掩码 token 开始,并行解析置信位置。置信度高于阈值的填充;若无,则填充最置信的位置以确保进展。默认 block_size=32,threshold=0.95。
- 对于自推测解码,官方提供 SGLang 和 llama.cpp 实现,见官方代码仓库。
- 生成默认值从 generation_config.json 自动加载;generate() 的关键字参数覆盖默认值。超过 128K 上下文的请求会被拒绝,包括解析最终完整块所需的空间。