ClearML HyperDatasets 实战指南:基于 Dataview 的非结构化数据管理与 PyTorch 数据管线

发布时间:2026/10/15 16:38:51
ClearML HyperDatasets 实战指南:基于 Dataview 的非结构化数据管理与 PyTorch 数据管线 MLOpsLLMOps人工智能【免费下载链接】clearmlClearML - Auto-Magical CI/CD to streamline your AI workload. Experiment Management, Data Management, Pipeline, Orchestration, Scheduling Serving in one MLOps/LLMOps solution项目地址https://gitcode.com/gh_mirrors/cl/clearml点击查看免费下载导读Hyper-Datasets 是 ClearML 面向非结构化数据文本、音频、图像等设计的数据管理系统其核心设计理念是把「元数据」与「原始数据文件」彻底解耦从而允许你在不搬运海量原始文件的前提下自由地对元数据进行查询、筛选与编排。本文以 examples/hyperdatasets/legacy/README.md 为骨架结合仓库内 6 个完整可运行的示例脚本与 clearml/hyperdatasets 模块源码系统讲解「数据集注册ROI 标注与掩码分割→ Dataview 查询与迭代 → PyTorch DataLoader 训练管线」的完整链路。读完本文你将能够把带标注的图像数据注册进 ClearML Enterprise用 Dataview 构建复杂查询视图并将其无缝接入 PyTorch 训练流程。一、Hyper-Datasets 与 clearml-data 的核心差异在深入示例之前先理解 Hyper-Datasets 在 ClearML 生态中的定位。根据 examples/hyperdatasets/legacy/README.md 的说明Hyper-Datasets 面向非结构化数据文本、音频、图像等「文件 丰富元数据」的数据形态是 ClearML Enterprise 服务的一部分相比开源版 clearml-data 提供多项增强能力元数据与原始文件解耦这是它与 clearml-data 最本质的概念差异。原始二进制文件被存放在对象存储等后端元数据帧信息、ROI、标签、掩码、自定义属性独立于文件被索引与管理因此你可以对元数据做任意形式的操作而无需反复搬运大量原始数据Dataview 是连接数据的桥梁用户通过定义 Dataview——一种连接一个或多个数据集中特定数据的复杂查询——把选中的数据绑定到 Experiment Manager 中的实验。本质上是「创建并管理远程数据集的本地视图」。从源码结构看这一设计在 clearml/hyperdatasets 包中得到了完整的实现支撑data_entry.py定义帧与子条目模型data_view.py定义DataView与HyperDatasetQuerymanagement.py提供数据集版本管理后端data_entry_image.py提供图像专用条目实现。注意legacy 示例通过allegroai包导入Task、DataView、SingleFrame、FrameGroup、DatasetVersion等符号见各示例文件头部这是 HyperDatasets 时代的遗留命名示例的 requirements.txt 同时要求allegroai~3.5.7与clearml1.14.4。当前仓库的clearml.hyperdatasets模块则提供DataView、HyperDatasetQuery、DataEntry、DataEntryImage、HyperDatasetManagement等全新实现见 clearml/hyperdatasets/init.py概念一一对应SingleFrame≈DataEntry、FrameGroup≈ 由DataSubEntry聚合的条目容器。二、示例总览两个阶段的完整数据流README.md 将示例划分为两大阶段仓库目录结构如下examples/hyperdatasets/legacy/ ├── README.md ├── requirements.txt ├──>{ rois: [ {poly: [[x1, y1], [x2, y2], ...], labels: [aeroplane], confidence: 0.9, meta: {alive: true}} ], size: {x: 1920, y: 1080}, meta: {dangerous: false} }命令行运行方式从示例目录执行python register_dataset_with_roi.py \ --ext jpg \ --ds_name my_uploaded_dataset \ --version_name my_version三个命令行参数的含义与默认值参数含义默认值--ext从目录上传的文件扩展名jpg--ds_name数据集名称不存在时会自动创建sample-dataset--version_name数据集版本名为空则使用当前版本initial执行流程拆解StorageManager.download_folder(...)把 S3 上的示例数据下载到本地缓存目录Task.init(project_nameuploading_datasets, task_nameupload_sample, task_typeTask.TaskTypes.data_processing, output_uriTrue)初始化一个数据处理类型的 ClearML 任务。注释明确说明output_uriTrue的作用是保证有一个合法的输出目的地上传本地文件同时支持其它存储类型共享文件夹/mnt/share/folder、S3s3://bucket/folder、GCSgs://bucket-name/folder、Azureazure://company.blob.core.windows.net/folder/get_frames_with_roi_meta()遍历目录中的 jpg 文件读取同名 JSON为每个文件构造SingleFrame(sourcefull_path)对象然后遍历data[rois]调用add_annotation(poly2d_xy..., labels..., metadata{alive: ...}, confidence...)添加多边形 ROI 标注最后设置帧级属性a_frame.width、a_frame.height以及自定义元数据a_frame.metadata[dangerous] ...create_version_with_frames()完成版本注册DatasetVersion.create_new_dataset(dataset_name...)获取或创建数据集ds.create_version(version_name...)或DatasetVersion.get_current(...)取当前版本随后调用dv.add_frames(new_frames, auto_upload_destinationTask.current_task().get_output_destination(), local_dataset_root_pathlocal_dataset_path)上传帧并保留本地目录结构local_dataset_root_path参数保证上传目的地的文件结构与本地一致dv.commit_version()提交版本使其在 Enterprise 后端可见。源码印证帧对象模型在 clearml/hyperdatasets/data_entry.py 中有完整实现——DataEntry.add_annotation()第 137-158 行把标注组织为包含label、confidence、meta字段的 ROI 字典DataEntry.to_api_object()第 240-268 行将条目序列化为后端SaveFramesRequest所需的 frame schema其中sources携带每个子条目的id、uri可选preview、哈希rois携带标注列表——这与示例中SingleFrameadd_annotation的用法一一对应。提示脚本注释强调「这是针对特定数据集的定制解析器」每个数据集都需要自己的解析逻辑JSON 结构、字段名可各不相同示例只是展示与SingleFrame/add_annotation对接的标准方式。3.2 示例register_dataset_masks.pyregister_dataset_masks.py 演示注册带语义分割掩码的数据集示例数据位于s3://clearml-public/datasets/hyperdataset_example/ds_with_masks每个样本由xxx_NNNN.jpg与其对应的_mask.png组成目录下另有_mask_legend.json定义 RGB 像素值到类别名的映射。命令行运行方式python register_dataset_masks.py \ --ext jpg \ --ds_name my_uploaded_dataset \ --version_name my_version参数含义默认值--ext图像扩展名png--mask-ext掩码文件扩展名_mask.png--ds_name数据集名称sample-dataset-masks--version_name版本名initial关键实现逻辑FrameGroup 聚合多帧get_frames_with_masks()遍历图像文件跳过掩码文件本身文件名按_拆分第一部分作为frame_group_id第二部分作为组内source_id。每个 group 是一个FrameGroup()行为类似字典key 是字符串value 是SingleFrame组内元素用frame_group[source_id] SingleFrame(sourcefull_path, mask_sourcefull_path_mask)关联图像与其掩码版本级掩码标签映射read_mask_class_values()读取_mask_legend.json把{类名: [R, G, B]}转换为{(R, G, B): [类名]}的像素值→类别映射表注册dv.set_masks_labels(masks_lookup)把掩码标签映射写入数据集版本dv.add_frames(...)上传 FrameGroup 列表dv.commit_version()提交。这一流程体现了「文件级元数据图像↔掩码关联」与「版本级元数据掩码色彩映射」两层信息的组织方式——前者属于帧条目本身后者属于整个数据集版本的属性。四、阶段二用 DataView 查询与消费数据4.1 核心对象DataView 与查询规则根据 clearml/hyperdatasets/data_view.py 的源码DataView构造函数第 249-335 行支持name、description、tags、iteration_ordersequential或random、iteration_infinite、iteration_random_seed、iteration_limit、auto_connect_with_task、project_name等参数默认iteration_ordersequential批量参数_DEFAULT_LOCAL_BATCH_SIZE 500、_MAX_BATCH_SIZE 10000第 245-246 行DataView.add_query()第 566-603 行构造并追加一个HyperDatasetQuery核心参数包括dataset_id/version_id数据集与版本标识示例中使用名称字符串源码注释说明 ClearML 数据集场景下分别对应 collection id 与 version id支持*通配符source_query/frame_query应用于帧来源元数据 / 帧元数据的 Lucene 查询串HyperDatasetQuery._validate_lucene()第 53-77 行在安装了luqum的情况下会校验语法合法性否则仅告警weight多查询组合时的相对采样权重默认1.0filter_by_roi/label_rulesROI 过滤策略与标签规则。add_queries()第 644-664 行支持一次追加单个或多个HyperDatasetQuery在已存在的 dataview 上操作会立即同步后端过滤规则并重新同步所关联任务。Session.verify_feature_set(advanced)data_view.py 第 105 行表明 Dataview 相关能力属于 Enterprise「advanced」功能集与 README 所述「ClearML Enterprise 的一部分」一致。4.2 示例dataview_example_singleframe.pydataview_example_singleframe.py 展示最基本的 Dataview 使用流程from allegroai import Task, DataView task Task.init(project_nameexamples, task_namedataview example) # 简单查询 dataview DataView(iteration_orderrandom) dataview.set_iteration_parameters(random_seed123) # 用 add_query 查询数据集roi_query* 或只指定 dataset/version 可查询全部数据 dataview.add_query(dataset_namesample-dataset, version_nameCurrent, roi_query[aeroplane]) print(count, dataview.get_count()) # 查询返回的帧数量 list_single_frames dataview.to_list() # 生成帧列表元数据会本地缓存 print([f.get_local_source() for f in list_single_frames]) for f in dataview: # 迭代器形式元数据不落本地缓存 print(f.get_local_source())两个遍历方式的关键区别README 与脚本注释明确说明方式说明特点dataview.to_list()一次性生成完整帧列表元数据在本地缓存下次调用to_list()更快适合需要随机访问的场合for f in dataview迭代器流式逐个取出帧元数据不做本地缓存节省磁盘与内存适合顺序消费从源码看迭代器由DataView.Iteratordata_view.py 第 1172 行起实现内部启动一个名为HDVFetcher的后台线程从后端批量拉取帧默认query_cache_size本地 500 / 远端 10000query_queue_depth5通过有界队列向调用方流式供给并支持node_id、worker_index、num_workers做多节点/多 worker 分片。get_count()第 1092-1102 行通过内联 dataview 规格直接向后端请求总数并缓存无需先物化 dataview。4.3 示例dataview_example_framegroup.pydataview_example_framegroup.py 演示以 FrameGroup 为单位的消费方式对应掩码数据集dataview DataView(iteration_orderrandom) dataview.set_iteration_parameters(random_seed123) dataview.add_query(dataset_namesample-dataset-masks, version_nameCurrent) list_frame_groups dataview.to_list() # FrameGroup 是 SingleFrame 的字典用注册时的 key 访问 print([frame_group[000002].get_local_source() for frame_group in list_frame_groups]) for frame_group in dataview: for key in frame_group.keys(): print(frame_group[key].get_local_source(), frame_group[key].get_local_mask_source())要点FrameGroup本质上是一个「字典式」容器键是注册时指定的source_id例如000002值是对应的SingleFrame每个SingleFrame同时持有source与mask_source因此可以同时取得原始图像与掩码的本地路径。源码印证在当前的clearml.hyperdatasets中DataEntryclearml/hyperdatasets/data_entry.py 第 93 行通过add_sub_entries()聚合若干DataSubEntry并按下标索引__iter__按插入序迭代第 281-287 行DataEntryImage/DataSubEntryImageclearml/hyperdatasets/data_entry_image.py则提供图像与掩码来源的读取能力——与 legacy 示例中FrameGroupSingleFrame(mask_source...)的分组语义一致只是实现演进为更统一的条目模型。五、阶段二进阶无缝接入 PyTorch DataLoader5.1 示例pytorch_dataset_example.pypytorch_dataset_example.py 把 DataView 包装成torch.utils.data.Dataset接入 PyTorch 标准数据管线import numpy as np import torch.utils.data from allegroai import DataView, SingleFrame, Task from PIL import Image from torch.utils.data import DataLoader class ExampleDataset(torch.utils.data.Dataset): def __init__(self, dv): self.frames dv.to_list() # 自动平衡所有查询 def __getitem__(self, idx): frame self.frames[idx] # type: SingleFrame img_path frame.get_local_source() img Image.open(img_path).convert(RGB).resize((256, 256)) return np.array(img) def __len__(self): return len(self.frames) task Task.init(project_nameexamples, task_namePyTorch Sample Dataset) dataview DataView() dataview.add_query(dataset_namesample-dataset, version_nameCurrent) # 需要后台预下载全部文件时取消下面一行的注释 # dataview.prefetch_files() dataset ExampleDataset(dataview) data_loader DataLoader(dataset, batch_size2, num_workers1, pin_memoryTrue, prefetch_factor2) for i, data in enumerate(data_loader): print(f{i}] {data})脚本要点ExampleDataset.__init__中调用dv.to_list()一次性取得帧列表——注释说明这会自动调整以平衡所有查询当 Dataview 包含多个查询时组合结果会按weight权重平衡采样可选调用dataview.prefetch_files()让所有文件在后台预下载之后get_local_source()即可直接命中本地缓存避免训练时逐个等待下载DataLoader使用batch_size2, num_workers1, pin_memoryTrue, prefetch_factor2等常见参数说明 DataView 提供的帧列表与标准 PyTorch Dataset 完全兼容。源码印证当前实现中对应的预取能力为DataView.prefetch_local_sources()data_view.py 第 1111-1170 行它通过线程池ThreadPoolExecutor默认 worker 数为 CPU 数从迭代器中提取每个 data entry 的source、可选preview_source、可选mask_sourceURI调用StorageManagerDiskSpaceFileSizeStrategy.get_local_copy()拉取到本地缓存并支持wait阻塞至完成、force_download绕过缓存强制重下等参数。这正是 legacy 中prefetch_files()的演进版本。5.2 示例pytorch_dataset_example_with_masks.pypytorch_dataset_example_with_masks.py 是带掩码的版本__getitem__同时返回图像与掩码class ExampleDataset(torch.utils.data.Dataset): def __init__(self, dv): self.frames dv.to_list() def __getitem__(self, idx): frame_group self.frames[idx] # type: FrameGroup img_path frame_group[000002].get_local_source() img Image.open(img_path).convert(RGB).resize((256, 256)) mask_path frame_group[000002].get_local_mask_source() mask Image.open(mask_path).resize((256, 256)) return np.array(img), np.array(mask), def __len__(self): return len(self.frames) dataview DataView() dataview.add_query(dataset_namesample-dataset-masks, version_nameCurrent) # 也可以同时查询多个数据集 # dataview.add_query(dataset_namesample-dataset, version_nameCurrent, # roi_query[aeroplane])两个实用技巧一个 DataView 叠加多个add_query被注释掉的第二行展示了把掩码数据集与普通数据集带roi_query[aeroplane]过滤组合在同一视图下的写法——这正好体现了 Dataview「连接一个或多个数据集中的特定数据」的能力同一source_id键访问掩码数据集中以000002为键同时取得图像与掩码本地路径二者由注册阶段建立的SingleFrame(source..., mask_source...)关联保证一致。六、运行环境与前置条件依赖安装按 examples/hyperdatasets/legacy/requirements.txt 安装allegroai~3.5.7、clearml1.14.4、numpy、Pillow、torch服务端能力Hyper-Datasets 与 Dataview 属于 ClearML EnterpriseSession.verify_feature_set(advanced)会校验功能集需要在支持该功能集的 ClearML 服务端环境中运行凭据与存储脚本依赖Task.init(...)建立与 ClearML 服务端的连接上传目的地默认取任务的输出地址也可按 3.1 节配置为 S3 / GCS / Azure / 共享目录示例数据托管在s3://clearml-public/datasets/hyperdataset_example/下由StorageManager自动下载读者也可替换为自有数据目录并编写对应解析器数据集命名约定数据注册与数据使用阶段使用相同的数据集名 版本名示例中的sample-dataset/sample-dataset-masks与Current才能查询命中二者是一对一的消费关系。七、完整工作流小结与进一步资源把上述阶段串联起来一套基于 Hyper-Datasets 的 CV 数据管线如下带标注的本地/S3 图像数据 │ register_dataset_with_roi.py / register_dataset_masks.py ▼ ClearML Enterprise 数据集版本元数据 文件 URI 解耦存储 │ dataview_example_*.pyadd_query → get_count / to_list / 迭代 ▼ Dataview 本地视图查询结果、随机种子、缓存策略 │ pytorch_dataset_example*.pyto_list / prefetch ▼ PyTorch Dataset / DataLoader → 训练实验Experiment Manager 关联进一步探索阅读 clearml/hyperdatasets/data_view.py 可了解DataView.Iterator的多节点分片node_id/worker_index/num_workers、无限迭代与合成 epoch 均衡逻辑阅读 clearml/hyperdatasets/data_entry.py 与 clearml/hyperdatasets/data_entry_image.py 可掌握帧条目、子条目、ROI 标注与向量的数据模型clearml/hyperdatasets/management.py 则展示了数据集/版本管理后端的实现clearml/storage/manager.py 是StorageManager下载/上传能力的底层实现。Hyper-Datasets 相关的数据视图dataviews.py与帧frames.py服务端 API 定义可在 clearml/backend_api/services/v2_23 中查看。赞分享MLOpsLLMOps人工智能【免费下载链接】clearmlClearML - Auto-Magical CI/CD to streamline your AI workload. Experiment Management, Data Management, Pipeline, Orchestration, Scheduling Serving in one MLOps/LLMOps solution项目地址https://gitcode.com/gh_mirrors/cl/clearml点击查看免费下载相关推荐Chat2DB数据湖结构化与非结构化数据统一管理Chat2DB数据湖结构化与非结构化数据统一管理 引言数据管理的新范式 在当今数据驱动的时代企业面临着前所未有的数据挑战。结构化数据SQL数据库与非结数据库客户端AI 应用数据分析GPT-Crawler与数据湖仓统一管理结构化与非结构化数据GPT Crawler与数据湖仓统一管理结构化与非结构化数据 引言数据管理的二元困境与解决方案 企业数据管理正面临严峻挑战80%的业务价值隐藏在文档、网页AI 应用RAG人工智能网页爬虫苹果M1芯片革命原生ARM64 Android模拟器性能飞跃指南苹果M1芯片革命原生ARM64 Android模拟器性能飞跃指南 还在为你的M1 Mac上运行Android模拟器时遇到的性能瓶颈而烦恼吗如果你是一位And创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询