仪表盘诊断
内容
仪表盘诊断¶
分析并行代码可能具有挑战性,但 Dask 的 分布式调度器 提供的交互式仪表板通过实时监控 Dask 计算,使得这一过程变得更加容易。该仪表板使用 Bokeh 构建,并且会在调度器创建时自动启动,返回一个指向仪表板的链接。
在本地,这是当你创建一个 客户端
并连接调度器时:
from dask.distributed import Client
client = Client() # start distributed scheduler locally.
在 Jupyter Notebook 或 JupyterLab 会话中显示客户端对象将显示仪表板地址:
你也可以从 client.dashboard_link
查询地址(或者对于分布式旧版本,从 client.scheduler_info()['services']
查询)。
默认情况下,当在本地机器上启动调度器时,仪表板将在 http://localhost:8787/status
提供服务。您可以将此地址输入浏览器以访问仪表板,但如果端口 8787 被占用,可能会被重定向到其他地方。您还可以使用 dashboard_address
参数配置地址(参见 LocalCluster
)。
有众多诊断图表可供使用。在本指南中,您将了解一些最常用的图表,这些图表显示在仪表板入口点上:
存储的字节数和每个工作者的字节数: 集群内存和每个工作者的内存
任务处理/CPU 利用率/占用率/数据传输: 每个工作进程正在处理的任务/每个工作进程的CPU利用率/当前工作进程上所有任务的预期运行时间。
任务流:跨线程的单个任务。
进展: 一组任务的进度。
存储的字节数和每个工作者的字节数¶
这两张图显示了集群上总体内存使用情况(存储的字节数),以及每个工作节点的单独使用情况(每个工作节点的字节数)。这些图上的颜色表示如下。
■
|
Memory under target (default 60% of memory available) |
■
|
Memory is close to the spilling to disk target (default 70% of memory available) |
■
|
When the worker (or at least one worker) is paused (default 80% of memory available) or retiring |
■
|
Memory spilled to disk |
这些图表上不同级别的透明度与内存类型(托管、非托管和近期非托管)相关,你可以在 Worker 内存管理文档 中找到它们的详细解释。
任务处理/CPU 利用率/占用率/数据传输¶
任务处理
图中的 处理 标签显示了已分配给每个工作者的任务数量。并非所有这些任务当前都处于 执行 状态:一个工作者一次只能执行与其线程数相等的任务。分配给工作者的任何额外任务将根据其 优先级 以及它们的依赖项是否在工作者的内存中来等待运行。
调度器将尝试确保工作者处理的任务数量大致相同。如果其中一个条完全为白色,这意味着该工作者没有任务,正在等待任务。这通常发生在计算接近完成时(无需担心),但也可能意味着任务在工作者之间的分配没有优化。
在这个图中,有三种不同的颜色可以出现:
■
|
Processing tasks. |
■
|
Saturated: It has enough work to stay busy. |
■
|
Idle: Does not have enough work to stay busy. |
在这个仪表板上的图表中,我们有两个额外的标签,包含以下信息:
CPU 利用率
“CPU” 标签显示了每个工作者的 CPU 使用情况,这些数据由 psutil
指标报告。
占用率
“Occupancy” 标签显示每个工人的占用时间。一个工人的总占用时间是 Dask 预计运行所有任务并从其他工人传输任何依赖项所需的时间,如果执行和传输是逐一进行的。例如,如果一个工人的占用时间为 10 秒,并且它有 2 个线程,您可以预计该工人完成所有任务大约需要 5 秒的挂钟时间。
数据传输
“数据传输” 标签显示了每个工作者之间开放数据传输的大小。
任务流¶
任务流是每个工作线程上运行的任务的视图。每行代表一个线程,每个矩形代表一个单独的任务。每个矩形的颜色对应于正在执行的任务的任务前缀,并与 进度图 的颜色相匹配。这意味着所有属于 inc
任务前缀的单个任务,例如,将具有相同的颜色(从 viridis 颜色图中随机选择)。
请注意,当一个新的工作者加入时,即使它是替代一个最近离开的工作者,它也会获得一个新的行。因此,在任务流上可能会暂时看到比当前集群中实际线程数更多的行,因为旧工作者和新工作者的历史记录都会被显示。
某些颜色是为特定类型的操作保留的:
■
|
Transferring data between workers. |
■
|
Reading from or writing to disk. |
■
|
Serializing/deserializing data. |
■
|
Erred tasks. |
在某些情况下,仪表板会在每个矩形之间有空白区域。在那段时间,工作线程处于空闲状态。过多的空白区域表明资源使用效率不高。此外,许多长红色条(传输)可能表明存在性能问题,原因可能包括块大小过大、图表过于复杂,甚至是调度选择不当。
进展¶
进度条图显示了每个任务前缀的进度。每条进度条的颜色与任务流中相同任务前缀的单个任务颜色相匹配。每条水平进度条从左到右有四个不同的组成部分:
- Tasks that have completed, are not needed anymore, and now have been released from memory.
- Tasks that have completed and are in memory.
- Tasks that are ready to run.
- Tasks that are queued. They are ready to run, but not assigned to workers yet, so higher-priority tasks can run first.
- Tasks that do not have a worker to run on due to restrictions or limited resources.
Dask JupyterLab 扩展¶
JupyterLab Dask 扩展 允许你将 Dask 的仪表盘图直接嵌入到 JupyterLab 窗格中。
一旦安装了 JupyterLab Dask 扩展,您可以选择任何可用的单个图表,并将其作为面板集成到您的 JupyterLab 会话中。例如,在下图中,我们选择了 任务流、进度、工作内存 和 图表 图表。