|
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
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 仍待执行。 | |