微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

写入 netCDF 文件非常慢

如何解决写入 netCDF 文件非常慢

我正在尝试对数据集执行一个相当简单的操作,包括在每个 3.5GB 的单个 netcdf 文件上编辑变量和全局属性文件使用 xr.open_dataset 立即加载,但 dataset.to_netcdf() 修改后导出速度太慢。 我试过了:

  1. 无需重新组块和 dask 调用
  2. 不同的块大小,后跟:
  3. load()之前使用to_netcdf
  4. persist()之前使用compute ()to_netcdf

我正在开发具有 10 个分布式工作器的 HPC。在所有情况下,每个文件花费的时间都超过 15 分钟。是预期的吗?除了使用 dask 延迟进一步并行化单个文件操作之外,我还能尝试什么来加速这个过程?

解决方法

首先简要说明:

使用 xr.open_dataset 立即加载文件

可能此时实际上并未加载数据,仅加载了元数据。根据您的 IO 和压缩/编码,加载数据可能需要相当多的 CPU 和内存。您应该知道您认为单个 CPU 线程应该花费多少时间。

回答我们的问题: netCDF (HDF5) 不能很好地处理并行写入。您可能会发现由于锁定,一次只有一个任务正在写入,或者甚至在写入之前输出数据都将转到单个任务,而不管您的分块如何。请检查您的 dask 仪表板!

我建议您尝试 zarr 格式,它适用于并行应用程序,因为每个块都在不同的文件中。您仍然需要决定正确的数据分块 (example)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。