蚊子基因组测序
目录
蚊子基因组测序¶
我是谁?¶
我是 Alistair Miles,在牛津大学大数据研究所工作,同时也是惠康桑格研究所的附属研究员。我负责疟疾传播媒介(蚊子)基因组学项目,该项目属于疟疾基因组流行病学网络,这是一个由研究人员和疟疾控制专业人员组成的国际网络,他们正在开发基于基因组测序的新技术,以协助消灭疟疾的努力。我还担任基因组学与全球健康中心的流行病学信息学主管技术职位,这意味着我对我们在牛津和桑格团队中的计算、软件架构和方向具有一定的监督和责任。
我正在尝试解决什么问题?¶
疟疾仍然是导致死亡的主要原因,尤其是在撒哈拉以南非洲地区。研究表明,减少疟疾的最佳方法是控制在人与人之间传播疟疾的蚊子。不幸的是,蚊子种群对用于控制它们的杀虫剂产生了抗药性。需要新的蚊子控制工具。还需要新的蚊子种群监测系统,以帮助了解并调整控制策略,应对蚊子的进化。我们已启动一个项目,通过对从 18 个非洲国家的野外采集的大约 3,000 只蚊子进行全基因组测序,以进行蚊子遗传多样性的初步调查,该项目称为冈比亚按蚊 1000 基因组项目。我们目前正在努力扩大我们的测序规模,以实现每年测序约 10,000 只蚊子,并将基因组测序整合到非洲和东南亚的常规蚊子监测项目中。
Dask 如何提供帮助?¶
全基因组序列数据是一个相对大规模的数据资源,需要专门的处理和分析来提取关键信息,例如识别与杀虫剂抗性进化相关的基因。我们使用传统的生物信息学方法进行数据处理的初始阶段(比对、变异检测、单倍体定相),但在那之后,我们转而使用 Jupyter notebook 进行交互式和探索性分析。
对大规模数据进行交互式分析显然是一项挑战,因为低效的代码和/或计算资源的使用会极大地增加任何计算所需的时间,从而破坏分析师在数据集中探索多种不同可能性的能力。Dask 通过提供一个易于使用的框架来并行化计算,无论是在单个工作站的多个核心上,还是在集群的多个节点上。我们开发了一个名为 scikit-allel 的软件包来帮助我们进行遗传分析,并在该软件包中使用 Dask 来并行化一些常用的计算。
我为什么选择 Dask?¶
通常,将任何给定计算的串行(即单核)实现转换为并行(多核)实现需要完全重写代码,因为并行框架通常提供完全不同的 API,并且管理复杂的并行工作流是一项重大的挑战。
最初 Dask 的吸引力在于它提供了一个熟悉的 API,dask.array 包相对紧密地遵循了 numpy API(我们当时已经在使用了)。Dask 还处理了构建和运行复杂、多步骤计算工作流的所有复杂性。
如今,我们还对 Dask 所提供的灵活性感兴趣,它可以最初通过多线程在单个计算机的多个核心上并行化,然后以相对较小的代码改动切换到在多节点集群上运行。因此,计算可以非常方便地进行扩展或缩小。当我们最初开始使用 Dask 时,我们专注于有效利用多线程在单个计算机上工作,现在随着数据增长,我们正在将数据和计算迁移到云环境中,并希望通过 Kubernetes 使用 Dask。
痛点?¶
最初我们在 2015 年开始使用 Dask 时遇到了一些 bug,并且 Dask 生成的一些错误信息非常隐晦,因此调试一些问题很困难。然而,代码库的稳定性、用户文档和错误信息最近有了很大改进,对 Dask 的持续投入显然为用户增加了许多价值。
仍然很难思考如何在多维数组上编写并行操作的代码,尤其是当应用到数据上的函数会丢弃一个或多个维度时,但这其中存在一些固有的复杂性,所以 Dask 可能也帮不上太多忙。
Dask 代码库本身整洁一致,但要深入理解和调试问题相当困难。同样,Dask 处理了许多固有的复杂性,所以可能也无能为力。
我在 Dask 周边使用的技术¶
我们目前正按照Pangeo 项目所采取的方法,在云上基于 Kubernetes 部署 JupyterHub 和 Dask。我们主要通过 scikit-allel 包使用 Dask。我们还主要将 Dask 与 Zarr 数组存储库一起使用(实际上,编写 Zarr 的最初动机是提供一个能够让 Dask 高效并行化 I/O 密集型计算的存储库)。
还有什么需要了解的?¶
我们的分析代码仍然相当异构,一部分代码使用了我们在了解 Dask 之前开发的定制式外核计算方法,其余部分则使用了 Dask。这只是时间遗留的问题,一些工作是在了解 Dask 之前就开始了。现在 Dask 已经非常稳定和成熟,我很高兴能推动全面采用它。
这需要用户转变思维,适应延迟(惰性)计算。这刚开始可能是一个绊脚石,但值得花时间学习,因为它赋予了用户运行更大规模计算的能力。所以我一直在考虑写一篇博客文章,传达我们正在尽可能地采用 Dask 的信息,并介绍延迟计算的编程风格,结合我们领域(群体基因组学)的例子。scikit-allel 中还有不少函数可以通过 Dask 并行化,但尚未完成,所以我仍然有这方面的愿望。不确定什么时候能完成这些,但希望能传达更广泛采用 Dask 的意图,并帮助培训我们身边的社区成员使用它。