Download docs/11_elf_h200_next_steps.md from jyliuAI/diffusion_baseline: direct link, hf CLI and curl.
- Browser
- Download file 22.1 kB
-
https://huggingface.co/jyliuAI/diffusion_baseline/resolve/main/docs/11_elf_h200_next_steps.md
- Command line
-
hf download hf://jyliuAI/diffusion_baseline/docs/11_elf_h200_next_steps.md
-
curl -L -o 11_elf_h200_next_steps.md https://huggingface.co/jyliuAI/diffusion_baseline/resolve/main/docs/11_elf_h200_next_steps.md
DS210029:数据准备完成后,用单张 H200 跑 ELF
最新状态:已确认原始条件输入缺少 EOS 并修复。请优先按 文档 13 的恢复步骤 继续 WMT14/XSum 的 validation/test,使用新的 elf-h200-gpu2-eos-v2 结果根目录。 OWT 与前缀步骤仍可使用;不要整体重跑已经完成的格子。文档 12 是诊断期间的临时安排,现已被替代。
这份步骤从你 2026-09-11 已完成数据导出 的状态开始。按 A → B → C → D → E → F → G → H 顺序执行。所有命令都在服务器 ~/diffusion_baseline;不再执行 Conda 创建、pip 安装、源码下载或 prepare_elf.py assets/data。模型推理均使用同一张 H200、单进程、generation batch=8;正式 timing 固定 batch=1。
2026-09-12 sanity 日志更新:C/D 已成功完成,不再执行。 先阅读 D1 的指标判读;如果换了 shell,按 B 恢复环境,然后执行 E。F 尚未准备时可以先执行 G 的前三个任务;前缀 timing 已单列为可选后续命令。
A. 你已经完成什么,还需要跑什么
已完成:dlb-elf 环境、锁定 ELF 源码、10 项模型/数据资源下载及校验、以下 6 个 JSONL 导出。
| 数据文件 | 行数 | 用途 |
|---|---|---|
| wmt14-official-validation | 3000 | 作者预处理版本的 sanity check |
| wmt14-validation | 3000 | 扫步数、选择配置 |
| wmt14-test | 3003 | 冻结配置后的正式测试 |
| xsum-official-validation | 11332 | 作者预处理版本的 sanity check |
| xsum-validation | 11332 | 扫步数、选择配置 |
| xsum-test | 11334 | 冻结配置后的正式测试 |
最新日志还确认完成:物理 GPU 2 的 CUDA bf16 检查、OWT/WMT14/XSum smoke、三项 1000 样本 sanity 生成和质量评测。尚未收到正式全集质量、timing、OWT 前缀续写 prompts 的结果。OWT unconditional 无需下载训练集;OWT 前缀续写需要服务器上原 benchmark 的 held-out prompts,放在 F 单独准备。
本轮实验清单如下。先完成“核心”,再补扩展;不要上来直接运行最贵的 1024 步。
| 阶段 | 实验 | 步数 | 样本数 | 目的 |
|---|---|---|---|---|
| C | OWT/WMT14/XSum smoke | OWT 1/32;另两项 1/64 | 每格 2 | 确认加载、采样、条件编码能运行 |
| D | 官方配置 sanity | OWT 32;另两项 64 | 每格 1000 | 先检查质量大致合理 |
| E1 | OWT unconditional 核心 | 8/16/32/64 | 每格 1024 | PPL、entropy 曲线 |
| E2 | WMT14/XSum validation 核心 | 8/16/32/64 | 全集 3000/11332 | BLEU/ROUGE 随步数变化 |
| F | OWT 零样本前缀续写核心 | 8/16/32/64 | 每格 2048 个续写 | CPPL、entropy、Self-BLEU |
| G | 上述核心配置 timing | 相同步数 | 每格 5 warmup+32 repeats | 同一 H200 的独立延迟 |
| H1 | WMT14/XSum test 标准点 | 64 | 全集 3003/11334 | 正式 baseline 质量与 timing |
| H2 | 扩展曲线 | OWT/前缀 1/2/4/128/256/512/1024;条件任务 1/2/4 | 同正式设置 | 补齐此前要求的 grid |
本轮无需训练你的方法;先保存 ELF 基线。WMT14 是德译英,XSum 是摘要。
B. 固定使用物理 GPU 2(2026-09-12 更新)
你已确认当前空闲的是 2 号 H200 NVL,本轮所有实验固定使用物理 GPU 2。此前 9 月 11 日快照里的占用情况已过时,不再按物理 GPU 3 安排。正式 timing 期间仍保持该卡独占,不与其他生成、评测或训练进程并行。
先拉取文档更新,并记录开始前的 2 号卡状态:
cd ~/diffusion_baseline
git pull --ff-only origin main
nvidia-smi -i 2
下面通过物理 GPU 2 的 UUID 绑定进程,所有后续命令自动沿用该卡。本轮结果使用 results/elf-h200-gpu2,先前目录保持原样;无需重新下载或预处理。
长任务建议放在 tmux 中:若服务器已安装 tmux,先 tmux new -s elf-h200,然后在其中运行后续命令;离开按 Ctrl+B 再按 D,回来执行 tmux attach -t elf-h200。没有 tmux 时可先在当前 SSH 终端做 smoke,长任务前再安排不会断线的运行方式。
cd ~/diffusion_baseline
conda activate dlb-elf
export DLB_ROOT="$PWD"
export ELF_PYTHON="$CONDA_PREFIX/bin/python"
export PYTHONDONTWRITEBYTECODE=1
# 这里的 2 指 nvidia-smi 显示的物理卡号。
export ELF_PHYSICAL_GPU=2
export ELF_GPU_UUID="$(nvidia-smi -i "$ELF_PHYSICAL_GPU" --query-gpu=uuid --format=csv,noheader)"
export CUDA_VISIBLE_DEVICES="$ELF_GPU_UUID"
# 使用新的固定目录,避免与之前尝试过的结果混在一起。
export ELF_RESULTS="$DLB_ROOT/results/elf-h200-gpu2"
export ELF_BATCH_SIZE=8
export ELF_EVAL_BATCH_SIZE=8
export ELF_SEED=42
export ELF_COMPILE=0
unset ELF_STEPS ELF_COUNT ELF_SPLIT ELF_TIMING_PROMPT
mkdir -p "$ELF_RESULTS/logs" "$ELF_RESULTS/environment"
nvidia-smi -i "$ELF_GPU_UUID" > "$ELF_RESULTS/environment/gpu-before.txt"
printf '%s\n' "physical_gpu=$ELF_PHYSICAL_GPU" "uuid=$ELF_GPU_UUID" > "$ELF_RESULTS/environment/gpu-selection.txt"
python -m pip freeze > "$ELF_RESULTS/environment/pip-freeze.txt"
# 日志保存在文件中;pipefail 让 tee 不掩盖实验失败。
set -o pipefail
runlog() {
local label="$1"
shift
"$@" 2>&1 | tee "$ELF_RESULTS/logs/$label.log"
}
CUDA 接受 GPU UUID 作为 CUDA_VISIBLE_DEVICES;这种绑定避免把物理卡号与框架枚举顺序混淆。进程只见一张卡,所以 Python 显示 cuda:0 是正常的,它对应刚选定的物理 H200,不是机器的物理 GPU 0。NVIDIA 环境变量说明
进行一次小型 CUDA 检查:
python - <<'PY'
import os, torch
print('selected UUID:', os.environ['CUDA_VISIBLE_DEVICES'])
print('torch:', torch.__version__, 'wheel CUDA:', torch.version.cuda)
print('visible GPUs:', torch.cuda.device_count())
assert torch.cuda.is_available() and torch.cuda.device_count() == 1
print('logical cuda:0:', torch.cuda.get_device_name(0))
assert 'H200' in torch.cuda.get_device_name(0)
assert torch.cuda.is_bf16_supported()
x = torch.randn(256, 256, device='cuda', dtype=torch.bfloat16)
y = x @ x
torch.cuda.synchronize()
print('CUDA bf16 check passed:', tuple(y.shape))
PY
你的驱动为 575.57.08;保留已安装的 torch 2.5.1+cu124 即可,不需要为了 nvidia-smi 顶部显示 CUDA 12.9 改装 cu129。驱动支持版本与 wheel 内的 CUDA 运行时不是同一个字段;最终以这次实际 CUDA 检查和 smoke 为准。NVIDIA 兼容性说明
每次更换 SSH/tmux shell,需要重新执行环境设置和 runlog 定义。不要在同一 GPU 同时开多个实验终端;下面的命令全部串行。
C. 先跑 3 组 smoke,不先测正式 timing
以下小块使用子 shell 的 set -e,任何一项失败都会停止这一块;不要看到报错后直接进入下一节。
(
set -e
runlog smoke_owt env ELF_STEPS="1 32" bash scripts/run_elf_suite.sh smoke owt
runlog smoke_wmt14 env ELF_STEPS="1 64" ELF_SPLIT=official-validation bash scripts/run_elf_suite.sh smoke wmt14
runlog smoke_xsum env ELF_STEPS="1 64" ELF_SPLIT=official-validation bash scripts/run_elf_suite.sh smoke xsum
)
成功标志:每格进度到 2/2 samples、无 traceback、对应目录出现 generation.json 和 samples.jsonl。例如:
results/elf-h200-gpu2/smoke/owt/unconditional/steps_32/seed_42/compile_0/
results/elf-h200-gpu2/smoke/wmt14/official-validation/steps_64/seed_42/compile_0/
results/elf-h200-gpu2/smoke/xsum/official-validation/steps_64/seed_42/compile_0/
smoke 是功能检查,不凭两个样本判断论文质量;1 步生成很差也不等于实现错误。若失败,把对应 logs/smoke_*.log 的 traceback 发来。首次模型加载与文件校验期间可能暂时没有采样进度,不要因此再开第二份进程。
D. 1000 样本 sanity:确认质量合理,再花时间扫全集
这一节单独存到 results/elf-h200-gpu2-sanity,不会覆盖后面的正式 1024 样本或完整 validation。
(
set -e
export ELF_RESULTS="$DLB_ROOT/results/elf-h200-gpu2-sanity"
mkdir -p "$ELF_RESULTS/logs"
runlog owt32_generate env ELF_COUNT=1000 ELF_STEPS=32 bash scripts/run_elf_suite.sh generate owt
runlog owt32_evaluate env ELF_STEPS=32 bash scripts/run_elf_suite.sh evaluate owt
runlog wmt64_generate env ELF_COUNT=1000 ELF_STEPS=64 ELF_SPLIT=official-validation bash scripts/run_elf_suite.sh generate wmt14
runlog wmt64_evaluate env ELF_STEPS=64 ELF_SPLIT=official-validation bash scripts/run_elf_suite.sh evaluate wmt14
runlog xsum64_generate env ELF_COUNT=1000 ELF_STEPS=64 ELF_SPLIT=official-validation bash scripts/run_elf_suite.sh generate xsum
runlog xsum64_evaluate env ELF_STEPS=64 ELF_SPLIT=official-validation bash scripts/run_elf_suite.sh evaluate xsum
)
generate 只生成并保存样本;evaluate 才计算指标。评测成功会打印 JSON 并保存 metrics.json。OWT 32 步论文参考 PPL≈24、entropy≈5.15;WMT14 BLEU 和 XSum ROUGE 的论文 test 参考分别为 26.4、36.0/12.2/27.8。这些只是量级参照,当前 sanity 使用 1000 条 official-validation,不能当作 test 全集结果。明显偏离时先检查日志与样本,不根据 test 分数反复调参。
括号结束后,ELF_RESULTS 自动回到 B 设置的 results/elf-h200-gpu2,不需要手动 unset。
D1. 本次 sanity 日志判读:主指标合理,继续正式实验
三组均完成 1000/1000 samples 并打印评测 JSON,没有 traceback。终端先后打印 OWT、WMT14、XSum;条件任务的通用评测器都会打印 BLEU 和 ROUGE,应按任务读取主指标:
| 任务 | 本次主指标 | 前文记录的论文参考 | 判读 |
|---|---|---|---|
| OWT,32 步 | PPL 24.4239;entropy 5.1671 nats | 24.1;5.15 | PPL 高约 1.34%,entropy 高约 0.017,量级接近 |
| WMT14,64 步 | BLEU 25.7906 | 26.4 | 低约 0.61 BLEU;当前是前 1000 条 official-validation,不是论文 test |
| XSum,64 步 | ROUGE-1/2/L 36.3126 / 12.3464 / 28.1115 | 36.0 / 12.2 / 27.8 | 量级接近;不能据此声称 test 超过论文 |
XSum 的 BLEU=8.0842 是附带指标,不是截图中 XSum 的评价列;WMT14 的 ROUGE=59.24/33.29/53.85 也不应拿去对比 XSum。OWT 的 entropy 是每条文本的经验 unigram 熵,PPL 是 GPT-2 Large 的预测困惑度,两者不是同一个概率分布,所以不要求 entropy = ln(PPL)。ROUGE 的 _sem 是此次 1000 条样本之间的标准误,不是多个随机种子的标准差,不能与论文误差条直接判定显著性。
两条 tokenizer 警告均未导致本次失败:
clean_up_tokenization_spaces是所装 Transformers 版本的未来默认值提示,本次不用升级或重装环境。1037 > 1024来自评测脚本先对完整文本分词以统计原始长度;above_1024_tokens_fraction=0.002表示 1000 条里有 2 条超过 GPT-2 的 1024 上限。实际 PPL 调用compute_gen_ppl时明确设置truncation=True, max_length=1024,entropy 同样取前 1024 个 GPT-2 tokens。样本没有被丢弃,超长部分不计分,结果中已记录右截断策略。
长度还可做交叉检查:原始平均长度 946.265 对应总计 946265 tokens;减去每条不计首 token 的 1000 个目标以及截断掉的 21 tokens,得到日志中的 valid_token_count=945244。所有三项 empty_fraction=0,OWT 最短也有 828 个 GPT-2 tokens,未见空输出或极短输出退化的迹象。
结论:日志未显示需要修复的生成或计分错误,保留已有 sanity,不改采样参数、不重跑 C/D,进入 E 的正式步数扫描。 当前没有正式 timing,不能从 8/1000 samples 的进度或生成总用时推断单样本延迟。此次日志判读仅说明 sanity 合理,正式 test 和速度结论仍待测量。
E. 核心正式质量实验:OWT → WMT14 → XSum
先 OWT,后条件任务;同一张 H200 连续串行运行。显式固定 OWT 为 1024 条、条件任务为完整 validation,按每个步数先生成再评测,便于及时看到对应质量:
(
set -e
for steps in 8 16 32 64; do
runlog "owt_s${steps}_generate" env ELF_COUNT=1024 ELF_STEPS="$steps" bash scripts/run_elf_suite.sh generate owt
runlog "owt_s${steps}_evaluate" env ELF_STEPS="$steps" bash scripts/run_elf_suite.sh evaluate owt
done
for task in wmt14 xsum; do
for steps in 8 16 32 64; do
runlog "${task}_s${steps}_generate" env ELF_COUNT=0 ELF_STEPS="$steps" ELF_SPLIT=validation bash scripts/run_elf_suite.sh generate "$task"
runlog "${task}_s${steps}_evaluate" env ELF_STEPS="$steps" ELF_SPLIT=validation bash scripts/run_elf_suite.sh evaluate "$task"
done
done
)
预期每个 OWT 格子 1024 样本,WMT14 格子 3000 样本,XSum 格子 11332 样本。核心质量结果共 12 格。XSum 总 canvas 为 1088 T5 tokens,完整 validation 比 1000 样本 sanity 更耗时;不要把没有新终端输出等同于卡死。
查看任意一个完成的指标文件:
cat "$ELF_RESULTS/quality/owt/unconditional/steps_32/seed_42/compile_0/metrics.json"
cat "$ELF_RESULTS/quality/wmt14/validation/steps_64/seed_42/compile_0/metrics.json"
cat "$ELF_RESULTS/quality/xsum/validation/steps_64/seed_42/compile_0/metrics.json"
F. OWT 前缀续写:另外准备 prompts,再跑核心实验
刚导出的六个数据文件不含 OWT 前缀 prompts。先检查已有文件:
ls -l data/conditional/owt-c64/prompts.jsonl data/manifests/conditional-owt-c64.json
若文件已存在,直接在 bootstrap 环境验证;若不存在但已有原 benchmark 的 OWT 预处理数据,先构建再验证:
conda activate dlb-bootstrap
# 仅在 prompts 尚未准备时执行这一行:
python scripts/build_conditional_prompts.py --root "$DLB_ROOT" --dataset owt
python scripts/verify_conditional_prompts.py --root "$DLB_ROOT" --dataset owt
conda activate dlb-elf
export ELF_PYTHON="$CONDA_PREFIX/bin/python"
python scripts/prepare_elf.py prefix
如果构建提示缺少 OWT processed 数据,先完成 旧数据准备流程;这不会妨碍你先完成 E/G/H 中不依赖前缀的三个任务。不要用 WMT14 或 XSum 来替代 OWT prompts。
(
set -e
runlog prefix_smoke env ELF_STEPS="1 32" bash scripts/run_elf_suite.sh smoke owt-prefix
runlog prefix_core_generate env ELF_STEPS="8 16 32 64" bash scripts/run_elf_suite.sh generate owt-prefix
runlog prefix_core_evaluate env ELF_STEPS="8 16 32 64" bash scripts/run_elf_suite.sh evaluate owt-prefix
)
smoke 使用 2 个 prompts,每个 5 个续写,共 10 条;正式每格 1024 个主续写,加前 256 prompts 各 4 个额外续写,共 2048 条。默认得到 CPPL、entropy、grouped Self-BLEU;MAUVE 后续可补,不是继续主流程的前提。
G. 核心 timing:同一张 H200 独占时单独运行
测量前确认你自己的 generation/evaluate 均已结束,并重新检查所选卡,不能用 10:47 的旧快照代替:
nvidia-smi -i "$ELF_GPU_UUID"
如果仍有其他计算进程,等其结束或取得独占时段。就绪后执行:
(
set -e
nvidia-smi -i "$ELF_GPU_UUID" > "$ELF_RESULTS/environment/gpu-before-timing.txt"
runlog owt_core_timing env ELF_STEPS="8 16 32 64" bash scripts/run_elf_suite.sh timing owt
runlog wmt_core_timing env ELF_STEPS="8 16 32 64" ELF_SPLIT=validation bash scripts/run_elf_suite.sh timing wmt14
runlog xsum_core_timing env ELF_STEPS="8 16 32 64" ELF_SPLIT=validation bash scripts/run_elf_suite.sh timing xsum
nvidia-smi -i "$ELF_GPU_UUID" > "$ELF_RESULTS/environment/gpu-after-timing.txt"
)
只有完成 F 的 prefix 准备后,再单独测前缀任务;同样保持 GPU 独占:
(
set -e
nvidia-smi -i "$ELF_GPU_UUID" > "$ELF_RESULTS/environment/gpu-before-prefix-timing.txt"
runlog prefix_core_timing env ELF_STEPS="8 16 32 64" bash scripts/run_elf_suite.sh timing owt-prefix
nvidia-smi -i "$ELF_GPU_UUID" > "$ELF_RESULTS/environment/gpu-after-prefix-timing.txt"
)
也在另一个终端观察 GPU 是否被新任务占用;前后两张快照不能证明整个计时窗口独占。若发生干扰,此次 timing 标为受干扰,之后用新结果目录重测,不能据此算加速比。
每个格子固定 batch=1、5 次 warmup、32 次重复;无需将 ELF_BATCH_SIZE=8 改为 1,timing 入口会强制传 1。保存位置例:
results/elf-h200-gpu2/timing/owt/unconditional/steps_32/seed_42/compile_0/prompt_0/timing.json
results/elf-h200-gpu2/timing/xsum/validation/steps_64/seed_42/compile_0/prompt_0/timing.json
主要读取 results.sampler.seconds_per_sample;条件任务读取 results.sampler_cached_condition.seconds_per_sample 和 results.encoder_plus_sampler.seconds_per_sample,后者包含 T5 条件编码。它们包含最终神经网络解码,不含加载、CPU tokenizer、磁盘 IO 和指标计算。不要把 generation 的总 wall time 当作正式延迟。
H. 正式 test、扩展曲线和多 seed
H1:先固定论文标准 64 步条件配置,不在 test 上选择参数。使用完整 test 集:
(
set -e
runlog wmt_test_generate env ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh generate wmt14
runlog wmt_test_evaluate env ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh evaluate wmt14
runlog xsum_test_generate env ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh generate xsum
runlog xsum_test_evaluate env ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh evaluate xsum
# 仍须满足 G 的独占条件。
runlog wmt_test_timing env ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh timing wmt14
runlog xsum_test_timing env ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh timing xsum
)
WMT14 应为 3003 条,XSum 应为 11334 条。若还要报告更少步但质量接近的点,先在 validation 上选择并记录冻结配置,再指定那些步数跑 test,不自动把某个低步数点叫作最优。
H2:核心完成后补扩展,每个格子都生成、评测、计时。OWT/前缀比核心多 7 个步数,条件任务多 3 个:
(
set -e
for task in owt owt-prefix; do
runlog "${task}_extra_generate" env ELF_STEPS="1 2 4 128 256 512 1024" bash scripts/run_elf_suite.sh generate "$task"
runlog "${task}_extra_evaluate" env ELF_STEPS="1 2 4 128 256 512 1024" bash scripts/run_elf_suite.sh evaluate "$task"
runlog "${task}_extra_timing" env ELF_STEPS="1 2 4 128 256 512 1024" bash scripts/run_elf_suite.sh timing "$task"
done
for task in wmt14 xsum; do
runlog "${task}_extra_generate" env ELF_STEPS="1 2 4" ELF_SPLIT=validation bash scripts/run_elf_suite.sh generate "$task"
runlog "${task}_extra_evaluate" env ELF_STEPS="1 2 4" ELF_SPLIT=validation bash scripts/run_elf_suite.sh evaluate "$task"
runlog "${task}_extra_timing" env ELF_STEPS="1 2 4" ELF_SPLIT=validation bash scripts/run_elf_suite.sh timing "$task"
done
)
如果 F 未就绪,先把第一行循环中的 owt-prefix 去掉,之后再补它。如果低步数空输出导致 PPL 无效,脚本会保留 valid=false 并停止;这是可能的质量结果,不能删除空样本抬高指标。确认是哪一格后,用 ELF_STEPS 单独指定剩余未评测格子继续;不要把生成循环整体重跑,因为已有输出目录会被拒绝。
H3:第一次完整流程成功后才补关键点 seed 43/44 或 compiled 版本,避免现在一次启动过多配置。比如补两种条件任务的标准点:
(
set -e
for seed in 43 44; do
for task in wmt14 xsum; do
runlog "${task}_test_seed${seed}_generate" env ELF_SEED="$seed" ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh generate "$task"
runlog "${task}_test_seed${seed}_evaluate" env ELF_SEED="$seed" ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh evaluate "$task"
runlog "${task}_test_seed${seed}_timing" env ELF_SEED="$seed" ELF_STEPS=64 ELF_SPLIT=test bash scripts/run_elf_suite.sh timing "$task"
done
done
)
I. 结果位置、汇总与中断恢复
python scripts/summarize_elf.py \
--results "$ELF_RESULTS" --output "$ELF_RESULTS/summary.csv"
| 目录 | 内容 |
|---|---|
results/elf-h200-gpu2/logs/ |
每个步骤的终端日志 |
results/elf-h200-gpu2/smoke/ |
小样本功能检查,不能当正式质量结果 |
results/elf-h200-gpu2/quality/ |
正式 samples、generation manifest、metrics |
results/elf-h200-gpu2/timing/ |
原始重复测量、均值/中位数/标准差 |
results/elf-h200-gpu2/environment/ |
物理 GPU UUID 映射、环境和 GPU 快照 |
results/elf-h200-gpu2-sanity/ |
1000 样本预检查,与主实验分开 |
核心 E+F 的主质量格子共 16 个,相应 G timing 共 16 个;H1 另加 2 个 test 质量格子和 2 个 timing 格子。某项没跑就应留作 missing,不用别的 split 或 sanity 数据补数。summary 是逐 run 清单,质量和 timing 分开列,smoke 也可能显示 incomplete;不是完成度证明或自动排好的论文表。
失败目录不会被覆盖。若某次失败且目录已存在,先保留日志,用新的 ELF_RESULTS 目录(例如 results/elf-h200-gpu2-retry1)只重跑失败点;评测时要指向相同新目录。已经成功生成但尚未评测的点,只执行 evaluate;已经有质量结果而缺 timing,只执行 timing。不要在同一根目录里改变 seed/batch/compile 或样本数后覆写同一格。
如果 shell 断开后要恢复,先重新设置 B 中的变量和 runlog 函数,查询当前 GPU 占用,再从未完成的阶段继续。本次更新基于你提供的服务器终端日志,没有在服务器代跑;已确认 C/D 的运行结果,后续全集质量和实际 timing 仍待执行。