跳转至

EvoSpeech R2 与训练存储手册

一句话原则

R2 保存长期、可迁移的内容寻址资产;RunPod Network Volume 保存近期工作集;训练 scratch 只活一轮。

2026-07-22 已创建私有 Cloudflare R2 bucket evospeech-research-data,location hint 为 EEUR,默认 Standard class。根 manifest 位于 manifests/storage-root-v1.json;仓库真源是 cloud/storage/r2_policy.json。任何凭据都不得进入 Git、日志、checkpoint metadata 或网页。

首个远端 object 已在 2026-07-22 上传并完整回读:480 bytes,SHA-256 68ddc2fce8470513841040ddb0c60de55c8562ebbd6a9e3410c03326015a09d3。本地真源与远端下载副本的 SHA-256 相同且 cmp 逐字节通过。这只证明存储根已建立,不等于任意数据集或 checkpoint 已归档。

为什么不把 RunPod 直接扩到 500 GB

RunPod Network Volume 适合可挂载的热工作集,但 500 GB 长期保留约 $35/month。R2 Standard 为 $0.015/GB-month、前 10 GB-month 免费、直接 egress 免费;500 GB 常驻约 $7.35/month,1 TB 约 $14.85/month。因此当前 RunPod 热盘只扩到 100 GB($7/month),大数据与 checkpoint 进入 R2。

训练时另建 300–500 GB 临时 Network Volume;500 GB 若只存在三天,按 RunPod 小时计费约 $3.45。 训练完成、R2 上传和抽样回读均通过后才删除该临时 volume。不能让临时 scratch 成为唯一 checkpoint 副本。

三层路径

R2 canonical store
  datasets/<dataset>/<revision>/shards/<sha256>.tar.zst
  models/<model>/<revision>/<sha256>/<filename>
  checkpoints/<experiment>/<run>/<step>/<sha256>/<filename>
  archives/baselines/<model>/<milestone>/<sha256>.tar.zst
          ↓ manifest 选择与并行预取
RunPod 100-GB hot volume
          ↓ 当前 epoch / 当前 evaluator 物化
Pod-local NVMe scratch

训练数据必须先切成 1–4 GiB shard,而不是上传几十万个小 WAV。每个 shard 有 JSONL member manifest、 字节数和 SHA-256;object key 含 SHA-256。这样恢复、去重、并行预取和跨云迁移都不依赖文件夹偶然状态。

本机日常命令

只使用 Wrangler 已登录会话;不要把 token 写入命令、.env 或聊天。

wrangler r2 bucket info evospeech-research-data
wrangler r2 object put \
  evospeech-research-data/manifests/storage-root-v1.json \
  --file cloud/storage/r2_root_manifest.json --content-type application/json --remote
wrangler r2 object get \
  evospeech-research-data/manifests/storage-root-v1.json \
  --file /tmp/evospeech-r2-root-verify.json --remote

大于 Wrangler 单对象实用范围的 shard 使用 S3-compatible multipart client;凭据通过 Cloudflare scoped R2 token 和 RunPod secret 注入,只授予该 bucket 所需前缀。正式训练 runner 在 C0 阶段验证 secret 存在, 但绝不输出 secret 值。

归档与删除 Gate

一个 RunPod 资产只有同时满足以下条件,才允许从热盘删除:

  1. R2 object 的 key、bytes、SHA-256 与本地 manifest 一致;
  2. 至少抽取一个 shard 或 checkpoint 重新下载并验 SHA-256;
  3. 数据集记录 revision、license/source;checkpoint 记录 code/config/data manifest;
  4. 关键 checkpoint 在 R2 之外还有第二份副本;
  5. 删除命令精确指向一个已归档目录,禁止对 /workspace 或 bucket root 做递归删除。

R2 不是实验数据库:逐 batch 日志先写本轮 ledger,里程碑闭合后再打包归档。Pages 只发布小型 JSON、 表格与证据哈希,不公开私有 bucket 或 signed URL。

当前 TODO

  • [x] RunPod hot volume 从 50 GB 扩到 100 GB,并通过 512 MiB 写探针;
  • [x] 创建 evospeech-research-data 私有 EEUR Standard bucket;
  • [x] 上传并回读根 manifest,固定首个远端 object SHA;
  • [ ] 为 RunPod 创建最小权限、可轮换的 R2 S3 secret;
  • [ ] 将已完成 MOSS 原始结果打成 hash-bound archive,上传、抽样回读后释放热盘;
  • [ ] 在首次原创训练前实现 shard builder、prefetch cache 与 checkpoint multipart uploader。