Nemotron-Labs-TwoTower 开源:用双塔离散扩散给语言模型提速

2026-07-06 36 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

英伟达开源 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 总参数模型不适合轻量部署;专家路由会增加调度复杂度;离散扩散生成的质量、延迟和吞吐并不只由模型结构决定,还取决于去噪步数、采样策略、硬件利用率和服务端批处理设计。

如果准备跟进,可以按这个清单推进:

  1. 先确认目标是降低首字延迟、整体生成时延,还是提升批量吞吐。
  2. 单独压测短文本、长文本、多并发场景,不要只看单条 demo。
  3. 关注每塔激活参数和专家路由带来的显存峰值。
  4. 把离散扩散输出质量和自回归基线放在同一评测集里比较。
  5. 在推理框架支持成熟前,优先作为研究和原型验证,而不是直接替换生产 LLM。

Nemotron-Labs-TwoTower 的意义不在于宣布自回归模型过时,而是给大模型生成速度问题提供了一条更具体的工程路线:复用已有骨干网络,用双塔和专家路由承载离散扩散生成,再把“逐字等待”改造成“多位置协同修正”。


相关推荐