Pangeo:云端的 JupyterHub、Dask 和 XArray
本项工作由 Anaconda 公司、NSF EarthCube 项目以及 UC Berkeley BIDS 提供支持
几周前,我们搭建了 pangeo.pydata.org,这是在 Google Container Engine (GKE) 上对 JupyterHub、Dask 和 XArray 进行的一项实验性部署,旨在支持在大数据集上进行大气科学和海洋学数据分析。这项工作紧随 最近在超级计算机上部署 Dask 和 XArray 以处理相同工作负载的工作 之后。这个系统是一个概念验证,它为我们今后的发展提供了宝贵经验。这篇博文将简要描述问题、系统,然后描述协作,最后讨论我们在未来几个月将努力解决的一些挑战。
问题
大气科学和海洋学通过(卫星)收集和(模拟)生成大量数据集,他们希望使用分布式系统来分析这些数据集。如果科学家拥有自己的集群,Dask 和 XArray 等库已经在计算上解决了这个问题,但我们希望通过部署在基于云的系统上来扩大访问范围。我们构建了一个系统,人们可以轻松登录、获取 Jupyter Notebook 并启动 Dask 集群。我们希望这能增加访问,并将更多科学家与更多基于云的数据集连接起来。
系统
我们集成了现有的多项技术,构建了一个系统,用户可以通过这个系统登录、访问 Jupyter notebook、使用 Dask 启动分布式计算集群,并分析存储在云中的大型数据集。他们可以通过网站获得完整的用户环境,可以利用数千个核心进行计算,并使用他们熟悉的、类似于在笔记本电脑上工作的现有 API 和工作流程。
视频演示如下
这个系统由多项组件和技术组成
- JupyterHub:为我们提供了启动单用户 notebook 服务器的能力,并处理用户管理。特别是,我们使用了 KubeSpawner 以及 Zero to JupyterHub 上优秀的文档,我们向对此领域感兴趣的人推荐这些文档。
- KubeSpawner:一个 JupyterHub spawner,它使得在 Kubernetes 系统上启动单用户 notebook 服务器变得容易
- JupyterLab:经典 notebook 的新版本,我们使用它来提供更丰富的远程用户界面,包括终端、文件管理等功能。
- XArray:提供对 NetCDF 风格数据的计算。XArray 扩展了 NumPy 和 Pandas,使科学家能够以他们认为直观的方式在复杂数据集上表达复杂的计算。
- Dask:提供 XArray 背后的并行计算
- Daskernetes:使得在 Kubernetes 上启动 Dask 集群变得容易
- Kubernetes:如果还不清楚的话,所有这一切都基于 Kubernetes,它管理着在不同机器上启动程序(例如 Jupyter notebook 服务器或 Dask worker),同时处理负载均衡、权限等等。
- Google Container Engine:谷歌的托管 Kubernetes 服务。现在每个主要的云提供商都有这样的系统,这使得我们很高兴没有过度依赖于一个系统。
- GCSFS:一个提供直观访问谷歌云存储的 Python 库,可以通过 Python 文件接口或通过 FUSE 文件系统进行访问。
- Zarr:一种适用于云环境的分块数组存储格式
协作
我们能够在几周内构建、部署和使用这个系统来回答实际的科学问题。我们认为这个结果本身就意义重大,并且主要是因为我们进行了广泛的协作。这个项目需要来自多个项目、机构和资金来源的几位专家的专业知识。以下是一些来自不同组织的个人及其贡献示例。我们列出机构和职位主要是为了展示所涉及的角色。
- Alistair Miles,牛津大学教授:帮助优化了在 GCS 上 XArray 使用 Zarr 的性能。
- Jacob Tomlinson,英国气象局信息学实验室工作人员:开发了最初的 JADE 部署和早期的 Dask-Kubernetes 工作。
- Joe Hamman,美国国家大气研究中心博士后:提供了科学用例、数据和工作流程。优化了 XArray 和 Zarr 以实现高效的数据存储和保存。
- Martin Durant,Anaconda 公司软件开发者:优化了 GCSFS 以处理多访问工作负载。还提供了对 NetCDF 提供支持的 FUSE 系统。
- Matt Pryor,环境数据分析中心工作人员:扩展了最初的 JADE 部署和早期的 Dask-Kubernetes 工作。
- Matthew Rocklin,Anaconda 公司软件开发者:集成。还进行了性能测试。
- Ryan Abernathey,哥伦比亚大学助理教授:XArray + Zarr 支持、科学用例、协调。
- Stephan Hoyer,谷歌软件工程师:XArray 支持。
- Yuvi Panda,UC Berkeley BIDS 和数据科学教育项目工作人员:提供了使用 KubeSpawner 配置 JupyterHub 的帮助。还原型开发了 Daskernetes Dask + Kubernetes 工具。
注意学术机构和营利性机构的混合。还要注意科学家、工作人员和专业软件开发者的混合。我们认为这种混合有助于确保有效构建有用的解决方案。
经验
这个实验教会了我们一些希望进一步探索的事情:
-
用户可以从 Kubernetes pod 启动 Kubernetes 部署,例如从他们的 JupyterHub 单用户 notebook 启动 Dask 集群。
要做好这一点,我们需要在 JupyterHub 中开始更明确地定义用户角色。我们需要在集群上给用户提供一个安全且隔离的空间,以供使用而不影响他们的邻居。
-
HDF5 和 NetCDF 在云存储上的使用是一个悬而未决的问题
用于此类数据的文件格式非常普遍,但在云存储上并不特别方便或高效。特别是用于读取这些格式的库会进行许多小的读取操作,在操作云对象存储时,每一个操作的成本都很高。
我认为有几种选择:
- 使用 FUSE 文件系统,但使用预读和缓存等技巧来优化它们,以弥补 HDF 的访问模式带来的影响。
- 使用 HDF 小组提出的 HSDS 服务,这个服务承诺解决这些问题。
- 采用更适合云环境的新文件格式。Zarr 是一个这样的例子,到目前为止表现出色,但它肯定没有 HDF 和 NetCDF 所赢得的长期信任历史。
-
环境定制很重要且很棘手,特别是在添加分布式计算时。
将此展示给科学小组后,他们立即想使用自己的软件环境来尝试。他们可以在 notebook 会话中轻松使用 pip 或 conda 等工具来做到这一点,但将相同的更改应用到他们的 dask worker 则更具挑战性,特别是在这些 worker 动态地出现和消失时。
我们对此有解决方案。他们可以构建和发布 docker 镜像。他们可以添加环境变量来指定额外的 pip 或 conda 包。他们可以为自己的小组部署自己的 pangeo 环境。
然而,到目前为止,要做好这些都需要一些工作。我们希望结合类似 Binder 的发布方式和像环境变量这样的小修改技巧能解决这个问题。
-
我们的 docker 镜像非常大。这意味着用户有时需要等待一分钟或更长时间才能启动他们的会话或 dask worker(在预热后时间会短一些)。
令人惊讶的是,很多部分来自 conda 和 node 包。我们希望通过改进我们的 Docker 镜像的精简和优化,并与打包社区合作审计包大小来解决这个问题。
-
探索其他云平台
我们最初选择谷歌只是因为他们的 Kubernetes 支持出现得最早,但现在所有主要的云提供商(谷歌、AWS、Azure)都提供一定程度的托管 Kubernetes 支持。我们所做的一切都与特定的云厂商无关,并且一些数据已经存储在其他云平台上的团队已经联系我们,并开始在这些系统上进行部署。
-
与其他团队合作
实际上,我们并不是第一个做这件事的团队。英国气象局信息学实验室几个月前就悄悄地构建了一个类似的原型,即 JADE (Jupyter and Dask 环境)。我们现在正在合作以合并工作。
另外值得一提的是,他们原型开发了第一版的 Daskernetes。
-
与其他社区建立联系
虽然我们最初是与大气科学和海洋学领域的科学家合作,但这些相同的解决方案也适用于许多其他学科。我们应该调研其他领域,并开始与这些社区建立合作。
-
改进 Dask + XArray 算法
当我们在新环境中尝试新问题时,我们经常发现改进 Dask 内部调度算法的新机会。这次也不例外 :)。
许多即将开展的工作都在上游项目中进行,因此,这项实验既对正在进行的科学研究有实际用途,也对这些项目所服务的开源社区有更广泛的用途。
社区反响
在过去一周,我们在几次会议上介绍了这项工作。
- 美国气象学会 Python 研讨会,主题演讲。幻灯片:http://matthewrocklin.com/slides/ams-2018.html#/
- 地球科学信息合作伙伴冬季会议。视频:https://www.youtube.com/watch?v=mDrjGxaXQT4
我们发现这个项目与许多政府机构当前正在努力将大型数据集发布到云存储(主要是 S3)上的工作非常契合。许多这样的数据发布工作都在寻找一个计算系统,以便科学界公众能够访问。我们的项目似乎在无需大量协调的情况下就补充了这些需求。
说明
虽然我们鼓励大家尝试 pangeo.pydata.org,但我们也提醒您,这个系统尚不成熟。特别是,它存在以下问题:
- 它不安全,请不要托管敏感数据。
- 它不稳定,随时可能被关闭。
- 它很小,我们随时只部署了少数核心,主要用于实验目的。
然而,它也是 开放的,并且部署您自己的环境的说明在这里。
欢迎参与
我们是一个不断壮大的团队,由许多机构组成,包括技术人员、科学家和开源项目。有很多工作要做,也有很多东西可以讨论。请通过 github.com/pangeo-data/pangeo/issues/new 与我们参与讨论。
博客评论由 Disqus 提供