以下是有关可视化Dask图和HTML表示的新功能更新。您今天就可以使用2021.08.1或更高版本尝试这些新功能。这项工作由Freyam Mehta在2021年Google编程之夏期间完成。Dask在NumFOCUS伞形组织的框架下参与了该项目。
Dask 任务图可视化涉及多项新功能。任务图是dask计算中每个独立任务的顺序和依赖关系的视觉表示。它们是非常有用的诊断工具,并已使用了很长时间。
Freyam致力于使这些可视化更具说明性、吸引力和信息量。Graphviz库拥有一系列出色的属性,可以修改这些属性以创建更具视觉吸引力的输出。
这些功能主要改进了Dask高级图的可视化。低级和高级Dask图都可以使用非常相似的方法访问
…其中result是一个dask对象或集合。
您可能注意到Dask高级图的第一个变化是,节点大小已调整为与每层中的任务数量成比例缩放。任务较多的层会显得比其他层更大。
这是一个非常有用的功能,因为现在用户可以更直观地了解他们的大部分计算发生在何处。
示例
注意:此更改仅影响Dask高级图的Graphviz输出。低级图保持不变,因为每个可视化节点对应一个任务。
参考:Freyam Mehta的拉取请求#7869 “为高级图的Graphviz输出添加节点大小缩放”
Dask高级图现在包含悬停工具提示,以提供更详细信息的简要摘要。要使用工具提示,请生成一个dask高级图(例如:result.dask.visualize()),然后将鼠标悬停在您感兴趣的层上。
工具提示提供的信息包括层类型及其关联的任务数量。还为特定的dask集合提供了额外信息,例如dask数组和数据框。
Dask数组工具提示信息还包括
Dask数据框工具提示信息还包括
用户曾要求提供一种不那么令人不知所措的dask任务图视图。我们希望高级图视图与更详细的工具提示信息相结合,能够提供这种中间地带,既有足够的信息量,又不会像大型计算的低级任务图那样令人不知所措。
注意:此功能仅适用于SVG输出。其他图像格式,如.png等,不支持工具提示。
参考:Freyam Mehta的拉取请求#7973 “为graphviz添加工具提示”
还有一个新功能允许用户根据层类型对高级图进行颜色编码。可以通过传递关键字参数color="layer_type"启用此选项,例如:result.dask.visualize(color="layer_type")。此更改旨在使用户更容易看到哪种层类型占主导地位。
虽然对于如何使Dask计算高效没有硬性规定,但有一些通用准则
有关创建更高效Dask计算的更多信息,请参阅Dask最佳实践页面。
示例
参考:Freyam Mehta的拉取请求#7974 “添加颜色以表示高级层类型”
Freyam还修复了一个错误,该错误导致用户尝试使用filename=None调用dask.visualize()时出错(问题#7685,由拉取请求#7740修复)。
通过在到达错误之前添加一个额外条件修复了该错误。如果格式为None,Dask现在使用默认的png格式。
参考:Freyam Mehta的拉取请求#7740 “修复使用filename=None调用.visualize()的问题”
Dask在多个地方使用了HTML表示,例如在Array和Dataframe等Dask集合类中(背景阅读,请参阅此博客文章)。
最近,我们在Dask中引入了高级图的HTML表示,并且Jacob Tomlinson在dask distributed库的多个地方实现了HTML表示(进一步阅读,请参阅此另一篇博客文章)。
在Freyam的Google编程之夏项目期间,他扩展了Dask高级图的HTML表示以包含图像,并为dask distributed库引入了两个全新的HTML表示。
dask高级图的HTML表示已得到扩展,现在包含计算中间阶段的dask数组的SVG图像。
此功能的动机与上述添加工具提示的动机类似。用户希望更容易获取有关Dask计算在每个计算阶段如何变化的信息。我们希望对Dask高级图HTML表示的这一改进能够提供每个阶段数组形状和块大小的一览摘要。
示例
参考:Freyam Mehta的拉取请求#7886 “将dask.array SVG添加到HTML表示”
已为dask distributed中的ProcessInterface类创建了新的HTML表示。
HTML表示显示进程的状态、地址和外部地址。
有三种可能的状态选项
ProcessInterface类不适合直接使用。相反,这些信息通常通过SSH调度器或工作节点等子类访问。
示例
参考:Freyam Mehta的拉取请求#5181 “为ProcessInterface类及其所有子类添加HTML表示”
拉取请求#5178为dask distributed库中的Security类添加了新的HTML表示。
Security的HTML表示显示
是否需要加密
对象实例是使用Security.temporary()还是Security(**paths_to_keys)创建的。
示例:临时安全对象
示例:使用保存到磁盘的证书的安全对象
此外,文本表示也已更新,以反映HTML表示中显示的信息。