Untitled

 avatar
unknown
markdown
a month ago
26 kB
8
Indexable

MegaScience Rebuttal — Results Summary

Last updated: 2026-05-30 13:43 UTC+8 (overnight pipeline — ALL FINAL;新增方法学 + 数据分布章节)

本文档自成体系,可直接作为 rebuttal 附录:先给【端到端方法学】与【数据分布分析】,再给最终结果表与结论。 所有数字均从真实产物/脚本/parquet 核实;个别无法从文件核实的参数标注 (待核实)

Benchmarks: MATH-500, MMLU-Pro, GPQA-Diamond, SciBench (physics/chemistry/math). Eval harness: Data-Mixture/lm-open-science-evaluation (GPQA shuffle bug fixed), vLLM, temperature=0, few-shot, n_repeats=1. enforce_eager + on-disk-cache disabled (fixes the "checksum mismatch" crash that earlier zeroed mmlu/gpqa/scibench). Family-specific stop tokens: llama=128009, qwen2.5-chatml=151645/151643.

ALL RESULTS FINAL — 10 models × 6 benchmarks, epoch-3 checkpoints, all complete.


方法学(Methodology)— 端到端怎么做的

M0. 通用 pipeline(实验A / 实验B 共享的上游)

数据底座:MegaScience(v2,1.25M)。 全量 1,253,230 道题,三个 subset(核实自 megascience/results/analysis/difficulty_cross_proxy.jsonper_source 与 v2 判分 parquet):

subset(内部 source 名)行数占比
textbook_reasoning(Textbook)651,12551.9%
natural_reasoning(Natural)429,01934.2%
nemotro_science(Nemotron,注:源数据列名即此拼写)173,08613.8%
合计1,253,230100%

① Rejection sampling(拒绝采样,每题 8 次)。 对每道题,用两个 proxy 模型各生成 8 个候选答案:

  • proxy = Qwen2.5-7B-InstructLlama-3.1-8B-Instruct(即 judge_model_map 里的两个被判分对象)。
  • "每题 8 个样本"由判分总量反推核实:每个 proxy 的判分记录数 = 10,025,840 = 1,253,230 × 8, 两个 proxy 合计 total_judge_calls ≈ 20.05M(核实自 state JUDGE_20M_COMPLETE_2030 / total_judge_calls)。
  • 采样的具体温度 / top_p(待核实)—— 未在本工作区脚本中直接核到拒绝采样的采样旋钮。

② Length annotation(长度标注,greedy)。 用大模型 greedy 解码标注每题答案长度, 模型为 Qwen2.5-72B-Instruct / Llama-3.1-70B-Instruct(来自 paper / 交接文档;具体解码参数 待核实)。 产物落在 megascience/results/analysis/length_per_uuid.parquet(含 qwen_n_tokens / llama_n_tokens 两列,均已按 4096 训练 cutoff 截断)。这两列是后续实验A token 预算对齐的"标尺"(见 M2)。

③ 难度判分 v2(paper-faithful)。 严格复现 paper Figure 27 的判分 prompt,对每个 proxy 的 8 个 候选答案逐个打 0–10 分,再按题(uuid)取均值得到 mean_score分数越高 = 模型答得越好 = 题越简单)。 核实自 megascience/scripts/single_shard_judge_v2_hdfs_worker.py

维度取值(核实)来源
判分 promptmodel_eval.prompt(paper Figure 27)worker PROMPT_PATH 注释
参考答案reference_answer 列(短答案)worker src.column("reference_answer")
解码n=1, temperature=0.0, max_tokens=4096(贪心)worker jcfg
分数解析parse_score(),0–10(无法解析记 -1)worker
同家族判分Qwen-7B 样本 → Qwen2.5-32B-Instruct (TP=2);Llama-8B 样本 → Llama-3.1-70B-Instruct (TP=4)state judge_model_map
分片每个 proxy 64 shards,最多 4 个 run 各覆盖 16 shardsstate judge_run_ids
运行方式HDFS-only(输入/输出全走 HDFS)worker + handoff

为什么 HDFS-only: 早期 4 个 judge run 因 bytenas IDC 与队列不匹配(跨 IDC 不兼容)启动失败/被停, 改为输入输出全部走 HDFS(解 staging 失败,见 M5),从而可在任意空闲集群/IDC 上跑。

判分模型 HDFS 路径(核实自 state hdfs_paths):

  • Qwen2.5-32B-Instruct: huggingface/Qwen/Qwen2.5-32B-Instruct/data
  • Llama-3.1-70B-Instruct: models/Meta-Llama-3.1-70B-Instruct

产物:megascience/results/judge_v2_paper_faithful/{qwen25-32b-instruct__vs__qwen25-7b-instruct, llama31-70b-instruct__vs__llama31-8b-instruct}/per_uuid_difficulty.parquet(列 uuid, mean_score, n_samples)。

判分 run IDs(v2,核实自 state judge_run_ids,均 soil-hl):

proxyjudgeTPshardsrun IDs
Qwen-7BQwen2.5-32B20–63(4×16)8259563d52a103e6, eba15a5cd56fff94, 4a78649a734a9983, 4967ea35082988de
Llama-8BLlama-3.1-70B40–63(4×16)29e4bd6ce897363c, ff4c8e62692acd6e, fca9c02cff99572f, fcd9d88d35051da6

M1. 数据分布分析(关键 —— 直接驱动了实验A 的设计)

以下分布数字均实测自 v2 paper-faithful 的 per_uuid_difficulty.parquet(本次重新跑数核实)。

1.1 两个 proxy 的难度分布(mean_score 0–10,越高越简单)

统计量Qwen-32B 判 Qwen-7B(n=1,253,010)Llama-70B 判 Llama-8B(n=1,253,098)
mean8.327.05
std1.641.84
median9.007.38
p10 / p25 / p50 / p75 / p906.0 / 7.62 / 9.0 / 9.38 / 10.04.5 / 5.88 / 7.38 / 8.62 / 9.0
占比 >7(饱和)81.1%55.2%
占比 ≥950.3%15.2%
占比 =10(撞天花板)12.4%1.8%
占比 <2(极难)0.3%1.1%

饱和现象(核心): Qwen-32B judge 给 Qwen-7B 样本的分严重饱和——81.1% 的题 >7 分、 中位数 9.0、过半(50.3%)≥9 分。这意味着 Qwen judge 眼里绝大多数 MegaScience 题"很简单", 难度信号被压缩在顶端。Llama-70B judge 的分布明显更散(中位数 7.38,>7 仅 55.2%),区分度更好。

1.2 Cross-proxy 一致性(同一道题,两套 proxy×judge 的难度信号是否一致)

1,252,972 道题上对齐(uuid inner join)实测:

  • Spearman ρ = 0.6315(≈ 0.63),Pearson r = 0.6383 —— 中等正相关:两套 proxy 对"谁更难" 排序大体一致,但远非完全一致。
  • 最难尾部的选择重叠/分歧(取各自 mean_score 最低 = 最难的一批):
选取最难比例两 proxy 重叠率Jaccard分歧率(1−重叠)
最难 10%43.6%0.279~56%
最难 25%63.1%0.461~37%
最难 50%76.0%0.614~24%

即:选最难的 25%,两个 proxy 有约 37% 不一致;选最难的 10%,分歧高达约 56%尾部(最有信息量的难题)选择分歧 ~35–55%,正是 reviewer 担心的"proxy 依赖"的量化证据。

1.3 中间带(middle-band)占比 —— 为什么从 18 格缩到 6 格

paper 的难度筛选规则是取"中间带"(既非太简单也非太难):textbook/natural: 1<s<9nemotron: 2<s<9。 按此规则实测各 (subset, proxy) 落在中间带的占比(核实自 state A2_middleband_* + build 脚本统计):

subsetQwen proxy 中间带占比Llama proxy 中间带占比
textbook42.0%(273,572/651,123)80.6%
natural45.9%(197,074/429,019)85.0%
nemotron87.3%(150,872/172,868)94.0%

结论:6 个 (subset,proxy) 组合里有 5 个中间带占比 >80%(只有 Qwen-textbook / Qwen-natural 区分度好)。 中间带几乎 = 全量数据 ⇒ 在已筛过的数据上再做 "difficulty / length / random" 3-strategy × 3-subset × 2-family = 18 格全网格 ablation 会有 5/6 格信号近乎为零(选出来跟全量差不多,没有对比度)。

设计转向: 与其在退化的网格上烧 18×~16h 训练,不如直接回应 reviewer 的真正顾虑—— "换一个 proxy 选的数据,下游训练还一样好吗?"。难度信号 ρ=0.63、尾部分歧 35–55% 恰好让这个问题 值得测且非平凡。于是把 18 格压成 6 格 proxy-transfer(matched / crossed / random × 2 family)。

两张分布图(已生成):

难度分布对比

Cross-proxy 一致性


M2. 实验A 全过程(VeOmni,proxy-transfer,6 格)

设计动机: reviewer 关心"难度筛选是否依赖具体 proxy 模型"。直接测可迁移性:用 A 家族的 proxy 选数去训 B 家族模型,看能否仍超过 random baseline。

数据构造(核实自 veomni_sft/data/build_expA_proxytransfer.py + data/expA/manifest.json

  1. 中间带选数(union over 3 subsets):

    • Data_Qwen = Qwen proxy 中间带并集 = natural 197,074 + nemotron 150,872 + textbook 273,572 = 621,518 行
    • Data_Llama = Llama proxy 中间带并集 = natural 364,482 + nemotron 162,558 + textbook 524,532 = 1,051,572 行(对齐前)。
  2. token 预算对齐(单一标尺 = qwen_n_tokens,已 cap 4096):

    • B = min(sum_tok(Data_Qwen), sum_tok(Data_Llama))Data_Qwen 是较小方 = B 本身Data_Llama 用 shuffle(seed=42)按累计 token 截断到 B。
    • B = 507,297,565 qwen-tokens(≈ 507.3M) —— 这是最终权威口径
    • Data_Random = 从全量 MegaScience 随机采样(seed=4242)到 B。

    ⚠️ 口径冲突已澄清(507.3M vs 555M): 旧文档与早期草稿 veomni_sft/data/full/output/expA_data_summary.json 写的 budget = 555,039,316(≈555M)是被废弃的早期版本(用不同的 token 统计口径、未用最终的 qwen_n_tokens@4096 标尺)。最终训练实际使用的是 manifest.json 的 507.3M(其行数 621,518 / 622,277 / 645,060 与 state expA_data_HDFS 记录的实训数据完全一致)。以 507.3M 为准,555M 作废。

  3. 对齐后最终三数据集(核实自 manifest.jsonref_tokens 列 = qwen_n_tokens):

数据集行数参考 token(qwen_n_tokens,≈507.3M)采样 seed
Data_Qwen621,518507,297,565—(= 预算 B 本身)
Data_Llama622,277507,296,29442
Data_Random645,060507,297,5414242

三者参考 token 数对齐到 ≈507.30M,唯一变量是"哪个 proxy 选的数据",可干净比较。

  1. 每格实际训练 token(VeOmni TRAIN_SIZE,用各自训练 tokenizer + chat template 计,核实自 state expA_train_sizes):
cellA1A2A5A3A4A6
train tokens561.3M532.2M522.0M511.7M539.0M501.6M

这些数与 507.3M 不同是正常的:507.3M 是用统一标尺 qwen_n_tokens 算的对齐预算;而 VeOmni 需要 用实际训练模型自己的 tokenizer + 模板(Qwen chatml / Llama3)重新统计 token 数来排 steps / LR schedule。 等预算保证是在共享标尺(qwen_n_tokens ≈507.3M)上成立的。

6 个 cell 定义

cellbase 模型训练数据类型训练 run ID(final,robust=10)
A1Qwen2.5-7BData_Qwenmatcheda3b624cd43d2ede1
A2Qwen2.5-7BData_Llamacrossedb87251207c8f7a38
A3Llama-3.1-8BData_Llamamatchedb8c2674c0158bbc8
A4Llama-3.1-8BData_Qwencrossed34d1695d688318ad
A5Qwen2.5-7BData_Randombaseline42850b01303d9dcd
A6Llama-3.1-8BData_Randombaselinec58e43fbdef727b7

第一批无 robust 的 run 被抢占驱逐(state expA_evicted_runs,6 个);上表为最终 robust_run_count=10 的批次。

base 模型 HDFS 路径:Qwen2.5-7B /models/Qwen2.5-7B; Llama-3.1-8B base models/Meta-Llama-3.1-8B

VeOmni 训练超参(核实自 veomni_sft/README.md,与 expB LlamaFactory 严格对齐)

维度取值说明
lr5e-6--train.lr 5e-6
global batch128token-block 数;tokens/step = 128×4096 = 524,288,与 LF 一致
epoch3--train.num_train_epochs 3
max_seq_len4096cutoff
packingrmpad_with_pos_ids + dyn_bsz变长 token-based packing
loss 范围只算 responseloss_mask:assistant=1,其余=0)
LR schedulecosine + warmup_ratio 0.05
weight decay / grad clip0.0 / 1.0对齐 LF
bsz_warmup_ratio0关掉 VeOmni 特有 batch warmup 以对齐 LF
chat templateQwen=chatml;Llama=自定义 Llama3Template见 M5 BUG2
资源2×8 A100(4 节点 rendezvous 不稳,落 2 节点)

Llama3Template 注入: 镜像内 VeOmni(data/VeOmni@zqfan_vesft没有 CHAT_TEMPLATE_REGISTRY 装饰器,而是用普通 dict TEMPLATES={...} + 抽象基类 ChatTemplate(ABC),且按 message["loss_mask"]==1 (而非 role)掩码 label。故为 Llama 追加了 class Llama3Template(ChatTemplate)TEMPLATES["llama3"]=Llama3Template (BOS=128000,header token,仅 assistant span 算 loss)。本地 encode 验证通过(loss_tokens=7)。

ckpt → HF: VeOmni save_hf_weights=True(默认)在训练末自动把分布式 ckpt 合成 HF safetensors 到 <final_ckpt>/hf_ckpt(4 个 safetensors ~15GB + config + tokenizer),finals 无需再单独 mergesave_epochs=1 每 epoch 存一个分布式 ckpt,单独转早期 ckpt 用 VeOmni/scripts/merge_to_hf_pt.py。 qwen finals 的 merge fork-run(核实自 state):A1 916bc1d3 / A2 8aea8bb3 / A5 d3b213e7; llama A3/A4/A6 finals 同样以 fork-run 合并(state 记 gs2931/gs3087/gs2871)。评估 run IDs 见文末表。


M3. 实验B 全过程(LlamaFactory,mixture ablation,4 SFT)

设计动机: 数据配比 / 来源组合消融——固定 base 模型与 token 预算,看不同 2-source 组合 (leave-one-source-out 风格)相对 random 混合的差异。

4 个组合 + 等 token 预算(核实自 state expB_pair_sums / expB_budget_qa_tokens / expB_progress

  • 三个 2-source 组合的原始 token 量(question+answer,qwen tokenizer): nat+nemo = 670.1Mnat+tex = 828.9Mnemo+tex = 451.5M
  • 等预算 = 三者最小 = 451,501,176 qa-tokens(≈451.5M,即 nemo_tex 对)。 另两个 2-source 组合 下采样到 451.5M;mix_random 从全量随机采样到 451.5M。
config组合对齐后行数训练 run IDepoch-3 final loss
mix_nat_nemoNatural + Nemotron405,734d31a9caabe8dfea30.431
mix_nat_texNatural + Textbook588,539c8a4a4944382a98e0.426
mix_nemo_texNemotron + Textbook824,2114da002af8087544e0.436
mix_random全量随机580,393c4900af558db98d60.435

nemo_tex 是预算基准(不截断)故行数最多;行数差异源于各组合的平均答案长度不同。

LlamaFactory 超参(核实自 megascience/scripts/sft/mix_*.yaml,4 个 yaml 一致)

维度取值
baseQwen2.5-7B(base)
finetuning_typefull
并行DeepSpeed ZeRO-3examples/deepspeed/ds_z3_config.json
attnflash_attn: sdpa(镜像自带 vendored vllm-flash-attn,非标准 flash_attn 轮子;避免 ImportError/60min 编译)
templateqwen
cutoff_len4096
packingtrue
train_on_promptfalse(只算 response)
有效 batchper_device 2 × grad_accum 8 × 8 GPU = 128(+ gradient_checkpointing 省显存)
lr5.0e-6
epoch3
scheduler / warmupcosine / warmup_ratio 0.05
精度bf16
资源8×A100(soil-hl,idc=hl)

ckpt 落 HDFS: 训完自动 push 完整 HF 权重到 megascience/sft_ckpts/<config>/<config>/ (current-run 命名为双重 <config><config>_full 为早期 stale 产物,忽略)。 每个根目录含 config.json + model-0000{1..4}-of-00004.safetensors + tokenizer。


M4. 评估 harness(10 个模型 × 6 benchmark)

  • repo:Data-Mixture/lm-open-science-evaluation(vLLM 推理)。
  • benchmark(核实自 configs/veomni_expA_bench.json):MATH-500、MMLU-Pro、GPQA-Diamond、 SciBench-physics、SciBench-chemistry、SciBench-math(均 SFT-format prompt,0/few-shot 模板)。
  • 采样参数(核实自 veomni_sft/run_veomni_eval_worker.sh):temperature=0n_repeats=1(贪心、单次)。
  • family 专属 stop token:llama=128009;qwen2.5-chatml=151645/151643
  • GPQA shuffle bug 已修(核实自 data_processing/process_utils.py):process_gpqaprocess_gpqa_sft 均把 random.seed(42) 改为 random.Random(item["Question"]).shuffle(options) —— per-item 确定性洗牌, 消除"正确答案永远落同一选项位置"的位置泄漏(GitHub issue GAIR-NLP/lm-open-science-evaluation#1)。
  • 评估 canary 验证:math-500 = 67.8%(pipeline 闭环验证通过,eval run facb52dd87d4db1e)。

实验结果(Results)

Experiment A — VeOmni proxy-transfer (6 cells) — ALL FINAL

Matrix: train model × data selector (matched = same-family proxy, crossed = other-family proxy, random = baseline), token-budget-aligned (B = 507.3M qwen-reference tokens, 口径见 M2;旧文档的 ~555M 已作废), 3-epoch SFT.

CellTrainSelectorMATH-500MMLU-ProGPQASciB-PhysSciB-ChemSciB-MathAvg
A1Qwen-7Bmatched71.6059.2939.9045.8150.3866.6755.61
A2Qwen-7Bcrossed73.2058.5433.3344.9348.8764.6353.92
A5Qwen-7Brandom72.4059.0833.3346.2645.4964.6353.53
A3Llama-8Bmatched43.4049.5536.8729.0731.5841.5038.66
A4Llama-8Bcrossed43.2050.6734.8532.6036.0944.2240.27
A6Llama-8Brandom42.6049.3735.8625.1134.5938.1037.60

Proxy-transfer conclusions

Qwen family (epoch 3, final):

  • matched 55.61 > crossed 53.92 > random 53.53
  • Same-family proxy selection is best; cross-family data still beats random.
  • Supports the proxy-transfer hypothesis: difficulty-based selection improves SFT regardless of which proxy picks the data, and same-family proxy is modestly better.

Llama family (epoch 3, final):

  • crossed 40.27 > matched 38.66 > random 37.60
  • Both difficulty-selected sets clearly beat random (+2.67 / +1.06 avg).
  • Crossed (Qwen-selected data) slightly edges matched (Llama-selected), suggesting the Qwen proxy may produce a more discriminating difficulty signal even for Llama training (consistent with Qwen-32B judge's tighter score distribution).

Cross-family synthesis:

  • In both families, difficulty-selected data > random baseline — the core claim (difficulty-based curation is effective) holds robustly.
  • Cross-proxy transfer is positive: using one family's proxy to select data for another family still outperforms random, confirming proxy-invariance to a degree.
  • The ordering matched vs crossed is family-dependent (Qwen: matched > crossed; Llama: crossed > matched), likely reflecting the proxy quality asymmetry (Qwen-32B judge is more discriminating than Llama-70B, ρ=0.63 cross-proxy).

Experiment B — Mixture ablation (4 SFTs) — ALL FINAL

4 × Qwen2.5-7B full SFT, equal token budget (451.5M), 3 epochs (loss ~0.43).

ConfigMATH-500MMLU-ProGPQASciB-PhysSciB-ChemSciB-MathAvg
mix_random70.4056.9537.3744.0545.1163.9552.97
mix_nat_nemo69.4057.6237.8841.8541.3559.1851.21
mix_nat_tex72.8055.2433.8449.3436.4759.1851.15
mix_nemo_tex69.6056.8733.3334.3640.6057.8248.76

Mixture signal: the random mixture has the highest 6-benchmark average (52.97), ahead of nat_nemo (51.21) ≈ nat_tex (51.15) > nemo_tex (48.76). Per-benchmark leaders vary (nat_tex best on MATH-500 & SciBench-physics; nat_nemo best on MMLU/GPQA; random best on SciBench-chem/math). Differences are within ~4 points — no single mixture dramatically dominates, but nemo_tex underperforms.


Overall takeaways for rebuttal

  1. Difficulty-based data selection works: In both model families, difficulty-selected data (matched or crossed) outperforms random baseline on science/math benchmarks.
  2. Proxy-transfer is viable: Cross-family proxy selection still improves over random, supporting the claim that the difficulty signal is not proxy-specific.
  3. Proxy quality matters asymmetrically: Qwen-32B judge produces tighter, more discriminating scores — its selections help Llama more than Llama-70B selections help Qwen. This aligns with the cross-proxy Spearman ρ=0.63 and overlap analysis.
  4. Mixture composition: Among 2-source mixtures at equal token budget, no mixture clearly dominates the random baseline on average, though per-benchmark variation exists.

Eval run IDs (final epoch-3)

ModelEval Run IDStatus
A1 (Qwen matched)7444bea2 (qwen final)DONE
A2 (Qwen crossed)4a11d456 (qwen final)DONE
A5 (Qwen random)db76f5d7 (qwen final)DONE
A3 (Llama matched)05ad9e0fa2543080DONE
A4 (Llama crossed)978696f450f96673DONE
A6 (Llama random)015ce1da9a297509DONE
expB nat_nemo609ec4eaDONE
expB nat_tex897d855eDONE
expB nemo_tex3a7ca704DONE
expB random80e6e535DONE

M5. 过夜工程踩坑与修复(核实自 state 各 *_FIX / ROOT_CAUSE_* 记录)

训练侧(VeOmni / 实验A)

  • Llama 模板"两连环" bug(qwen 是 chatml,跳过该补丁块所以不受影响):
    • BUG1(exit 1): worker 里用 CT=$(python3 -c '...print(m.__file__)') 捕获 chat_template.py 路径, 结果把 python 启动时的 SCM/HDFS env 噪声一起捕进 $CT → 路径变垃圾 → grep/cat 失败。 修复: 改用 sentinel print('CTPATH=>'+path)|sed|tail -n1 + [ -f ] 守卫。
    • BUG2(DONE-empty,exit 0 但没训): train_torch.pyNameError: 'CHAT_TEMPLATE_REGISTRY' not defined (chat_template.py:342)。根因:镜像内 VeOmni(zqfan_vesft commit 5ec47b83)不用 registry 装饰器, 而是普通 dict TEMPLATES={...} + ChatTemplate(ABC) + 按 message['loss_mask']==1 掩码。 修复: 重写注入为 class Llama3Template(ChatTemplate)(用 loss_mask)+ TEMPLATES['llama3']=Llama3Template。 用 2 个 1-GPU probe job dump 在线 chat_template.py 才定位到。
    • 教训:forked VeOmni 多机会静默 exit0/FAIL,必须验证 loss 收敛后才算起来。
  • VeOmni ckpt 是分布式格式: per-epoch 存的是 global_step_N/{model,optimizer,extra_state}(无 hf_ckpt)。 finals 靠 save_hf_weights=True 训练末自动出 hf_ckpt;要转早期 ckpt 用 run_veomni_merge_worker.shfork-run 提交,非 create-run)→ merge_to_hf_pt.py → HF。
  • NCCL 镜像差异: VeOmni 镜像 NCCL 2.21.5 在 H800(soil-lf grp671)报 nvmlDeviceGetHandleByPciBusId() failed → 多机崩;A100 多机 OK(与 reference 同 image)。优先 A100。
  • 4 节点 rendezvous 不稳: full run 用 4×8 A100 在 TCPStore/首个 NCCL communicator 建立时偶发崩 (failed to recv, got 0 bytes);2×8 A100 稳定,故 full run 落 2 节点。

判分侧(实验A 难度信号)

  • HDFS-only staging 失败(突破点): judge job 在 0 pod、空 err、308s timeout 处死——根因是 idc / quota / group_names 为空。修复: 显式设 arnold_*(idc + group_names)+ use_robust_training。 这也是判分/SFT 全面改走 HDFS-only 的原因(兼容跨 IDC)。
  • vLLM generate(prompt_token_ids=...) TypeError: 该版 vLLM 接口不接受该参数 → 8 个 run 崩溃循环; 修复入参后重投 8 个 fresh run。

评估侧

  • vLLM cache corruption("Bytes object corrupted, checksum mismatch")把 mmlu/gpqa/scibench 清零 → 修复:enforce_eager=True + TORCHINDUCTOR_FORCE_DISABLE_CACHES + VLLM_DISABLE_COMPILE_CACHE
  • qwen no-stop 拖慢:base config eos=151643,但 chatml-SFT 输出 151645 → eval 跑到 max_tokens (mmlu_pro 数小时)。修复 qwen stop=[151645,151643] → mmlu_pro ~12 min,精度不变(math-500 前后一致),快 10–50×。
  • llama eval:staged 到 llama_hf_ckpt 让 stop=128009 生效。
  • --model-size8b:llama-8B 评估用 --model-size 7b --model-family llama
  • eval worker stdin 被吞while read | hdfs get 消耗了循环 stdin → 只 stage 了 1 个文件 → FATAL_NO_CONFIG; 修复为先抓 FILES 列表再 for-loop + </dev/null
  • GPQA shuffle bugrandom.seed(42)random.Random(item["Question"]).shuffle()(per-item 确定性,无位置泄漏)。

关键产物 / 路径速查

  • 难度判分产物:megascience/results/judge_v2_paper_faithful/{judge}__vs__{proxy}/per_uuid_difficulty.parquet
  • 分布图:同目录 difficulty_dist_compare.pngdifficulty_cross_proxy_agreement.png
  • 实验A 数据 + manifest:veomni_sft/data/expA/manifest.json = 权威 B/行数/seed)
  • 实验A 数据构造脚本:veomni_sft/data/build_expA_proxytransfer.py
  • 实验A HDFS 数据:hdfs://.../user/wangzengzhi/megascience/.../veomni/expA_data/cell_A{1..6}_*.jsonl
  • 实验B yaml:megascience/scripts/sft/mix_{nat_nemo,nat_tex,nemo_tex,random}.yaml
  • 实验B ckpt:hdfs://.../megascience/sft_ckpts/<config>/<config>/
  • 评估 repo / 配置:Data-Mixture/lm-open-science-evaluationconfigs/veomni_expA_bench.json
  • VeOmni 复用文档:veomni_sft/README.md
Leave a Comment