十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Google Cloud Storage FUSE(gcsfuse)检查点与写入安全实战指南

Google Cloud Storage FUSE(gcsfuse)检查点与写入安全实战指南 Google Cloud Storage FUSEgcsfuse检查点与写入安全实战指南【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills本指南是 skills29/skills 仓库中google-cloud-storage-fuse技能的核心参考文档之一围绕 ML 训练中最典型的写临时目录 → 重命名为最终检查点temp-then-rename写入模式给出在 gcsfuse 挂载上的安全性结论表、诊断命令、持久化语义、并发写语义、内存预算与修复方案。读完本文你将能判断任意检查点写入模式在扁平命名空间flat与分层命名空间HNS桶上是否安全、为何fsync()不能保证持久化、ESTALE错误的真实含义以及如何通过 HNS 迁移或aiml-checkpointing配置文件让检查点写入真正安全。适用场景PyTorchtorch.distributed.checkpoint、Orbax、朴素torch.save等通过 gcsfuse 挂载路径落盘检查点的训练作业需要承受抢占preemption与分布式多 worker 并发写入的集群环境。相关能力总览见 SKILL.md其 Step 2 路由表将写入模式是否安全类问题明确指向本参考文档。写入模式安全性结论表以下结论表是判断一切写入模式安全性的起点。核心维度有两个重命名对象是文件还是目录以及桶的命名空间类型flat 还是 HNS。写入模式扁平命名空间桶flatHNS 桶重命名文件完成发布安全——自 v3.2.0 起为原子MoveObject安全——自 v3.1.0 起为原子操作重命名目录完成发布默认失败rename-dir-limit: 0调高限制后变为非原子的逐对象 copydelete安全——原子RenameFolder仅元数据操作用fsync()保证持久化流式写入下不持久新文件默认走流式写入——必须依赖close()相同——必须依赖close()多个 writer 并发写同一对象先 close 者胜出后到者收到ESTALE。不存在任何文件锁相同内核列表缓存kernel-list-cache-ttl-secs: -1对可变挂载危险目录幽灵化、文件丢失、rmdir失败相同——保持列表缓存关闭或低 TTL-1仅限只读挂载由此得出核心结论temp-then-rename 模式安全当且仅当桶启用了分层命名空间HNS或框架按单个文件重命名而非重命名目录。在扁平桶上目录重命名默认直接失败而通过调高rename-dir-limit修复它等于把可见的失败转换成静默损坏风险——抢占若发生在重命名中途会留下一个只完成了一部分的最终检查点。三条需要严格遵守的规则绝不要把文件重命名描述为copy delete慢但可用——这已经过时。自 v3.1.0HNS与 v3.2.0扁平桶起文件重命名通过MoveObjectAPI 原子完成只有扁平桶上的目录重命名才走非原子的逐对象路径且必须显式强制开启。绝不要为检查点持久化推荐fsync()。在流式写入自 v3.0 起默认新文件顺序写入下fsync()不会 finalize 对象数据只有在close()之后才保证落到 Cloud Storage。该语义记录在 gcsfuse 官方 GitHub 仓库的 semantics 文档而非 cloud.google.com 上——当用户索要出处时指引其查看该 semantics 文档仓库内 gcsfuse.md 的 POSIX Semantics Limitations 一节也整理了同一套语义。绝不要在可变挂载或检查点挂载上启用kernel-list-cache-ttl-secs: -1。客户端内核列表缓存不会在训练过程中新增或删除文件时失效会导致分布式 worker 之间出现幻影文件、检查点分片缺失、rmdir/unlink报错。-1严格保留给只读的训练与服务挂载这一点在 performance-diagnosis.md 的签名映射表中也被反复强调。绝不要把rename-dir-limit包装成修复方案而不声明其非原子性。它是带损坏窗口的兜底方案不是补救措施。诊断输入先判命名空间类型给出任何安全结论之前必须先收集以下信息其中最关键的判定信号是命名空间类型# 命名空间类型——决定性信号。输出 True 表示 HNS 桶 # 空输出表示扁平命名空间。必须加 --raw不加则 # describe 输出会完全省略 hierarchical namespace 字段。 CLOUDSDK_METRICS_ENVIRONMENTgcs-skills gcs-skills/1.0 (skill:google-cloud-storage-fuse) \ gcloud storage buckets describe gs://BUCKET --raw --formatvalue(hierarchicalNamespace.enabled)命令前缀的CLOUDSDK_METRICS_ENVIRONMENT是本技能要求的用量归因标记只标识技能与版本、不含用户数据详见 SKILL.md 的 Attribution 一节。此外还需要从用户或挂载配置确认以下信息框架重命名的是目录还是单个文件Orbax 与torch.distributed.checkpoint通过重命名检查点目录完成发布朴素的torch.save到临时名再重命名只重命名单个文件。每步并发运行的 shard writer 数量。生效的write: global-max-blocks与file-system: rename-dir-limit配置值。持久化与 finalization 语义对象只有在 finalize 之后才对读者可见这是判断检查点何时真正落盘的基础对象仅在被 finalize 后才对读者可见。在流式写入自 v3.0 起默认适用于新文件的顺序写入下finalization 发生在close()时而非fsync()时。写入过程中的读取、向下截断downward truncate、或写入过程中的重命名会提前 finalize 对象此后对该句柄的后续写入会回退到 staged 写入路径。Staged 写入回退路径编辑已有文件、乱序写入、块预算耗尽会把整个文件缓冲在file-system: temp-dir默认/tmp并在 close/flush 时上传——temp-dir 空间不足会直接破坏大型 staged 写入。补充一点仓库佐证本地 gcsfuse.md 将 append/编辑语义进一步细化——对 ≥2 MB 的文件追加内容会通过对象组合compose只上传新增部分而对 2 MB 文件的追加或对文件中部的随机写入则触发整个文件的 staged 重写。这也解释了为什么temp-dir的容量规划对编辑型负载尤其重要。并发语义先写者胜出first writer winsgcsfuse 挂载不存在文件锁flock/fcntl跨挂载不生效。当两个挂载写同一个对象时第一个 flush/close 通过**代数前置条件generation precondition**胜出失败方的close()会报ESTALEstale file handle陈旧文件句柄。因此设计上必须坚持每个对象只有一个 writer——例如每个检查点分片文件只由一个 shard writer 写入。训练日志中出现ESTALE几乎可以断定是两个 worker 写了同一个路径。仓库 gcsfuse.md 从底层 API 角度印证了这一点由于 GCS 对象不可变且原子替换第二个挂载 close 时因if-generation-match前置条件不匹配gcsfuse 向应用返回syscall.ESTALE。这也解释了为什么在 SKILL.md 的 Fit Gate 中依赖flock/fcntl的共享可变写入负载会被直接判给 FilestoreNFS支持 POSIX 锁或 Managed Lustre而不是 gcsfuse。并发 shard writer 的内存预算流式写入对每个正在写入的文件持有一个32 MiB 的块并由write: global-max-blocks做全局上限——普通机器上默认值为 4共 128 MiBA2/A3/A4 系列机型自动配置为 1600。每个流式写入文件在上传期间约消耗96 MiB RAM。当块预算耗尽时额外并发 writer 会降级为 staged 写入——而唯一信号是一条 trace 级别的日志在默认info级别下完全不可见因此表现为莫名其妙的变慢。规划建议若有 N 个并发 shard writer将write: global-max-blocks设为 ≥ N例如 16 个 shard writer 且需要余量时配置global-max-blocks: 64。修复方案一迁移到 HNS 桶推荐将检查点迁移到 HNS 桶是推荐的修复路径原因有三目录重命名变为原子的、仅元数据的RenameFolder操作以长期运行操作LRO方式执行重命名期间读取和 list 照常工作对受影响文件夹的写入会被阻塞直至操作完成。这正是让 temp-then-rename 模式安全的关键。HNS 桶初始 QPS 最高为扁平桶的 8 倍初始对象读取 40,000 次/秒、写入 8,000 次/秒对比扁平桶的 5,000 与 1,000。注意限制HNS 只能在桶创建时选定已有扁平桶无法转换需要规划新桶 数据拷贝且 HNS 桶强制要求统一桶级访问控制uniform bucket-level access。创建 HNS 检查点桶并迁移存量检查点# 创建 HNS 检查点桶--uniform-bucket-level-access 为必需项 CLOUDSDK_METRICS_ENVIRONMENTgcs-skills gcs-skills/1.0 (skill:google-cloud-storage-fuse) \ gcloud storage buckets create gs://CKPT_BUCKET --locationLOCATION \ --uniform-bucket-level-access --enable-hierarchical-namespace # 迁移存量检查点 CLOUDSDK_METRICS_ENVIRONMENTgcs-skills gcs-skills/1.0 (skill:google-cloud-storage-fuse) \ gcloud storage cp -r gs://OLD_BUCKET/checkpoints gs://CKPT_BUCKET/为检查点场景调优的挂载profile 需要 gcsfuse ≥ v3.4.0# Compute Engine / 自管环境 gcsfuse --profileaiml-checkpointing CKPT_BUCKET /mnt/ckpt在 GKE 上则使用gcsfusecsi-checkpointingStorageClassGKE ≥ 1.35.1-gke.1616000PV/PVC 模式详见 gke-training-deployment.md——注意 GKE 上不能以原始挂载选项方式传 profile预置 StorageClass 是 GKE 上使用 profile 的唯一受支持途径。aiml-checkpointingprofile 的具体配置包含implicit-dirs隐式目录推断无限元数据 TTL 与无上限 stat 缓存ttl-secs: -1、stat-cache-max-size-mb: -1、negative-ttl-secs: 0file-cache: cache-file-for-range-read: true服务于恢复时的范围读file-system: rename-dir-limit: 200000——注意该条目是为了扁平桶兼容性而存在在 HNS 桶上目录重命名本来就是原子的无需该限制不启用文件缓存若希望恢复由本地介质服务需显式启用保持内核列表缓存关闭kernel-list-cache-ttl-secs: 0以保障写入安全。向用户推荐这套配置时务必同时说明 close-time finalization 语义检查点在 writer 关闭文件的时刻才持久而不是更早。修复方案二无法迁移 HNS 时的兜底当用户无法迁移到 HNS 时才在扁平桶上提高目录重命名限制并明确陈述风险file-system: rename-dir-limit: 200000这会使得目录重命名可行但非原子每个对象被逐一复制再删除操作复杂度为 O(对象数) 且开销高昂抢占若发生在重命名中途两个目录都会处于不一致状态。如果作业运行在抢占式/spot 容量上优先采用文件级发布模式把分片写入临时文件名、逐个重命名文件、最后写一个 final manifest 文件——因为即使在扁平桶上文件重命名也是原子的。常见误区速查说法正解目录重命名慢但能用扁平桶上默认直接失败强制开启后为非原子逐对象 copydelete有损坏窗口fsync()保证检查点落盘流式写入v3.0 默认下fsync()不 finalizeclose()才保证多个 worker 可以共享写同一检查点文件先写者胜出后到者ESTALE一个对象只允许一个 writer把kernel-list-cache-ttl-secs设为 -1 提速仅在只读挂载上合法可变挂载会出现幻影文件、分片缺失、rmdir失败rename-dir-limit是正式修复是带非原子损坏窗口的兜底正解是 HNS 迁移或文件级发布模式相关文档与延伸阅读SKILL.md技能总入口包含 Fit Gate判断该用 FUSE、原生gs://还是 Filestore/Lustre与意图路由表。gke-training-deployment.mdGKE 上的 PV/PVC 部署模式、profile StorageClass 版本门限、Workload Identityprincipal://绑定。performance-diagnosis.md慢训练与账单飙升的遥测优先排查手册含内核列表缓存-1的只读挂载限定说明。gcsfuse.mdgcsfuse 基础安装、挂载、POSIX 语义与限制的完整参考与本文档的语义结论互相印证。官方语义出处gcsfuse 官方仓库的 semantics 文档、Profile-based configurations、Config file reference、Hierarchical namespace overview、GKE profiles for Cloud Storage FUSE均可在上述本地参考文档的 Documentation 小节中按名定位。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表