可视化任务图
目录
可视化任务图¶
|
同时可视化多个 Dask 图。 |
在执行计算之前,您可能需要可视化底层的任务图。通过查看任务之间的相互连接关系,您可以更多地了解潜在的瓶颈(并行性可能无法实现)或许多任务相互依赖的区域(可能导致大量通信)。
可视化底层图¶
.visualize
方法和 dask.visualize
函数的工作方式类似于 .compute
方法和 dask.compute
函数,不同之处在于它们不会计算结果,而是生成任务图的图像。这些图像会被写入文件,如果您在 Jupyter notebook 环境中,它们也会显示为单元格输出。
默认情况下,任务图是从上到下渲染的。如果您偏好从左到右可视化任务图,请将 rankdir="LR"
作为关键字参数传递给 .visualize
。
import dask.array as da
x = da.ones((15, 15), chunks=(5, 5))
y = x + x.T
# y.compute()
# visualize the low level Dask graph
y.visualize(filename='transpose.svg')
在应用图优化之前和之后检查任务图通常很有帮助。您可以通过设置 optimize_graph
关键字来实现。因此,上面的示例变为
import dask.array as da
x = da.ones((15, 15), chunks=(5, 5))
y = x + x.T
# visualize the low level Dask graph after optimizations
y.visualize(filename="transpose_opt.svg", optimize_graph=True)
visualize
函数支持两种不同的图渲染引擎:graphviz
(默认)和 cytoscape
。要更改使用的引擎,请将引擎名称作为 engine
参数传递给 visualize
。
import dask.array as da
x = da.ones((15, 15), chunks=(5, 5))
y = x + x.T
# visualize the low level Dask graph using cytoscape
y.visualize(engine="cytoscape")
您还可以通过设置 visualization.engine
配置选项来设置默认的可视化引擎。
import dask.array as da
x = da.ones((15, 15), chunks=(5, 5))
y = x + x.T
with dask.config.set({"visualization.engine": "cytoscape"}):
y.visualize()
请注意,这两种可视化引擎都需要安装可选依赖项。graphviz
引擎由 GraphViz 系统库提供支持。该库有一些需要考虑的事项:
您必须同时安装 graphviz 系统库(使用 apt-get、yum 或 brew 等工具)以及 graphviz Python 库。如果您使用 Conda,则需要安装
python-graphviz
,它将作为依赖项引入graphviz
系统库。对于节点数大于约 100 的图,Graphviz 需要一些时间。对于大型计算,您可能需要稍微简化计算,以便 visualize 方法能够很好地工作。
cytoscape
引擎使用 Cytoscape javascript 库进行渲染,并在 Python 端由 ipycytoscape
库驱动。由于它不依赖于任何系统库,因此在某些部署设置中,此引擎可能比 graphviz 更易于安装。
可视化高层图¶
底层 Dask 任务图可能会令人不知所措,特别是对于大型计算。一个更简洁的替代方法是查看 Dask 高层图。高层图可以使用 .dask.visualize()
进行可视化。
import dask.array as da
x = da.ones((15, 15), chunks=(5, 5))
y = x + x.T
# visualize the high level Dask graph
y.dask.visualize(filename='transpose-hlg.svg')

将鼠标悬停在每个高层图标签上方将弹出一个工具提示,其中包含有关该层的更详细信息。请注意,如果您使用 visualize
中的 filename=
关键字参数将图保存到磁盘,则工具提示只会在 SVG 图像格式中保留。
高层图 HTML 表示¶
Dask 高层图也有自己的 HTML 表示形式,如果您喜欢使用 Jupyter notebook,这将很有用。
import dask.array as da
x = da.ones((15, 15), chunks=(5, 5))
y = x + x.T
y.dask # shows the HTML representation in a Jupyter notebook

您可以单击任何层名称来展开或折叠有关每个层的更详细信息。