cuPyNumeric 并行 HDF5 I/O
让分布式 cuPyNumeric 数组高效读写单文件 HDF5。
技能明确限定为单文件 HDF5 I/O,披露 h5py、Legate、GDS/cuFile 依赖,并警告异步写入、同一路径和 to_file 覆盖风险;但没有要求用户确认覆盖、提供回滚/备份方案,也缺少敏感数据处理和更细的数据流权限说明,因此扣分。
API、版本迁移、参数约束、常见错误和故障排查较完整,且附有往返与批量读取脚本及评估报告;但本次仅静态阅读,脚本未执行,GPU/GDS、多节点和边界行为的可复现性与失败反馈仍有限,因此按静态上限保守扣分。
触发条件、非适用场景、输入输出和纯 h5py/Parquet/Zarr/NPZ/原始二进制的分流较清晰;但未提供中文使用说明或中文示例,环境适配范围和大陆网络可达性证据有限,因此扣分。
文档结构清楚,包含安装、API、示例、限制、故障排查、版本信息、作者、许可证、上游和文档链接;但描述过长,缺少明确 changelog、长期维护责任和更新流程,且许可证元数据为 NOASSERTION 与文件内声明不完全一致,因此扣分。
技能覆盖保存、读取、批量读取、GPU I/O 和故障场景,示例输出可直接使用,提交的评估报告显示正向任务表现良好;但静态审查不能确认当前依赖版本和所有关键路径实际可用,且大规模性能收益缺少可核验基线,因此按静态上限计分。
存在 API/上游/文档引用、提交的测试脚本、评估任务和 NVSkills-Eval 报告,提供了一定审计线索;但没有本次独立执行,也缺少 CI 工作流或多源独立复核,故按静态上限计分。
- to_file 会覆盖已有目标文件;生产使用前应由用户确认路径并自行实施备份或回滚。
- GPU 大数据读取依赖特定 Legate、GDS/cuFile、驱动和硬件组合;文档中的强制性 GDS 建议应在目标环境中验证。
- h5py、cuPyNumeric、Legate 版本兼容性和多节点共享文件系统行为未在本次审查中执行验证。
- 文档主要为英文,未证明中文错误信息、示例或大陆网络环境下的文档可达性。
这个 Skill 能做什么,适合哪些场景?
该技能指导开发者使用 Legate 的并行 HDF5 I/O,将 cuPyNumeric 数组写入或读取为单个 HDF5 文件。它支持完整数据集读取、分块读取,以及通过 GPUDirect Storage 将大型数据直接读入 GPU。技能要求 cuPyNumeric、Legate 26.01 或更高版本和 h5py。它适合 HPC 和多 GPU 数据管线,但不覆盖 Zarr、Parquet、原始二进制或纯数组计算。
调用 legate.io.hdf5 的 to_file 将 cuPyNumeric 数组或 LogicalArray 写入 HDF5 虚拟数据集;调用 from_file 将单个 HDF5 数据集读取为分布式 LogicalArray;调用 from_file_batched 按指定 chunk_size 分块读取并返回各块及其全局偏移;使用 cn.asarray 将 LogicalArray 转回 cuPyNumeric 数组;在外部读取器访问异步写入结果前,通过 Legate execution fence 等待写入完成;GPU 读取时配置 LEGATE_IO_USE_VFD_GDS=1。
- HPC 开发者需要让多进程或多 GPU 将大型 cuPyNumeric 数组写入一个共享的 .h5 或 .hdf5 文件。
- 数据工程师需要把 HDF5 中的单个数据集加载为分布式 cuPyNumeric 数组。
- 内存受限的科学计算流程需要分块读取大型 HDF5 文件,再按实际块形状组装结果。
- GPU 数据管线需要将大型 HDF5 数据集读入 GPU,并通过 GDS VFD 避免约 128 MB ZCMEM 暂存限制。
- HPC 后处理流程要求上游程序产出单个 HDF5 文件,而不是每个进程各写一个文件。
这个 Skill 有哪些优点和局限?
- 每个 rank 并行读写自己的数据块,同时呈现为单个 HDF5 数据集。
- 支持完整读取、分块读取和 LogicalArray 到 cuPyNumeric 的 cn.asarray 桥接。
- 为大型 GPU 读取提供 GDS VFD 路径,可避免默认约 128 MB ZCMEM 暂存限制。
- 技能正文包含 API 签名、边界条件、故障排查和可选验证脚本。
- 仅支持单文件 HDF5;不负责 Parquet、Arrow/cuDF、原始二进制、Zarr、S3、npz 或 pickle。
- 必须显式安装 h5py,否则导入 legate.io.hdf5 会失败。
- to_file 会覆盖已有目标文件,且写入是异步的;外部读取前必须正确 fence。
- GPU 读取需要额外配置 GDS VFD、cuFile,并处理兼容模式。
- 源材料未提供平台覆盖范围、性能基准数值或独立测试套件证据。
如何安装这个 Skill?
使用仓库 README 支持的 skills CLI 安装指定技能:npx skills add nvidia/skills --skill cupynumeric-hdf5 --yes。随后安装必需的 h5py:conda install -c conda-forge h5py。源材料未说明 cuPyNumeric 和 Legate 的具体安装步骤;它只要求 Legate 26.01 或更高版本。
如何使用这个 Skill?
可向已加载技能的代理提出:“用 cuPyNumeric 和 Legate 将大型数组并行写入 out.h5,并在外部读取前正确 fence。”核心调用是 from legate.io.hdf5 import to_file, from_file, from_file_batched;将数组直接传给 to_file(array=a, path="out.h5", dataset_name="/data"),读取时用 cn.asarray(from_file("out.h5", "/data"))。to_file 和 from_file 必须在所有 rank 使用相同路径;to_file 后若要用 h5py 或其他外部工具读取,先调用 get_legate_runtime().issue_execution_fence(block=True)。GPU 读取前设置 LEGATE_IO_USE_VFD_GDS=1,并从 cuPyNumeric 源码树之外运行程序。
这个 Skill 与同类方案有什么区别?
与直接使用 h5py 相比,该技能面向 cuPyNumeric/Legate 的分布式数组和并行 I/O,而不是普通单进程 HDF5 读取。与 Zarr 相比,它针对单文件 HDF5,不覆盖分块对象存储或 S3 输出。与 Parquet/cuDF、原始二进制和 npz/pickle 相比,它不提供这些格式的读写路径。