Pangeo:地球科学

我是谁?

我是Ryan Abernathey,一名物理海洋学家,任教于哥伦比亚大学 / 拉蒙特-多尔蒂地球观测站

我是Pangeo 项目的创始成员,该项目旨在协调和支持开发开源软件,用于分析非常大的地球科学数据集,例如卫星观测数据或气候模拟输出。Pangeo 由美国国家科学基金会拨款 1740648资助,我是该项目的首席研究员。

我们试图解决什么问题?

许多海洋学和大气科学数据集由数值数据的多维数组组成,例如在规则的纬度、经度、深度、时间网格上采样的温度。这些可以是真实数据,由气象气球、卫星或其他传感器等仪器观测到;也可以是模拟产生的“虚拟”数据。这些领域的科学家对这些数据集进行极其广泛的不同分析。例如:

  • 简单的统计数据,如均值和标准差

  • 时空变异性的主成分分析

  • 具有不同时空采样的数据集的相互比较

  • 在各种空间和时间维度上的谱分析(傅里叶变换)

  • 收支诊断(例如,计算热量守恒方程中的各项)

  • 用于模式识别和预测的机器学习

科学家喜欢交互式和迭代地工作,尝试计算,可视化结果,并调整他们的代码,直到最终得到一个值得发表的结果。

传统的工作流程是将数据集下载到个人笔记本电脑或工作站并在那里执行所有分析。随着传感器技术和计算能力的不断发展,我们的数据量呈指数级增长。这种工作流程对于多 TB 级别的数据集来说是不可行或低效的,对于 PB 级别的数据集则是不可能的。我们在 Pangeo 中试图解决的根本问题是:面对超大规模数据集,我们如何保持快速、交互式分析的能力?Dask 是我们解决方案的重要组成部分。

Dask 如何提供帮助

我们的大型多维数组与 Dask 的 array 模型非常契合。我们的用户倾向于通过Xarray与 Dask 进行交互,Xarray 添加了额外的标签感知操作以及按组/重采样功能。Xarray 数据模型明确受到了地球科学中广泛使用的通用数据模型格式的启发。Xarray 在开发早期就集成了 dask,从而实现了这些包之间的紧密集成。

Pangeo 提供了在高性能计算集群和云平台上部署 Jupyter、Xarray 和 Dask 的配置。在这些平台上,我们的用户使用 xarray 从各种不同的存储格式中惰性加载数据,并在 Jupyter notebook 中执行分析。通过与 Dask 开发团队密切合作,我们尝试使用 dask-kubernetesdask-jobqueue 等包来简化交互式启动 Dask 集群的过程。用户利用这些包在计算系统的许多节点上交互式地启动自己的 Dask 集群。然后,Dask 会自动并行化基于 xarray 的计算,而用户无需编写太多专门的并行代码。用户赞赏 Dask 控制面板,它能可视化地显示当前分析的进度和效率。当一切顺利运行时,Dask 对用户来说基本上是透明的。

我们最初为何选择 Dask

Pangeo 源自 Xarray 开发小组,因此 Dask 是一个自然的选择。除此之外,Dask 的灵活性非常适合我们的应用;正如上面所述,这个领域的科学家进行着范围广泛的不同类型分析。我们需要一个并行计算引擎,它不会严格限制可以执行的计算类型,也不要求用户深入并行化的细节。

痛点

Dask 的灵活性伴随着一定的开销。我的印象是,我们的用户生成的图(可以轻松超过一百万个任务)正在挑战 dask 调度器的极限。当提交这些任务时,调度器崩溃或处理时间过长的情况并不少见。我们的权宜之计主要是退回到在 Dask 之前我们不得不做的那种基于循环的大数据集迭代。所有这些都损害了我们试图实现的交互式体验。

然而,这个项目的第一年让我对未来感到乐观。我认为 Pangeo 用户和 Dask 开发人员之间的互动相当成功。我们的用例帮助发现了几个性能瓶颈,这些瓶颈已经在 Dask 层面得到了修复。如果这种趋势能够持续下去,我相信我们将能够达到我们期望的规模(PB 级)和速度。

更广泛的问题与新用户的入门有关。虽然我上面说过 Dask 对用户来说是透明的,但这并非总是如此。习惯于编写基于循环的代码来处理数据集的用户必须围绕延迟执行范例进行再培训。将遗留代码转换为 Dask 友好格式可能是一个挑战。某种“速查表”可能会有所帮助。

Dask 周边的技术

Xarray 是我们与 Dask 交互的主要方式。我们大量使用 dask-jobquequedask-kubernetes 项目。

我们还广泛使用Zarr进行存储,尤其是在云端,我们还使用 gcsfss3fs 与云存储进行接口。