OpenWAM run1–run40 checkpoint archive
Built on NVIDIA Cosmos.
Public research archive of 40 final SFT policies, two WAM pretraining policies,
10 independent S-VAE artifacts and one VideoRAE encoder fine-tuning artifact.
Shared frozen components are stored once; the included tools reconstruct each
original policy checkpoint byte-for-byte. Original tensor precision is preserved.
This is an archive format, not a standalone Transformers from_pretrained model.
Inference requires a compatible OpenWAM checkout and its benchmark environment.
Upstream components retain their respective licenses. Read LICENSE,
NOTICE and component attribution.
The names OpenWAM-private-checkpoints and private/ do not restrict access:
this repository and every uploaded file are public.
The initial upload is complete only after PUBLICATION_COMPLETE.json appears.
That marker records the verified data revision; publication-manifest.json lists
the exact source files and their SHA-256 checksums.
Download and evaluate
hf download qiuly/OpenWAM-private-checkpoints --local-dir ./checkpoints
python3 ./checkpoints/tools/checkpoint_archive.py list
python3 ./checkpoints/tools/checkpoint_archive.py verify --workers 8
python3 ./checkpoints/tools/checkpoint_archive.py eval run40 --repo /path/to/OpenWAM
eval restores a complete checkpoint outside the archive before calling the
OpenWAM LIBERO evaluation entry point. Keep the normalization statistics,
configuration and tokenizer files. The compatible source revision used for the
archive loading checks is cc4bf0c6bd3e016723c0b4050cd93b7d5c827ef6 from
OpenWAM-private; access to that
source repository and installation of its runtime are separate from this model
archive. CPU loading and evaluation dry-run checks are documented below;
they are not new closed-loop benchmark results.
OpenWAM checkpoints:存放、增量归档与评测
此目录是可整体迁移的 checkpoint 归档,公开发布于 qiuly/OpenWAM-private-checkpoints。默认位置为
/mnt/data/limingleyang/checkpoints,但目录内部的运行依赖全部使用相对于归档根目录的路径。
给后续 agent:先读本文件。新实验使用 tools/checkpoint_archive.py add-policy / add-model 追加归档,评测使用 eval run编号。不要手工覆盖 catalog.json,不要用软链接或硬链接,不要直接把 private/weights.safetensors 当成完整 checkpoint。
1. 目录与格式
checkpoints/
├── README.md
├── catalog.json
├── shared/<组件名>/<内容标识>/
│ ├── model.safetensors
│ └── component.json
├── pretrain/
│ ├── run23-2sys-pretrain-dinov3-patch2-pretrain/
│ ├── run39-3sys-pretrain-dinov3-patch2-pretrain/
│ └── run19_2sys_scratch_videorae_ft-encoder/
├── svae/
│ ├── runXX-<训练名称>-svae/
│ └── _components/<内容标识>/ # policy 内保存的精确 S-VAE tensor
├── sft/runXX-<训练名称>/
├── tools/
│ ├── checkpoint_archive.py # 日常增量存放、检索、校验、还原、eval
│ ├── test_checkpoint_archive.py
│ └── import_run1_run40.py # 本次一次性迁移记录,不用于新增 run
└── migration/ # 本次来源盘点、复制校验、清理审计
每个 policy run 目录包含:
checkpoint.index.json
private/
├── weights.safetensors # 该 run 独有的参数,非完整模型
└── assets/ # 原来的 config、stats、tokenizer、结构文件
├── config.yaml
├── normalization_stats.npy # SFT 必需;pretrain 按原产物保留
├── reason1/
├── vlm_expert/ # 三系统时存在
└── ... # dinov3、videorae、S-VAE config 等
独立 S-VAE / encoder 的原始 .pt、配置和数据统计保存在自己的 private/ 中;
采样/特征统计等来源证据保存在 private/collection/。.pt 原始精度与训练元数据不丢弃。
policy 内的 bf16 S-VAE 和独立训练产物的 fp32 S-VAE 分别保存,不能互相代替。
private/ 的含义只是“该 run 自己的文件”。本仓库为 public,所有文件均可公开下载,没有单独的保密分区。
catalog 与 index
catalog.json:schema_version: 1,entries以sft/run40、pretrain/run23、svae/run11等为 key。 记录原名、阶段、最终 step、index 路径与 SHA-256、原始来源、S-VAE/pretrain 依赖。checkpoint.index.json:记录每个 tensor 属于哪个真实文件、文件 SHA-256、原始 checkpoint header 和完整文件 SHA-256。 因此拆分归档可以逐字节还原原始完整 safetensors,而不仅是得到数值相近的模型。shared/和svae/_components/按 tensor 名称、dtype、shape、完整字节哈希生成内容标识。 同名模型只要任何 tensor 不同,就会保存成不同组件。没有“名称相同就跳过复制”的逻辑。- 来源绝对路径只用于 provenance。实际读取权重按归档根目录加相对路径定位,不需要旧训练目录仍然存在。
- 原始训练配置与 complete/collection 文件保持原样,其中的旧路径是历史记录;
找依赖请使用 catalog,继续训练时显式指定还原后的 checkpoint,不要照抄旧的
training.*_ckpt_path。
2. 先检索,再评测
管理工具只需要 Python 3.9+ 标准库,适用于 Linux/macOS。实际模型加载/评测需要正常的 OpenWAM 代码与评测环境。
ARCHIVE=/mnt/data/limingleyang/checkpoints
python3 "$ARCHIVE/tools/checkpoint_archive.py" list
python3 "$ARCHIVE/tools/checkpoint_archive.py" resolve run40
python3 "$ARCHIVE/tools/checkpoint_archive.py" resolve run23 --stage pretrain
python3 "$ARCHIVE/tools/checkpoint_archive.py" resolve svae/run11
移动归档后,调用新位置的脚本即可;也可以显式传 --root /新的/checkpoints,放在子命令之前。
run1 与 run01 的 policy 检索等价。不要根据目录修改时间选择 checkpoint。
最短 eval 命令
python3 /mnt/data/limingleyang/checkpoints/tools/checkpoint_archive.py eval run40
该命令:读取 catalog → 校验和还原完整 checkpoint/所有 deploy sidecars → 调用
/mnt/data/limingleyang/OpenWAM-private/scripts/libero/eval.sh。
原始 OpenWAM loader 无需改代码。wrapper 不启动训练,LIBERO 与 LIBERO+ 行为由现有 eval.sh 决定。
# 只核对现有 eval 工作流的启动计划,不启动模型评测。
python3 "$ARCHIVE/tools/checkpoint_archive.py" eval run40 --dry-run
# 指定另一份 OpenWAM checkout。
python3 "$ARCHIVE/tools/checkpoint_archive.py" eval run40 \
--repo /mnt/data/limingleyang/OpenWAM-private-fix-vlm-height256-contract
--dry-run 仍会准备并校验本地完整 checkpoint;通过启动计划不代表 GPU forward 或闭环评测通过。
wrapper 保留 EVAL_LIBERO、EVAL_SMOKE、NNODES、NODE_RANK、EVAL_LAUNCH_ID、
OPENWAM_LIBERO_OUTPUT_ROOT、OPENWAM_LIBERO_VENV_BIN 等现有脚本环境变量。
多节点例子(每个节点启动一次,NODE_RANK 分别设 0、1;同一轮使用相同且唯一的 EVAL_LAUNCH_ID):
NNODES=2 NODE_RANK=0 EVAL_LAUNCH_ID=run40-archive-retest-01 \
python3 "$ARCHIVE/tools/checkpoint_archive.py" eval run40
每次新评测换一个 launch id。wrapper 默认 EVAL_RUN_NAME=<run名称>_step<最终step>;
要保留多轮结果,请显式设置不同的 EVAL_RUN_NAME。
还原缓存与其他 benchmark / finetune
默认完整文件缓存位于归档旁边的 checkpoint_eval_cache/<run>/<index哈希>/,不进入上传目录。
还原使用独立实文件及文件锁;多个节点同时启动时不会并发写坏同一个缓存。重复使用前会校验缓存文件。
可通过 --cache-root 或 OPENWAM_CHECKPOINT_EVAL_CACHE 改位置。
# 只还原,不启动评测。输出目录必须不存在,或是该 index 已验证的缓存。
python3 "$ARCHIVE/tools/checkpoint_archive.py" materialize run40 \
--output /mnt/data/limingleyang/checkpoint_eval_cache/manual-run40
# 还原 WAM pretrain,供训练脚本 finetune 使用。
python3 "$ARCHIVE/tools/checkpoint_archive.py" materialize run23 --stage pretrain \
--output /mnt/data/limingleyang/checkpoint_eval_cache/pretrain-run23
# 还原独立 S-VAE 原始 .pt、配置及来源统计。
python3 "$ARCHIVE/tools/checkpoint_archive.py" materialize svae/run11 \
--output /mnt/data/limingleyang/checkpoint_eval_cache/svae-run11
输出根目录内会恢复原始 checkpoint_step_N.safetensors、config.yaml、normalization_stats.npy
及原有子目录,可直接交给现有 benchmark loader。使用结束且无进程依赖它时,缓存可独立删除、随时从归档重建。
不要把展开后的大文件反向复制进 checkpoints/。
3. 新 run 的存放规则:增量追加
- 为新实验分配新的 run 编号,保留配方名称。名称允许字母、数字、下划线、点、连字符,必须以该 run 编号开头。
工具把
run1规范为run01;run41、run100 等没有上限。 - 只归档已结束训练的最终 checkpoint。 先确认训练完成、最终 step 和元数据齐全,不能把最大 step 自动当作训练成功。
- 先归档新 S-VAE / encoder,再归档 pretrain,最后归档 SFT。复用旧依赖时直接引用 catalog 中已有 ID。
- 同一
(stage, run_id)只接受一个最终 checkpoint,已经发布的条目不可覆盖。 完全相同的 checkpoint、依赖和元数据可重复导入;出现差异会拒绝。改变实验配方或重新训练应使用新的 run 编号。 - 新 run 不需要改老 run 的文件,也不需要重新打包全部历史模型。工具自动复用内容相同的共享组件。
- 所有输入都复制;旧源文件不由
add-*删除。完成对应 verify 后再单独清理旧源目录。
新 S-VAE / encoder
以下以 run41 为示例,路径和名称替换为该次训练实际产物:
python3 "$ARCHIVE/tools/checkpoint_archive.py" add-model \
--id svae/run41 --name run41-dinov3-pretrain-svae \
--source-dir /mnt/data/limingleyang/新实验/svae48 \
--files svae.pt config.yaml complete.json \
--extra-file collection/stats.pt=/mnt/data/limingleyang/新实验/features/stats.pt
--files 必须逐一指定真实存在的相对路径,没有 complete.json 时不要虚构它。
保存最终模型、配置、input/latent statistics、校准信息和用于解释产物的 manifest;
不把特征 shards、optimizer 中间状态、逐步 checkpoint 或原始数据集放入归档。
--extra-file 归档内相对路径=原文件路径 可以多次使用,用于关联采样/统计/来源记录。
encoder 微调可使用 --id pretrain/run41-encoder。部署用途保留最终选定的推理 export、结构配置和必需的统计量;
只有明确需要断点恢复时,才另外归档含 optimizer/RNG 的完整训练 checkpoint,并在 metadata 标明用途。
已有条目保持原样;需要部署专用版本时另行复制、生成一致的 index/catalog 并验证,不覆盖历史归档。
新 WAM pretrain
python3 "$ARCHIVE/tools/checkpoint_archive.py" add-policy \
--run run41 --name run41-3sys-pretrain-dinov3 \
--stage pretrain \
--checkpoint /mnt/data/limingleyang/新实验/pretrain/checkpoint_step_20000.safetensors \
--svae svae/run41 \
--share-frozen-decoder
--share-frozen-decoder 只在配置明确冻结 Qwen decoder 时使用;训练过 decoder 的 run 不传此选项。
即使模型名相同,工具仍按实际 tensor 字节区分不同共享版本。新增/未知的参数前缀默认保存在该 run 的 private 权重中。
新 SFT:复用已存在的 pretrain/S-VAE
python3 "$ARCHIVE/tools/checkpoint_archive.py" add-policy \
--run run42 --name run42-3sys-from-run23-libero \
--stage sft \
--checkpoint /mnt/data/limingleyang/新实验/sft/checkpoint_step_10690.safetensors \
--svae svae/run23 \
--pretrain pretrain/run23 \
--share-frozen-decoder
python3 "$ARCHIVE/tools/checkpoint_archive.py" verify --run run42 --reconstruct \
--report /mnt/data/limingleyang/run42-archive-verification.json
python3 "$ARCHIVE/tools/checkpoint_archive.py" eval run42 --dry-run
--svae / --pretrain 是实际初始化依赖,没有使用则不传。跨编号复用合法,例如现有 run40 引用 pretrain/run23。
SFT 源 checkpoint 同目录必须有 config.yaml 与 normalization_stats.npy,并保留模型的结构/tokenizer 子目录。
工具会复制 source checkpoint 目录中的部署元数据,排除 checkpoint_step 文件、accel_state、wandb、logs、eval 和 features 等中间目录。
4. 校验、恢复与清理
# 全部文件校验 + 索引完整性 + 无软/硬链接检查。
python3 "$ARCHIVE/tools/checkpoint_archive.py" verify
# 额外流式还原每个原始 checkpoint,核对原始完整 SHA-256,不写出 1 TB 展开副本。
python3 "$ARCHIVE/tools/checkpoint_archive.py" verify --reconstruct \
--workers 8 \
--report /mnt/data/limingleyang/archive-verification.json
verify --run run42 只检查选中的 run 及其依赖;不能把局部结果当成全目录检查。
--reconstruct 校验原始 header、每个 tensor、完整文件字节数和 SHA-256。
--workers 控制并行校验数量(默认 1);大目录可按机器 CPU / 存储能力设为 4 或 8。
校验期间 catalog 如有追加会拒绝该次报告,请对新快照重新运行。
原始权重与元数据字节保持一致,仍不等于完成了新的 GPU forward 或闭环评测。
导入中的文件位于 .staging/,不会先写入 catalog。共享文件与 catalog 通过文件锁/原子替换发布。
中断后先检查 catalog.json、.staging/ 和错误日志:有完整条目时可校验后复用;
没有登记的 checkpoint.index.json 会使 verify 报错,必须对照源文件恢复或移走该次未发布事务,不能假装成功。
共享但尚无引用的组件保留不会影响加载;不要依据“现在没有看到引用”直接手工删除它。
清理顺序:复制 → 全部必要文件校验 → 原始字节等价验证 → eval 启动/加载检查 → 按明确清单删除旧文件。
删除只针对完成归档的旧副本、明确的中间 checkpoint、optimizer state 和可再生特征缓存。
历史配置/评测结果、原始数据集和未归档的其他实验不能靠通配符一并删除。
后续 agent 如需清理新 run,应记录精确路径、大小和校验结果,清理前再确认没有仍在写入这些目录的任务。
旧模型目录的 ARCHIVED_TO.json 指向新的 catalog 条目。旧特征目录留下的配置、manifest 和汇总统计是历史记录,
不代表特征 shards 仍然可用;新训练需要特征时应重新 collect 到新的缓存目录。
5. 当前 run1–run40 的关系
- 40 个 SFT 最终 policy,2 个 WAM pretrain(run23/run39);run40 用 run23 pretrain。
- 10 个独立 S-VAE 来源文件、9 套模型参数。run34/run35 的参数相同,但训练元数据不同,因此保留两份原始 .pt/来源记录,policy 内的相同参数仅存一份。
- 另保留 run19 的 VideoRAE 最终训练状态、encoder export 和 latent statistics。
- 42 个 policy 中的 Reason1 完全相同;Qwen vision/embeddings、冻结 decoder、Wan VAE、DINOv3、V-JEPA、部分 VideoRAE 与 S-VAE 参数按内容共用。
- run24 的最终 step=42730,run30/run31=21370,其余 SFT=10690;pretrain/run23 和 pretrain/run39=20953。
- 原始来源、盘点与完整哈希见
migration/;最新执行状态看migration/status.json与验证/清理报告。 - 本次迁移的实际体积、验证范围和清理边界见 迁移结果。
S-VAE 引用表:
| Catalog ID | 使用的 run |
|---|---|
| svae/run11 | 11、18、22、36 |
| svae/run23 | 23、39、40 |
| svae/run24 | 24、25、28、29 |
| svae/run26 | 26、27 |
| svae/run30 | 30、32 |
| svae/run31 | 31、33 |
| svae/run34 | 34 |
| svae/run35 | 35,tensor 与 run34 相同,来源单独保留 |
| svae/run37 | 37 |
| svae/run38 | 38 |
6. Hugging Face 备份
归档所有文件都是实文件,可以整体上传;不要只上传某个 run 的 private/,否则会缺共享依赖。
公开 model repo 为 qiuly/OpenWAM-private-checkpoints。仓库名中的 private 沿用原项目名称,不表示仓库访问权限。
使用已配置认证的 Hugging Face 客户端,设置 HF_REPO_ID 为目标仓库后:
hf upload "$HF_REPO_ID" /mnt/data/limingleyang/checkpoints . --repo-type model
根目录 .gitignore 排除 .staging、运行锁、Python 缓存等临时内容。新增 run 后再次上传同一目录即可。
迁移记录保留旧路径用于溯源;不收集 SSH 配置、API keys、认证 token 或原始训练数据。
访问权限由 Hugging Face 仓库设置控制,目录名 private/ 不承担访问控制作用。当前仓库为 public。
上传与下载方法参见 Hugging Face 官方上传文档。
7. 体积与部署专用版本:2026-09-22 实测
当前目录约 285.85 GB(十进制 GB)。体积审计 读取实际文件、
safetensors header、index 中的 tensor 哈希及独立 .pt 的内容,未修改权重。
| 内容 | 实际体积 |
|---|---|
| 40 个 SFT 的独有 safetensors | 244.63 GB |
| 2 个 WAM pretrain 的独有 safetensors | 11.10 GB |
| Reason1、冻结 Qwen、视觉编码器等 shared 权重 | 23.58 GB |
| policy 使用的独立共享 S-VAE tensor 组件 | 1.06 GB |
原始 .pt(S-VAE、encoder、run19 训练状态等) |
4.68 GB |
| 配置、tokenizer、索引、来源记录、工具等其余文件 | 0.79 GB |
所有 safetensors 中,按 tensor 字节数计超过 99.99% 已是 BF16。例如 run40 的独有参数约 5.55 GB,其中视频 DiT 约 4.12 GB、动作模型约 1.43 GB。训练过 VLM decoder 的 run 还需 独有的约 2.82 GB decoder 参数。视频 DiT 参与部署时的联合去噪,不能因只输出动作就整块删除。
40 个 SFT 和 2 个 WAM pretrain policy 不含 optimizer / 学习率 scheduler 的恢复状态;
10 个独立 S-VAE .pt 同样没有这些状态。唯一例外是 run19 encoder 的 private/last.pt:
完整文件 2.035 GB,其中两个 optimizer 的 tensor 合计 1.315 GB,另有模型、loss 和 RNG 等。
部署 export private/encoder.pt 已单独保存,约 0.458 GB。
可缩减范围必须区分保留目标,下面均为审计估算,尚未生成新的部署目录:
- 保留所有 SFT、pretrain、独立 S-VAE 和 encoder 模型,仅排除 run19 的
last.pt:约 283.81 GB,节省约 0.7%。 - 只保留 40 个 SFT 的 index、参数与现有部署 sidecars:约 269.91 GB,节省约 5.6%。 该数值保留嵌入 policy 的 S-VAE tensor,但不包含独立 fp32 S-VAE 产物、两个 pretrain policy 和独立 encoder 来源包。 新 catalog、工具、组件说明等还会有少量开销;初始化依赖需转为 provenance,不能让 catalog 悬空引用被排除条目。
- 按当前 index 哈希进一步细化 private tensor 的无损去重,理论上还可省约 3.02 GB,主要是相同的 cross-attention projection 和部分 decoder 参数;此项尚未实施。
因此,删除恢复训练信息不足以让全部 run 降至 100 GB。显著降低体积需要选择较少 run,或单独评估量化。 量化后的文件必须作为派生产物保留,注明基准 checkpoint、精度、方法和评测结果,不能覆盖原始 BF16 归档。
部署包应保留 config、tokenizer、动作 normalization、S-VAE input/latent normalization 与校准统计; 这些都是模型输入输出契约的一部分。部署的 diffusion/flow scheduler 配置也应保留,它不等于训练用学习率 scheduler 的恢复状态。 新 run 应继续复用内容相同的冻结组件,独有训练权重按实际内容追加;不要期待已训练参数仅靠清理元数据即可大幅缩小。