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