作为 Dask 生命科学研究员一年来的思考
作者:Genevieve Buckley
摘要
Genevieve Buckley 于 2021 年被聘为 Dask 生命科学研究员,该职位由 CZI 资助。目标是改进 Dask,重点关注生命科学社区。这篇博文包含又一份进展更新,以及一些回顾过去一年的个人思考。
目录
进展更新
2021 年 2 月至 9 月的先前进展更新可在此处获取。请继续阅读 2021 年 9 月至 12 月期间的进展更新。
总而言之,在 2021 年 9 月至 12 月期间(含),取得了以下成果:
- 在 7 个仓库(
dask
、distributed
、dask-image
、dask-tutorial
、ITK
、napari
和napari.github.io
)中合并了 32 个拉取请求 - 8 个待处理拉取请求
- 发布了 1 个新的
dask-image
版本 - 举办了 1 次 Dask 教程,并协助了另一次教程。
- 发布了 4 篇新的 Dask 博文(如果算上这篇,就是 5 篇)
请继续阅读,了解此期间内特殊项目的更详细描述。
Dask 过期问题清理冲刺
在两周内,我得以
- 关闭了 117 个过期问题,并且
- 确定了另外 25 个潜在的“轻松解决”问题供维护团队进一步调查。
许多其他人也在同一时间进行了相关工作,跟进旧的拉取请求和其他维护工作。总体而言,这次冲刺非常成功。
Dask 用户调查结果分析
9 月份,我分析了 2021 年 Dask 用户调查的结果。这是一项非常有趣的任务。由于我们在 2021 年提出了更多问题(18 个新问题,总共 43 个问题),与往年相比,有更多数据可供深入挖掘。你可以在这里阅读完整详情。
这项工作最大的好处是,我们现在可以使用这些数据来优先改进文档和示例。用户最普遍的两个请求是需要更多文档以及其所在行业的更多示例。直到今年我们才开始询问人们所从事的行业,因此我们可以针对最需要的领域(地理科学、生命科学和金融)撰写新的叙述性文档。
ITK 与 Dask 的兼容性
我实现了 itk 图像的 pickle 序列化(ITK PR #2829)。这应该是使 ITK 图像与 Dask 兼容所需的最后几个重要部分之一。它建立在 Matt McCormick 和 John Kirkham 先前工作的基础上(你可以在此处阅读他们先前工作的博文)。
提高 Dask 与其他项目的跨兼容性是我的主要目标之一,因此这是一项重要的工作。我在 Dask 的下一步是什么?一节中概述了后续步骤。
改进 rechunking
我实现了 PR #8124,修复了一个错误,该错误是重塑 Dask 数组时可能导致输出数组的块太大而无法放入内存。生命科学用户调查的反馈表明,改进 Dask 在 rechunking 方面的性能是重中之重。这项工作有助于解决这个问题。
高层图工作
今年早些时候的一项主要工作是引入用于数组切片和数组重叠操作的高层图。这是一项需要大量持续努力的巨大工作。PR #8467 解决了这项工作的后续步骤之一。
dask-image 的 find_objects 函数
我在 PR #240 中为 dask-image
实现了一个 find_objects
函数。此实现无需提前知道最大标签编号,这比之前的尝试有了实质性改进。这是一个重大的进步,因为它消除了引入类似 scikit-image 的 regionprops
功能的主要障碍。
博文
2021 年 9 月至 12 月期间发布的 Dask 博文包括
- 在 Dask 中选择合适的块大小
- 这篇博文解决了关于使用 Dask 的一些非常普遍的担忧和问题。我对这篇文章非常满意,经过几位细心审阅者的修改,最终的成果比启发它的Twitter 帖子更强大、更全面。
- 这也是一项高影响力的工作。在 Dask 调查中,最常见的请求是需要更多文档,这部分内容有助于解决这个问题。Twitter 分析也显示,与类似推文相比,该内容的互动程度高得多,表明社区对此类解释有需求。
- 马赛克图像融合(与 Volker Hisenstein 和 Marvin Albert 合著)
- 这篇博文历时数月才完成(8 月中旬开始,12 月发布)。很高兴看到人们分享他们利用 Dask 解决实际问题的出色工作。
- CZI EOSS 更新
- 这篇博文与社区分享了提供给 CZI 的一份中期进展更新。
- 2021 年 Dask 用户调查结果
- 如上所述,Dask 用户调查的分析结果于 2021 年 9 月发布。
教程
- 我于 2021 年 11 月 25 日在 ResBaz 悉尼在线会议上发表了 Dask 教程。感谢 ResBaz 组织者以及 David McFarlane、Svetlana Tkachenko 和 Oksana Tkachenko 在当天监控聊天室回答问题。
- Naty Clementi 于 2021 年 11 月 4 日为 Women Who Code DC 聚会举办了 Dask 教程。我协助了 Naty,主要负责监控聊天室的问题。
个人思考
回顾过去的一整年,有些事情进展顺利,有些则不太成功。
今年的亮点
我的个人亮点包括
- ITK + Dask 集成工作(如上所述的更详细讨论)。
- dask-image 的 find objects 函数(如上所述的更详细讨论)。
- 可视化工作,因为它影响非常大。我们正在解决生命科学团体提出的问题,但改进后的工具惠及所有使用 Dask 的人。
- 来自 dask PR #7391 的这个错误修复,因为这一个改动同时修复了四个地方的问题(
scikit-image
、dask-ml
、xgcm/xhistogram
以及 cupy dask 测试)。 - 社区建设、会议和参与。今年在活动上投入了大量精力,这无疑带来了回报。
成功之处
Dask 过期问题清理冲刺
- 这对项目和我个人都很有用。梳理旧问题是了解特定主题专家是谁的一种极其有效的方式。如果这能在刚开始处理 Dask 工作的头几个月进行,而不是最后几个月,那就更好了。
- 有人建议,熟悉情况的一个好方法是花 6 个月全职管理问题追踪器。也许这是事实,但短得多的过期问题冲刺是在短时间内获得许多同样好处的一种非常有效的方式。我会向新的维护者或分诊团队成员推荐它。
社区建设活动
我们在社区建设和活动方面取得了非常成功的一年。这包括教程、研讨会、会议和社区外展。主要活动总结
- 11 月在 ResBaz 悉尼 2021 主导了 Dask 教程。
- 8 月在 澳大利亚光学显微镜会议上共同主导了关于 napari 和 Dask 的半天教程。
- 7 月在 SciPy 2021 发表了题为 扩展科学:利用 Dask 服务生命科学 的演讲。
- 于 2021 年 5 月在 Dask 峰会上组织了 Dask 生命科学研讨会。该生命科学研讨会包括 15 个预先录制的演讲和 3 个互动讨论。
- 于 2021 年 5 月在 Dask 峰会上共同组织了 Dask Down Under 研讨会。Dask Down Under 包括 5 个演讲、2 个教程、1 个小组讨论和 1 次见面交流活动。
- 2 月在 VIS2021 研讨会上担任专家小组成员。
可视化工作
这是一项影响深远的工作,我对我们取得的成就感到满意。我们在生命科学社区调查中,用户要求改进可视化工具。这是一个高优先级事项,因为可视化工具的改进惠及所有使用 Dask 的人。
不足之处
技术资源
我们从未真正解决找到我可以请教技术问题的人的问题。对于一些特定项目,确实有人可以问,但在大多数情况下,我没有一个好的方法将问题导向合适的人。这是一个具有挑战性的问题,尤其因为大多数 Dask 维护者和贡献者也有全职工作。在我看来,这负面影响了工作和我们能够取得的成就。
被添加到 @dask/maintenance 团队
如果你没有 GitHub 权限来处理通知,那么收到通知就没有意义。将来我认为我们应该只将至少具有分诊或写入权限的人添加到 github 团队。
实时互动
- 我们为生命科学社区尝试了“向维护者提问”办公时间,但参与人数很少,所以我们取消了。
- 我们在日历中添加了一些“Dask 社交聊天”活动,但除了最初几次之外,参与人数不多。大多数情况下,无人参与。(还有一个针对美洲/欧洲时区的社交聊天,对大多数人来说时间更方便,可能更受欢迎。)
Slack
Slack 很适合私信特定人员安排会议时间等,但公共频道对我个人来说最终并没有太大用处。
缺乏与其他项目团队的整合
作为一名独立开发者,能做的事情是有限的。我们曾希望我能自然而然地与来自不同项目的团队合作,但事实并非如此。napari
项目是个例外,而且这种合作关系在开始为 Dask 工作之前就已经建立得很好了。也许我们可以在这方面做更多,以促进更多互动。
Genevieve 的下一步是什么?
Genevieve 明年将开始一份新工作,你可以在 GitHub 上找到她:@GeneviveeBuckley。
Dask 的下一步是什么?
Dask 发生了很多事情,但仍有很多事情要做。以下是几个项目的后续步骤总结。如果新朋友愿意接下火炬并为这些项目中的任何一个做出贡献,我们将非常高兴。
ITK 图像与 Dask 的兼容性
- ITK + Dask 项目的下一步需要 ITK 发布候选版本 5.3rc3 或更高版本可用(可能在 2022 年初)。
- 当该版本可用时,下一步是尝试重新运行原始 ITK 博文中的代码。
- 如果还有工作要做,我们需要为剩余的障碍打开问题。如果一切顺利,我们希望有人撰写第二篇 ITK + Dask 博文来宣传新功能。
改进 rechunking 性能
需要进行更多与 rechunking 相关的性能改进(参见 #7950 和 #7980)。
数组和切片的高层图工作
切片和重叠数组的高层图工作有许多后续步骤。Ian Rose 在这里写了一份出色的总结。简而言之,必须实现 cull
和 get_output_keys
方法,然后才能进行低级融合和优化。
相关链接
- 为 ArrayOverlapLayer 实现
cull
方法 #7789 - 为 ArrayOverlapLayer 实现
get_output_keys
方法 #7791 - 数组切片 HighLevelGraph 层 #7655
文档
-
未来某个时候,可能值得将博文内容 Choosing good chunk sizes in Dask 整合到主 Dask 文档中,以提高可发现性。
博文评论由 Disqus 提供支持