可视化任务图
目录
可视化任务图¶
|
同时可视化多个 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
您可以单击任何层名称来展开或折叠有关每个层的更详细信息。