资讯动态

FiftyOne Enterprise 数据集版本管理(Dataset Versioning)实战指南:快照的创建、加载、归档与回滚

发布时间:2026/9/15 20:49:40 来源:尧图企业网站定制
FiftyOne Enterprise 数据集版本管理Dataset Versioning实战指南快照的创建、加载、归档与回滚【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone本指南以 FiftyOne Enterprise 的 Dataset Versioning 功能为主线系统讲解如何通过「快照Snapshot」机制对数据集进行时间点版本捕获从核心概念HEAD 与快照、快照状态与归档策略到 Enterprise UI 与 Management SDK 双路径的创建、查看、加载、删除、回滚与归档操作最后给出可插拔后端架构、配置项环境变量与默认值与路线图帮助读者建立一套可落地、防数据丢失、可回溯关键事件如模型训练完成、标注完成的数据集版本管理体系。一、概述用「快照」为数据集留住时间FiftyOne Enterprise 从v1.4.0起原生支持数据集版本管理Dataset Versioning。它的核心价值在于捕获数据集在某个时间点的状态使其可以在未来被随时引用。这为两类典型工作流提供了支撑回溯生命周期中的关键事件——例如模型训练完成时的数据、标注完成时的数据可以在日后随时回到这些节点防止意外数据丢失——即使 HEAD 上的数据被误删误改也能从快照恢复。在实现上Dataset Versioning 是一条只读快照的线性序列创建新快照相当于为数据集内容做一份永久记录未来任何时刻都可以加载查看但不能直接编辑。与之相对数据集当前的工作版本被称为HEAD可以类比 git 的 HEAD。只要没有显式加载某个快照你看到的就是 HEAD并且可以像平时一样对数据集内容进行增、删、改前提是具备足够权限。快照会记录存储在 FiftyOne 内的所有数据维度包括数据集级信息、schema、样本、帧、brain runs 与 evaluations。但快照不包含存储在外部服务中的信息例如云桶中的媒体文件、外部向量数据库中的 embeddings——这些内容被假定为不可变。设计上刻意保持轻量且通用如果某个样本的图片需要更新应当更新样本的filepath该字段由快照追踪而不是就地修改云存储中的媒体文件这不会被快照追踪。哪些内容被版本管理追踪类别是否追踪具体内容数据集级元数据✅ 追踪Schema、标签tags及其他元数据保存的视图Saved viewsRuns 及 run 结果样本级元数据✅ 追踪全部样本元数据包括 tags、labels、detections、segmentations、自定义字段等全部视频帧元数据媒体文件❌ 不追踪图像、视频、点云存储在磁盘或云端的 segmentation / heatmap 文件外部信息❌ 不追踪存储在外部系统中的 run 结果例如存放在向量数据库如 Qdrant中的 embeddings可插拔的后端架构Dataset Versioning 采用可扩展架构允许不同的版本管理后端backend被切换接入。不同后端在性能、存储与部署需求上各有取舍用户可以选择最适合自己的方案同时很多用户可能已有 FiftyOne Enterprise 之外的版本管理方案该架构也面向这些场景提供集成能力。目前仅内置了内部复制后端Internal duplication backend更多后端实现已在路线图中规划详见文末。⚠️ 重要提醒Dataset Versioning不能替代数据库备份。官方强烈建议配合定期的数据备份与良好的存储维护流程使用。二、快照Snapshot核心概念与状态快照是 Dataset Versioning 的基本单元它在特定时间点将数据集状态捕获为不可变对象。可以把它类比为版本控制系统中单分支上的 commit 加 tag——一个快照同时兼具 commit提交记录和 tag可读名称、描述、创建者两种属性。当前工作版本 HEAD 可由具备适当权限的任何人正常编辑由于快照包含类似 commit 的操作快照只能在数据集 HEAD 上创建。快照的三种状态根据部署选择与用户操作快照可能处于以下几种存在状态状态说明Materialized Snapshot物化快照状态与内容完全物化在 MongoDB 数据库中即取即用可被立即加载用于分析与可视化Archived Snapshot归档快照已归档到冷存储以释放 MongoDB 工作空间的物化快照。用户在重新物化到 MongoDB 之前无法加载它但由于其存储形态本身就是物化的重新物化仅需付出网络传输与 MongoDB 写入延迟的代价Virtual Snapshot虚拟快照状态与内容由可插拔后端以自选方式存储。要被 FiftyOne Enterprise 用户加载必须先经由版本管理基础设施与具体后端协作物化为 MongoDB 中的可工作形态对任一快照而言虚拟形态始终存在它可能同时被物化、归档或两者兼具例如归档快照被重新物化后仍保留在冷存储中。注意在使用内部复制后端时物化与虚拟快照没有区别——因为该后端本质上就是用物化快照作为存储手段。快照归档Snapshot archivalv1.5.0从 Enterprisev1.5.0起快照可以归档到冷存储让你放心地创建快照而不用担心数据库被占满。如果你的快照具有历史意义但不常使用归档是理想选择——尤其对内部复制后端而言创建快照会导致数据库存储快速膨胀。归档时快照的全部内容被存入配置的冷存储位置可以是挂载的文件系统也可以是云存储文件夹使用部署的云凭证。注意快照必须取消归档后才能在 UI 中浏览或用 SDK 加载。自动归档如果启用了快照归档系统会在必要时自动归档快照为新快照腾出空间。触发时机是创建快照或取消归档后数据库中的快照数量超过了配置的某个限制值。若物化快照总数超限则最近加载时间最久的快照会被自动归档若单数据集物化快照数超限则该数据集内最近加载时间最久的快照会被归档。注意即使满足按加载时间排序的条件以下快照不会被自动归档每个数据集的最新快照以及处于配置的最小加载年龄要求之内的快照。如果没有快照可被自动归档触发事件将报错并失败。解决办法是删除快照、手动归档快照或调整部署配置值。手动归档与取消归档对数据集拥有Can Manage权限的用户可通过 UI 或 Management SDK 手动归档快照快照归档期间无法在 UI 浏览、无法用 SDK 加载取消归档后可恢复浏览/加载。使用注意事项如果最新快照被归档则 HEAD 的最新变更无法计算可能显示为 unknown如果删除某个快照后续快照的变更摘要必须对照前一个快照重新计算但若这两个快照中任一个处于归档状态则变更摘要无法重算可能显示为 unknown。三、快照操作权限矩阵快照操作与数据集权限Can View / Can Edit / Can Manage的对应关系如下表快照操作Can ViewCan EditCan Manage在 App 中浏览快照✅✅✅在 SDK 中加载快照✅✅✅创建快照——✅删除快照——✅归档快照——✅取消归档快照✅✅✅将数据集回滚到快照——✅编辑快照内容❌❌❌可以看到浏览与加载是读操作任何能查看数据集的用户都可以执行创建、删除、归档、回滚等写操作统一要求Can Manage而编辑快照内容对所有角色一律禁止——快照天然只读。四、查看与加载快照与可编辑的 HEAD 不同快照是只读的在 App 中浏览时界面与 HEAD 数据集类似但用户无法对对象做任何编辑在 SDK 中任何会触发存储数据集修改的操作都会被禁止。列出快照Enterprise UI在数据集主页点击History 标签页进入快照历史与管理页面页面上会列出该数据集的全部快照历史每一行对应一个快照。SDK使用 Management SDK 的list_snapshots()方法列出快照名称import fiftyone.management as fom dataset_name quickstart fom.list_snapshots(dataset_name)如需查看单个快照的详细信息使用get_snapshot_info()import fiftyone.management as fom dataset quickstart snapshot_name v0.1 fom.get_snapshot_info(dataset, snapshot_name)这些方法归属于fiftyone.management.snapshot模块。Management SDK 是 Enterprise 特有的编程接口fiftyone.management用于管理用户、数据集权限、插件、API keys 与快照等使用前需要建立 API 连接而非直连 MongoDB完整的方法清单可参见 Enterprise Management SDK 文档 中的 Snapshots 一节。加载快照任何拥有数据集Can View权限的用户都可以通过 UI 或 SDK 查看并加载快照。Enterprise UI在数据集的 History 标签页中点击快照列表对应行的Browse按钮即可在 UI 中加载该快照加载后快照会在常规的样本 UI 中打开你常用的 FiftyOne 可视化工具全部可用——但所有数据集修改类功能如打标签都会被移除。同时会出现快照横幅Snapshot banner展示当前查看快照的信息并提供快捷操作点击名称行可下拉列出全部快照当前快照高亮点击下拉中的其他快照会跳转到对应快照的浏览页横幅右侧的Back to the latest version按钮可返回数据集 HEAD 的样本页点击 Samples 标签亦可3 点kebab菜单中则提供当前快照的各种管理功能。你还可以通过地址栏或Share Dataset页面复制 URL直接链接到该快照页面形如https://your-enterprise-url/datasets/roadscene-vehicle-detection/samples?snapshotnewsnapshotSDK使用fo.load_dataset()并传入snapshot参数加载已有快照之后可像普通数据集一样交互除修改类操作外import fiftyone as fo dataset_name quickstart existing_snapshot_name v1 snapshot fo.load_dataset(dataset_name, snapshotexisting_snapshot_name) print(snapshot)五、快照管理创建、删除、回滚、归档创建快照对数据集拥有Can Manage权限的用户可通过 UI 或 Management SDK 创建快照。注意快照只能从数据集的HEAD创建。Enterprise UIHistory 标签页顶部是Create snapshot 面板面板会显示最近一次快照与当前数据集状态之间的变更数。注意最新变更摘要不会持续更新需要点击Refresh按钮重新计算。填写唯一的名称和可选的描述点击Save new snapshot即可。创建耗时取决于所用版本后端、部署选项与数据集大小创建完成后新快照会出现在列表中。SDK先用get_dataset_latest_changes_summary()获取与面板一致的最新变更摘要import fiftyone.management as fom fom.get_dataset_latest_changes_summary(dataset.name)用calculate_dataset_latest_changes_summary()重算对应面板中的 Refresh 按钮import fiftyone.management as fom old fom.calculate_dataset_latest_changes_summary(dataset.name) assert old fom.get_dataset_latest_changes_summary(dataset.name) dataset.delete_samples(dataset.take(5)) # Cached summary hasnt been updated assert old fom.get_dataset_latest_changes_summary(dataset.name) new fom.calculate_dataset_latest_changes_summary(dataset.name) assert new.updated_at changes.updated_at再用create_snapshot()真正创建快照import fiftyone.management as fom dataset_name quickstart snapshot_name v0.1 description Version 0.1 in which I have made many awesome changes! snapshot fom.create_snapshot(dataset_name, snapshot_name, description)删除快照对数据集拥有Can Manage权限的用户可通过 UI 或 Management SDK 删除快照。若删除的是最新快照HEAD 的样本变更摘要不会自动重算需按上文创建章节的方式手动重算过期值若删除的是非最新快照后一个快照的样本变更摘要会自动基于前一个快照重新计算。⚠️ 警告删除快照不可撤销Enterprise UI打开该快照的 3 点kebab菜单点击Delete snapshot在弹出的确认对话框中确认即可防误删。SDK使用delete_snapshot()import fiftyone.management as fom dataset quickstart snapshot_name v0.1 fom.delete_snapshot(dataset, snapshot_name)回滚数据集到快照如果 HEAD 上出现了不想要的编辑数据集管理员可以将数据集**回滚revert**到某个快照的状态。⚠️ 警告这是破坏性操作回滚会丢弃所选快照与当前工作版本之间的全部变更包括所有更新的快照。Enterprise UI在 History 标签页中打开目标快照的 3 点kebab菜单选择Rollback to this snapshot并在确认对话框中确认。SDK使用revert_dataset_to_snapshot()import fiftyone.management as fom dataset quickstart snapshot_name v0.1 description Initial dataset snapshot fom.create_snapshot(dataset, snapshot_name, description) # Oops we deleted everything! dataset.delete_samples(dataset.values(id)) # Phew! fom.revert_dataset_to_snapshot(dataset.name, snapshot_name) dataset.reload() assert len(dataset) 0归档 / 取消归档快照对数据集拥有Can Manage权限的用户可手动将快照归档到配置的冷存储位置或将其取消归档。注意归档期间用户无法在 UI 浏览、无法用 SDK 加载快照必须先行取消归档。Enterprise UI在 History 标签页中打开目标快照的 3 点kebab菜单选择Archive snapshot归档后 Browse 按钮会变为 Archiving 转圈状态取消归档则点击快照行的Unarchive按钮过程会显示 Unarchiving 转圈状态。SDK分别使用archive_snapshot()与unarchive_snapshot()import fiftyone as fo import fiftyone.management as fom snapshot_name v0.1 # We dont use this regularly, archive it! fom.archive_snapshot(dataset.name, snapshot_name) fo.load_dataset(dataset.name, snapshot_name) # throws error, cant load! # Oops we need it now, unarchive it! fom.unarchive_snapshot(dataset.name, snapshot_name) fo.load_dataset(dataset.name, snapshot_name) # works now!六、可插拔后端内部复制后端Internal duplication backendDataset Versioning 采用可扩展架构以支持不同后端实现。在 Enterprise v1.4.0 的初始发布中只有一个后端选项见下后续版本可能实现更多后端但官方优先发布了第一版以便用户尽早获得价值并提供反馈。内部复制后端的工作方式类似克隆数据集快照存储在与原数据集相同的 MongoDB 数据库中。创建快照的性能与存储开销与克隆数据集相当——耗时与数据集大小成正比由于快照与原数据集共用同一数据库应将这些存储需求纳入允许的最大快照数配置的考量。时间与空间特性时间创建快照的耗时与克隆数据集成正比。该后端在创建后立即加载使用的工作流中性能最佳——其他后端需要先存虚拟快照再物化而它只需做一次 MongoDB 内部的整体克隆。另外变更摘要计算可能较慢。注意在 v1.4.0 中计算被修改的样本数在较大数据集上会导致性能下降该值不会为超过20 万样本的数据集计算。后续版本已在 MongoDB 场景下对快照 diff 计算做修复参见仓库 release-notes.rst 中 Enterprise 版本记录。空间所需存储量随快照数量增长而非变更量。由于与普通数据集存储在同一数据库若无法归档创建过多快照可能填满数据库。优势与局限优势✅局限❌简单创建快照耗时与克隆数据集成正比复用现有 MongoDB无需额外部署组件样本变更摘要计算效率较低浏览/加载快因为快照始终处于物化状态存储高度重复高度占用空间对创建即加载工作流开销成本最低物化与虚拟形态合一配置该后端没有专属配置项相关限制通过全局的版本管理配置见下一节控制。七、配置项与最佳实践由于快照会影响 FiftyOne Enterprise 的存储需求系统内置了**护栏guard rails**来限制可创建的最大快照数当用户尝试创建新快照且超出阈值时会收到错误提示告知可能需要清理旧快照。下表为全部可配置项调整默认值时应综合团队需求与存储要求配置项环境变量默认值说明最大快照总数FIFTYONE_SNAPSHOTS_MAX_IN_DB100同一时刻允许的最大快照总数。-1表示无限制。超限时若已启用自动归档则触发归档否则报错单数据集最大快照数FIFTYONE_SNAPSHOTS_MAX_PER_DATASET20每个数据集允许的最大快照数。-1表示无限制。超限时若已启用自动归档则触发归档否则报错快照归档路径FIFTYONE_SNAPSHOTS_ARCHIVE_PATHNone用于快照归档存储的网络挂载文件系统或云存储路径的完整路径。默认None表示禁用归档自动归档最小加载年龄FIFTYONE_SNAPSHOTS_MIN_LAST_LOADED_SEC86400快照被考虑自动归档所需的最小距上次加载年龄秒按now - last_loaded_at计算。该限制用于避免自动归档用户正在活跃使用的快照。默认值为 1 天最佳实践鉴于初始版本选项有限官方给出如下建议尽量在较小的数据集上使用快照空间有限只在里程碑事件想要日后回访或恢复的时间点创建快照及时删除不再需要的旧快照将版本管理配置设置为部署环境可舒适支持的最大值在不挤爆 MongoDB 的前提下更好地支持用户工作流。版本演进参考仓库 release-notes.rst 中的 Enterprise 版本记录印证了该功能的演进脉络v1.4.0 引入数据集版本管理v1.5.0 增加快照归档到冷存储、支持在数据集快照上执行 operators后续版本持续修复例如避免归档含损坏 run 结果的快照时报错、修复大型数据集 MongoDB v6.0 时的快照 diff 计算、修复部分场景下回滚快照的行为、调整数据集与快照的sizeEstimate字段语义等。这些记录可作为评估不同 Enterprise 版本能力时的参考。八、路线图以下为数据集版本管理系统未来迭代的规划方向近期优化较大数据集超过 20 万样本的 diff 计算并为其增加修改摘要支持中长期进一步优化现有版本管理系统支持外部版本管理后端快照搜索内容感知的快照变更摘要探索性快照 diff 的可视化实现分支与合并branch-and-merge模型与版本管理后端工具深度集成使 FiftyOne 数据集能与其模型和媒体一起进行版本管理小结Dataset Versioning 为 FiftyOne Enterprise 提供了数据集即代码式的版本管理能力通过线性、只读的快照序列记录数据集在关键时间点的完整状态配合冷存储归档控制 MongoDB 空间占用再以清晰的权限矩阵与 UI/SDK 双通道操作列出、加载、创建、删除、回滚、归档/取消归档覆盖从日常回退到长期留存的全场景。其可插拔后端架构为未来接入外部版本管理方案预留了空间而当前的内部复制后端 四项环境变量配置FIFTYONE_SNAPSHOTS_MAX_IN_DB、FIFTYONE_SNAPSHOTS_MAX_PER_DATASET、FIFTYONE_SNAPSHOTS_ARCHIVE_PATH、FIFTYONE_SNAPSHOTS_MIN_LAST_LOADED_SEC足以支撑一套立即可用的版本管理实践。需要再次强调的是快照不是备份请务必与常规数据库备份和存储维护流程配合使用。【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价