英伟达开源 Nemotron-Labs-TwoTower,把语言模型的生成路径从“一个 Token 接一个 Token 地吐字”推向“离散扩散式并行修正”。这件事值得关注,不只是因为模型规模达到 60B,更因为它基于已有 Nemotron 骨干网络改造、复用预训练权重,试图降低从零训练新架构的成本。
慢,不只慢在模型大
传统自回归语言模型的生成方式很直接:第 1 个 Token 生成完,才能生成第 2 个;第 2 个确定后,才能继续第 3 个。这个链条天然串行,哪怕单步推理被 GPU 优化得很快,长文本输出仍会被 Token-by-Token 的依赖卡住。
Nemotron-Labs-TwoTower 选择的是离散扩散语言模型路线。可以把它理解成:模型先面对一段“不完整”或“带噪声”的离散文本表示,再通过多轮去噪、填补、修正,逐步逼近最终答案。这个范式的潜力在于,某些位置可以并行更新,而不是每个位置都等待前一个 Token 完成。
这不是简单把模型堆大。来源摘要里提到,模型基于现有 Nemotron 骨干网络改造,复用预训练权重。这一点很关键:新生成范式如果必须完全从零训练,研发成本会非常高;能站在已有权重上改造,才更接近工程团队可以评估的路线。
双塔结构在解决什么问题
摘要给出的结构信息很具体:总参数量 60B,拆成两座 30B 独立神经网络协同工作;每塔激活 3B 参数;同时搭载 128 个可路由专家模块。
这几个数字背后的工程信号是:
- 60B 是总容量,不等于每次推理都完整激活全部参数。
- 两座 30B 网络协同,说明架构把职责拆开,而不是单体模型硬扛所有计算。
- 每塔激活 3B 参数,配合专家路由,意味着它更像稀疏激活模型:有较大参数池,但每次只走其中一部分路径。
- 128 个可路由专家模块给模型提供了分工空间,也带来路由稳定性、部署复杂度和显存规划问题。
这种设计的目标很明确:用更并行的生成机制缓解 Token 串行瓶颈,同时用稀疏激活控制单次计算量。真正落地时,开发者要看的不只是“总参数 60B”,还要看每步激活量、路由开销、批处理效率、KV/中间状态缓存策略,以及推理框架是否支持这种非传统生成流程。
可以这样实践:用一个玩具离散扩散流程理解“并行修正”
下面的代码不是 Nemotron-Labs-TwoTower 的官方实现,也不复现 60B 模型。它是一个最小可运行示例,用来说明离散扩散式文本生成和自回归生成的差异:我们先放置一串 [MASK],再多轮并行填补低置信位置。
运行前只需要本机有 Python 3.9+。
import random
VOCAB = ["GPU", "model", "token", "routing", "expert", "diffusion", "latency", "context"]
TARGET = ["diffusion", "model", "routing", "expert", "token", "latency"]
def score_candidate(position: int, word: str) -> float:
"""Toy scoring function: in a real model this would come from neural logits."""
base = 0.25
if word == TARGET[position]:
base += 0.65
if position > 0 and word == TARGET[position - 1]:
base -= 0.15
return max(0.01, min(0.99, base + random.uniform(-0.08, 0.08)))
def denoise_step(tokens, confidence, threshold):
updated = tokens[:]
updated_conf = confidence[:]
# Positions below the confidence threshold can be updated in the same round.
for i, conf in enumerate(confidence):
if conf >= threshold:
continue
candidates = [(score_candidate(i, word), word) for word in VOCAB]
best_conf, best_word = max(candidates)
updated[i] = best_word
updated_conf[i] = best_conf
return updated, updated_conf
def generate(rounds=5):
tokens = ["[MASK]"] * len(TARGET)
confidence = [0.0] * len(TARGET)
for step in range(1, rounds + 1):
threshold = 0.55 + step * 0.07
tokens, confidence = denoise_step(tokens, confidence, threshold)
print(f"round={step} threshold={threshold:.2f} text={' '.join(tokens)}")
print("confidence=", [round(x, 2) for x in confidence])
return tokens
if __name__ == "__main__":
final_tokens = generate()
print("final:", " ".join(final_tokens))
你可以直接运行:
python3 toy_discrete_diffusion.py
这个小例子体现的是工程直觉:离散扩散生成不是永远只追加最后一个 Token,而是维护一段候选序列,在多轮中选择位置、更新内容、提高置信度。真实模型会用神经网络 logits、噪声调度、采样策略和路由专家替代这里的手写打分函数。
评估时别只看“开源”和“60B”
对团队来说,Nemotron-Labs-TwoTower 的价值主要在三个方向:
- 研究生成范式:它提供了一个离散扩散语言模型的公开参考,适合研究非自回归或半并行文本生成。
- 降低实验门槛:基于 Nemotron 骨干网络改造、复用预训练权重,说明这类架构不一定只能从零开始。
- 推动推理系统升级:双塔、专家路由、并行去噪会给推理框架带来不同于标准 Transformer 解码的压力。
但边界也要看清楚。60B 总参数模型不适合轻量部署;专家路由会增加调度复杂度;离散扩散生成的质量、延迟和吞吐并不只由模型结构决定,还取决于去噪步数、采样策略、硬件利用率和服务端批处理设计。
如果准备跟进,可以按这个清单推进:
- 先确认目标是降低首字延迟、整体生成时延,还是提升批量吞吐。
- 单独压测短文本、长文本、多并发场景,不要只看单条 demo。
- 关注每塔激活参数和专家路由带来的显存峰值。
- 把离散扩散输出质量和自回归基线放在同一评测集里比较。
- 在推理框架支持成熟前,优先作为研究和原型验证,而不是直接替换生产 LLM。
Nemotron-Labs-TwoTower 的意义不在于宣布自回归模型过时,而是给大模型生成速度问题提供了一条更具体的工程路线:复用已有骨干网络,用双塔和专家路由承载离散扩散生成,再把“逐字等待”改造成“多位置协同修正”。