diffusion_baseline / docs /11_elf_h200_next_steps.md
jyliuAI's picture
Add files using upload-large-folder tool
93cd35a verified
|
Raw History Blame Contribute Delete
22.1 kB
# DS210029:数据准备完成后,用单张 H200 跑 ELF
**最新状态:已确认原始条件输入缺少 EOS 并修复。请优先按 [文档 13 的恢复步骤](13_elf_eos_fix.md) 继续 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 号卡状态:
```bash
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,长任务前再安排不会断线的运行方式。
```bash
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 环境变量说明](https://docs.nvidia.com/cuda/cuda-programming-guide/05-appendices/environment-variables.html)
进行一次小型 CUDA 检查:
```bash
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 兼容性说明](https://docs.nvidia.com/deploy/cuda-compatibility/minor-version-compatibility.html)
每次更换 SSH/tmux shell,需要重新执行环境设置和 `runlog` 定义。不要在同一 GPU 同时开多个实验终端;下面的命令全部串行。
**C. 先跑 3 组 smoke,不先测正式 timing**
以下小块使用子 shell 的 `set -e`,任何一项失败都会停止这一块;不要看到报错后直接进入下一节。
```bash
(
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`。例如:
```text
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。
```bash
(
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,按每个步数先生成再评测,便于及时看到对应质量:
```bash
(
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 更耗时;不要把没有新终端输出等同于卡死。
查看任意一个完成的指标文件:
```bash
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。先检查已有文件:
```bash
ls -l data/conditional/owt-c64/prompts.jsonl data/manifests/conditional-owt-c64.json
```
若文件已存在,直接在 bootstrap 环境验证;若不存在但已有原 benchmark 的 OWT 预处理数据,先构建再验证:
```bash
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 数据,先完成 [旧数据准备流程](02_datasets.md);这不会妨碍你先完成 E/G/H 中不依赖前缀的三个任务。不要用 WMT14 或 XSum 来替代 OWT prompts。
```bash
(
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 的旧快照代替:
```bash
nvidia-smi -i "$ELF_GPU_UUID"
```
如果仍有其他计算进程,等其结束或取得独占时段。就绪后执行:
```bash
(
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 独占:
```bash
(
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。保存位置例:
```text
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 集:
```bash
(
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 个:
```bash
(
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 版本,避免现在一次启动过多配置。比如补两种条件任务的标准点:
```bash
(
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. 结果位置、汇总与中断恢复**
```bash
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 仍待执行。