诊断 (分布式)
目录
诊断 (分布式)¶
Dask 分布式调度器 以两种形式提供实时反馈
包含许多图表和表格的交互式仪表板,提供实时信息
适用于控制台或笔记本交互式使用的进度条
捕获诊断信息¶
|
在上下文块内收集任务流 |
|
收集近期工作的统计分析信息 |
|
收集性能报告 |
您可以使用 get_task_stream
和 Client.profile
函数捕获仪表板提供的部分信息,以便进行离线处理。这些函数捕获每个任务和数据传输的开始和结束时间,以及统计分析器的结果。
with get_task_stream(plot='save', filename="task-stream.html") as ts:
x.compute()
client.profile(filename="dask-profile.html")
history = ts.data
此外,Dask 可以使用 performance_report
上下文管理器一次保存多个诊断仪表板,包括任务流、工作进程分析、带宽等信息。
from dask.distributed import performance_report
with performance_report(filename="dask-report.html"):
## some dask computation
以下视频更详细地演示了 performance_report
上下文管理器
进度条¶
|
跟踪 futures 进度 |
dask.distributed
进度条与用于本地诊断的 ProgressBar
不同。progress
函数接受一个在后台执行的 Dask 对象
# Progress bar on a single-machine scheduler
from dask.diagnostics import ProgressBar
with ProgressBar():
x.compute()
# Progress bar with the distributed scheduler
from dask.distributed import Client, progress
client = Client() # use dask.distributed by default
x = x.persist() # start computation in the background
progress(x) # watch progress
x.compute() # convert to final result when done if desired
连接到仪表板¶
某些计算机网络可能会限制对特定端口的访问,或者只允许从特定机器访问。如果您无法访问仪表板,可能需要联系您的 IT 管理员。
下面是一些常见问题和解决方案
指定可访问端口¶
有些集群限制了对外部可见的端口。这些端口可能包括 Web 接口的默认端口 8787
。有几种方法可以处理这种情况
向外部开放端口
8787
。这通常需要询问您的集群管理员。在
dask-scheduler
命令中使用--dashboard-address :8787
选项指定一个可公开访问的不同端口。使用更高级的技术,例如端口转发
端口转发¶
如果您有 SSH 访问权限,那么访问被阻止端口的一种方法是通过 SSH 端口转发。一个典型的用例如下
local$ ssh -L 8000:localhost:8787 user@remote
remote$ dask-scheduler # now, the web UI is visible at localhost:8000
remote$ # continue to set up dask if needed -- add workers, etc
然后就可以访问 localhost:8000
并看到 Dask Web UI。这种方法并非 dask.distributed 所特有,而是可以用于任何通过网络运行的服务,例如 Jupyter Notebooks。例如,如果我们选择这样做,可以使用 ssh -L 8001:localhost:8888 user@remote
将端口 8888(默认的 Jupyter 端口)转发到端口 8001。
API¶
- dask.distributed.progress(*futures, notebook=None, multi=True, complete=True, group_by='prefix', **kwargs)[source]¶
跟踪 futures 进度
在 Notebook 和控制台中,此函数的操作方式不同
Notebook: 立即返回,并在屏幕上留下一个 IPython 小部件
控制台: 阻塞直到计算完成
- 参数
- futuresFutures
要跟踪的 futures 或键列表
- notebook布尔值 (可选)
是否在 Notebook 中运行 (默认为猜测)
- multi布尔值 (可选)
独立跟踪不同的函数 (默认为 True)
- complete布尔值 (可选)
跟踪所有键 (True) 或仅跟踪尚未运行的键 (False) (默认为 True)
- group_byCallable | Literal[“spans”] | Literal[“prefix”]
使用 spans 而不是任务键名对任务进行分组 (默认为 “prefix”)
注意
在 Notebook 中,progress 的输出必须是单元格中的最后一条语句。通常这意味着在单元格末尾调用 progress。
示例
>>> progress(futures) [########################################] | 100% Completed | 1.7s
- dask.distributed.get_task_stream(client=None, plot=False, filename='task-stream.html')[source]¶
在上下文块内收集任务流
此函数提供在此块处于活动状态期间运行的每个任务的诊断信息。
此函数必须用作上下文管理器。
- 参数
- plot: 布尔值, 字符串
如果为 True,则同时返回一个 Bokeh 图。如果 plot == ‘save’,则将图保存到文件。
- filename: 字符串 (可选)
如果设置了
plot='save'
,要保存的文件名
另请参阅
Client.get_task_stream
此上下文管理器的函数版本
示例
>>> with get_task_stream() as ts: ... x.compute() >>> ts.data [...]
获取一个 Bokeh 图,并可选择保存到文件
>>> with get_task_stream(plot='save', filename='task-stream.html') as ts: ... x.compute() >>> ts.figure <Bokeh Figure>
要与他人共享此文件,您可能希望将其上传并在网上提供服务。一种常见方法是将文件作为 gist 上传,然后通过 https://raw.githack.com 提供服务。
$ python -m pip install gist $ gist task-stream.html https://gist.github.com/8a5b3c74b10b413f612bb5e250856ceb
然后,您可以导航到该网站,点击
task-stream.html
文件右侧的“Raw”按钮,然后将该 URL 提供给 https://raw.githack.com。此过程应提供一个可共享的链接,供他人查看您的任务流图。