#AI#大模型#DevOps

训练分片发布:内容摘要、集合完整性与原子切换

每个分片校验成功仍可能漏掉整个文件或让不同 worker 混读版本。本文用描述符、集合承诺、发布屏障和代际指针保证训练输入完整一致。

本文要点

  • 主题聚焦:AI、大模型、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年1月3日·更新于 2026年7月20日

一百个训练分片中有九十九个上传成功,每个成功文件的 hash 都正确,但前缀列表仍可能让任务直接开始;另一种失败是别名切换后,早启动的 worker 读旧 part-003,扩容 worker 却读到新文件。单文件 checksum 防不了集合缺失,也防不了一个 run 内混合两个 release。

浏览器模型资产完整性 保护 Wasm、权重与客户端缓存,RAG 索引签名发布 保护在线查询索引。本篇对象是 trainer 的输入分片:除了字节可信,还要证明样本集合、Schema、worker 屏障和断点恢复一致。

Descriptor 同时绑定存储字节与逻辑内容

每个 shard 采用 OCI descriptor 式的 mediaType + digest + size,并记录对象存储不可变 version。压缩文件的 digest 针对实际存储字节,解压后的 canonical record stream 另算 logicalDigest;否则重新压缩会被误判为同一对象,或压缩流正确但记录解码错误仍被放行。

json
{
  "schema": "training.shard.release.v1",
  "datasetSnapshot": "sha256:8a91...",
  "tombstoneWatermark": 44192,
  "benchmarkFence": 3908,
  "recordSchema": "sha256:7d11...",
  "shards": [{
    "id": "shard-00017-of-00480",
    "mediaType": "application/vnd.apache.parquet",
    "digest": "sha256:31ef...",
    "size": 8388192,
    "objectVersion": "gen-9021",
    "logicalDigest": "sha256:a41c...",
    "records": 10000,
    "tokens": 8194421,
    "memberSetDigest": "sha256:51b0..."
  }],
  "totals": {"shards": 480, "records": 4800000},
  "orderedMemberTupleRoot": "sha256:b88d..."
}

训练数据集快照 定义逻辑成员,shard release 必须证明所有成员恰好出现一次且内容未换。验证器解析每条记录,对 (sampleId, sourceId, sourceVersion, logicalContentDigest, split, schemaDigest) 规范化 tuple 建 multiset,与 snapshot 完整差分;根 manifest 的 orderedMemberTupleRoot 绑定该集合、tombstone 水位与 benchmark fence。missing、extra、duplicate、内容替换和 split 冲突均须为零。

Schema、序列化器、排序种子、分片函数、压缩参数和 key version 都进入根 manifest。训练数据 Schema 演进 的报告绑定同一 digest。验证端解密后检查逻辑摘要;key、AAD 或 reader 不匹配时拒绝发布。

写入 staging,验证后只切指针

writer 以摘要路径和 conditional create 写 staging,禁止覆盖。独立 verifier 从精确 object version 复算 size、存储/逻辑摘要、footer、计数和 tuple multiset。报告与 SLSA provenance 绑定根 digest,审批者不批准可变目录名。

发布、回滚、run 与 checkpoint 准入和 tombstone/benchmark fence 推进竞争同一线性 gate,同时比较当前与根的两类水位、零命中和 alias generation,再签发绑定 root/watermark/benchmark/generation 的 permit。任一 fence 推进立即关闭受影响 permit;CAS 重试同 digest 才幂等。不能靠复制文件模拟原子性。

协调器创建 run 时只解析一次活动指针,把精确根 digest 发给全部 worker。worker 验证对象并回报 (runId, rootDigest, shardDigest);所有 rank 同意同一 root 后才开始 step 0。扩缩容与恢复只改 assignment,不重读 alias。Kubernetes 模型权重分发 可借鉴缓存校验,但训练 shard 还需全局 tuple 证明。

主动制造半发布和串版

故障注入包括截断或交换 shard、同 ID 替换内容/sourceVersion/split、漏 descriptor、陈旧列表、旧缓存、Schema 混用、屏障超时和恢复误读新 alias。候选必须停在 STAGED/INVALID,或整个 run 在 step 0 前失败;替代 worker 不得读取另一版本。

指标按 release digest 汇总已验证 shard 比例、缺失/额外/重复成员、摘要失败、缓存损坏、屏障等待、worker root 不一致、读取吞吐和解压比。ready 探针只有在进程固定并验证根 manifest 后才成功,不把“对象存储可连接”当数据已就绪。训练日志保存 digest 和错误码,不记录样本文本。

上一份 release 保留到回滚窗结束。回滚以更高 generation 指向旧根;旧根的 tombstone 与 benchmark 水位都必须满足当前 gate,否则没有资格。已有 run 固定输入完成或取消新建,不能中途换 shard。原子发布要求字节、tuple 集合和所有 worker 指向同一受批 digest。

延伸阅读

Related

相关推荐