Agent Skills
返回列表
💻

cuPyNumeric HDF5 并行读写

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/cupynumeric-hdf5。

技能介绍

要解决什么问题

在 HPC 或 GPU 后处理流水线里,cuPyNumeric 数组往往要落盘成 单文件 .h5 / .hdf5,或从已有 HDF5 数据集恢复。常见坑是:用单进程 h5py 把整块数组经主机内存搬一遍——既慢,也容易在大规模分布式 rank 上踩内存上限。本技能聚焦 Legate 集体 I/O:每个 rank 只读写自己负责的瓦片,文件侧通过 HDF5 虚拟数据集(VDS) 呈现为一个逻辑数组。

技能如何工作

核心 API 来自 legate.io.hdf5,常用三个函数:

  • to_file(array, path, dataset_name):把 cuPyNumeric ndarray / LogicalArray 写入 HDF5;可直接传 ndarray(实现 __legate_data_interface__),不必先 np.array(...) 来回转。
  • from_file(path, dataset_name):读入分布式 LogicalArray;用 cn.asarray(la) 零拷贝桥接成 cuPyNumeric ndarray。
  • from_file_batched(path, dataset_name, chunk_size):按块读文件(分块的是文件读取,不是最终数组形状);每块带全局偏移,边界块会被裁剪,需按实际块形状拼接。

dataset_name 必须是数据集在文件内的完整路径(如 /data、/group/x),不要传组名。Legate I/O 是异步的:to_file 只是排队写入;在 h5py、子进程或其它工具打开文件前,应调用 get_legate_runtime().issue_execution_fence(block=True)。同一 Legate 程序内后续的 from_file 通常可省略栅障。SPMD 下每个 rank 使用相同的 path,不要用按 rank 的临时文件名。

GPU 上把 HDF5 直接读到 GPU 内存时,应设置 LEGATE_IO_USE_VFD_GDS=1(基于 nv-legate/vfd-gds,非 KvikIO):默认 POSIX VFD 的 ZCMEM 分段缓冲约 128 MB,更大 GPU 读取可能中止;GDS VFD 可规避该限制,无 GPUDirect 存储时 cuFile 也可兼容回退。仅读到 CPU 主机内存时可不设置。

适用边界与注意点

  • 仅单文件 HDF5;Parquet/Arrow/cuDF、自定义分片布局、Zarr/S3 分块输出、.npz/pickle 等应走其它路径(如 parallel-data-load 或 h5py 纯读取)。
  • 导入 legate.io.hdf5 前需已安装 h5py(模块加载时会 import h5py)。
  • to_file 会覆盖已存在的 path,且 path 必须是文件路径不能是目录;数组需有界形状(未指定 shape 的原始 LogicalArray 会报 ValueError)。
  • 在 cuPyNumeric 源码树内运行可能遮蔽已安装包;建议在树外目录执行。
  • API 路径为 legate.io.hdf5(Legate 26.01+),勿再用旧版 legate.core.io.hdf5。

使用场景

  • 多 rank MPI/SPMD 仿真结束后,要把各 GPU 上的 cuPyNumeric 场量写入单个 `.h5`,供下游单文件后处理使用
  • 已有 TB 级 HDF5 数据集,需在 Legate 集群上分块 `from_file_batched` 拉取,避免单进程一次性占满主机内存
  • GPU 内存中持有大型 cuPyNumeric 数组,需从 HDF5 直接读入 GPU 并配置 GDS VFD,规避默认 128 MB ZCMEM 分段限制
  • 同一 Legate 程序内先集体 `to_file` 再 `from_file` 做检查点往返,并在外部 h5py 打开前插入 execution fence

适合人员

  • 维护 GPU/Legate 数值模拟流水线、需把分布式数组落盘为 VDS 单文件的 HPC 应用工程师
  • 负责仿真后处理脚本、要在 rank 间并行读写 HDF5 而非单进程 h5py 拷贝的数据工程师
  • 调优 Legate I/O 与 GPUDirect Storage、处理大数组 GPU 读取中止问题的集群/存储工程师
  • 从旧版 `legate.core.io.hdf5` 迁移到 Legate 26.01+ `legate.io.hdf5` 的 cuPyNumeric 集成维护者