NV1 Converter:原 80k 与 FullCtx 两份 checkpoint

本仓库保存我们在 NV1 复现实验中训练、评测的 两份 hidden-to-embedding converter 权重,均为 seed42、500 个 optimizer steps。每份权重分别用 temperature=0 和 temperature=1 评测,因此共有四组评测结果;温度是解码参数,不对应额外训练的 checkpoint。

这两份文件仅包含 converter,不包含 LLaDA2.0-mini 基座、tokenizer、优化器或完整训练恢复状态。它们需要与兼容的基座及 CLLADA converter 解码器共同使用,不能直接当作完整模型交给 AutoModelForCausalLM.from_pretrained。

两份权重

目录 训练数据候选池 完整上下文要求 训练步数 Global batch 实际呈现样本数
raw80k-s500-seed42 80,000 条 不筛选;训练时保留回答并截断超长上下文 500 4 2,000
fullctx15724-s500-seed42 15,724 条 应用训练 tokenizer/template 后,完整问答可放进 1024 tokens 500 4 2,000
  • 原 80k:使用四领域均衡的英文指令数据,chat/code/math/stem 各 20,000 条。数据已发布在 gj120018/converter_training_datasets,上游为 NVIDIA Nemotron-Post-Training-Dataset-v2。
  • FullCtx:使用从上述 80k 中筛选、重新均衡的 15,724 条完整上下文数据,四类各 3,931 条。该数据文件不包含在本模型仓库中,也不是后续 70,544 条扩展池。
  • 原 80k 在这次 500 步实际见到的 2,000 条样本中,793 条发生 prompt 截短,其中 358 条完全丢失问题内容。FullCtx 旨在避免这一问题;筛选同时改变了样本成员与长度分布。
  • 候选池大小不等于实际训练样本数:两份模型都是 500 × 4 = 2,000 条样本呈现,并非遍历了全部候选池。

结构和共同训练配置

基座为冻结的 inclusionAI/LLaDA2.0-mini。本地训练与评测使用其 merged/stacked-expert 形式;加载基座时需要匹配该参数布局。

Converter 结构为 Linear(2048, 2048, bias=True) → LayerNorm → L2 normalize → learned scalar,共 4,200,449 个 FP32 参数。基座使用 BF16,训练中只更新 converter。

参数 值
最大训练序列长度 1024 tokens
Optimizer steps / seed 500 / 42
Global batch / micro batch 4 / 1
优化器 AdamW,β=(0.9, 0.999),weight decay=0
学习率 / warmup / schedule 0.001 / 3% / cosine
Gradient clipping 1.0
Block size 32
continuous_mode cadd
noise_range [0.001, 1.0]
continuous_dropout 0.0
converter_mlp / auxiliary MSE false / 0.0

这里的 continuous_mode=cadd 描述 converter 的训练输入构造,不代表训练了全参数 CADD 模型。训练第一遍在 masked 位置使用 MASK_embedding + (1-t) × clean_embedding + t × Gaussian_noise,再通过 converter 输出进行第二遍预测。

两个目录均附有 training_config.yaml。其中机器路径已替换为 /path/to/... 占位符;配置取自重新训练后与这两份权重全部五个参数精确相等的 500 步控制实验。

四组评测结果

截至 2026-10-21,使用完整 HumanEval 164 题、tpf1、生成上限 512 tokens、当前修复温度及 EOS/预算边界后的 cllada_infer,得到以下单次运行结果。

Checkpoint Temperature HumanEval 正确题数 HE pass@1 HumanEval+ 正确题数 HE+ pass@1
原 80k 0 117/164 71.34% 109/164 66.46%
原 80k 1 123/164 75.00% 117/164 71.34%
FullCtx 15,724 0 131/164 79.88% 124/164 75.61%
FullCtx 15,724 1 133/164 81.10% 125/164 76.22%

评测设置:block length=32、每块 sampling steps=32、converter threshold=1.1、use_cache=False;输入为 # language: python\n{prompt} 并套用模型 chat template。评分使用 EvalPlus 0.3.1 和 HumanEvalPlus-v0.1.10,经仓库 he_pass 执行代码提取、prompt 拼接和 sanitize。

相关运行环境:Python 3.11.13、PyTorch 2.7.1+cu128、Transformers 4.56.2、Triton 3.3.1、Liger 0.6.2。上表 T=1 为随机采样的一次完整评测,分数可能随采样状态、环境和解码实现变化;它不是多个种子均值。训练窗口 1024 与评测生成上限 512 是不同参数。

evaluation_results.json 保存机器可读设置与汇总;每个模型目录中的 humaneval_t0_scores.json / humaneval_t1_scores.json 保存 164 题逐题通过情况。

复现边界: NV1 文档给出的 converter 目标为 T=1 时 84.15%、T=0 时 85.98%。本仓库这两份模型尚未达到这些分数。FullCtx 改变了训练数据,不能被当作原 80k 配方的逐样本复现;本仓库也不包含作者文档原始出分权重。

下载与加载

有仓库访问权限并完成 Hugging Face 登录后:

hf download gj120018/converter --local-dir ./converter

加载 converter 模块(该示例不加载完整基座,也不执行文本生成):

import sys
import torch

sys.path.insert(0, "./converter")
from hidden_emb_converter import HiddenToEmbConverter

path = "./converter/fullctx15724-s500-seed42/hidden_emb_converter.pt"
# 原 80k 则改为 ./converter/raw80k-s500-seed42/hidden_emb_converter.pt
ckpt = torch.load(path, map_location="cpu", weights_only=True)
converter = HiddenToEmbConverter(
    hidden_size=ckpt["hidden_size"],
    mlp=ckpt["converter_mlp"],
)
converter.load_state_dict(ckpt["state_dict"], strict=True)
converter.eval()

hidden_emb_converter.py 是与权重匹配的模块实现。导出字典包含 state_dict、hidden_size=2048、converter_mlp=False、continuous_mode="cadd";state_dict 中有 scale、proj.weight、proj.bias、post_norm.weight、post_norm.bias 五项。

在已经配置好 CLLADA 源码、依赖、基座和评测数据的环境中,可将下载文件传入其现有评测入口:

python -m cllada_infer.run_eval \
  --task he --model converter --decode tpf1 --temp 0 \
  --base /path/to/llada2.0-mini-moe-merged \
  --converter_path /path/to/converter/fullctx15724-s500-seed42/hidden_emb_converter.pt \
  --save fullctx_t0.json

将 --temp 0 改为 --temp 1 即使用同一份权重进行 T=1 评测。需使用已修复温度处理的解码实现;现存早期 converter 源码接受 temperature 参数但没有使用,不能将该版本的 --temp 1 结果视为真正的 T=1。完整基座、CLLADA 解码器、训练数据和测试执行环境需另行准备,本仓库附带的模块只用于加载 converter 本身。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for gj120018/converter

Finetuned
(6)
this model

Dataset used to train gj120018/converter