可视化任务图
内容
可视化任务图¶
|
同时可视化多个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
。为了更改使用的引擎,请将引擎名称传递给 visualize
的 engine
参数:
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
系统库。Graphviz 在处理超过约 100 个节点的图时需要一些时间。对于大型计算,您可能需要简化计算,以便 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 笔记本,这将非常有用。
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
您可以点击任何图层名称来展开或折叠每个图层的更多详细信息。