诊断(分布式)
内容
诊断(分布式)¶
The 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
上下文管理器:
进度条¶
|
跟踪期货的进展 |
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 笔记本。例如,如果我们选择这样做,我们可以通过 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)[源代码]¶
跟踪期货的进展
这在笔记本和控制台中的操作方式不同
Notebook: 这会立即返回,屏幕上留下一个 IPython 小部件
控制台:此操作会一直阻塞,直到计算完成
- 参数
- 未来未来
要跟踪的未来列表或键
- 笔记本bool (可选)
是否在笔记本中运行(默认为猜测)
- 多bool (可选)
独立跟踪不同的功能(默认为True)
- 完成bool (可选)
跟踪所有键(True)或仅跟踪尚未运行的键(False)(默认为True)
- 按组可调用对象 | 字面量[“spans”] | 字面量[“prefix”]
使用跨度而不是任务键名来分组任务(默认为“前缀”)
注释
在笔记本中,progress 的输出必须是单元格中的最后一条语句。通常,这意味着在单元格的末尾调用 progress。
示例
>>> progress(futures) [########################################] | 100% Completed | 1.7s
- dask.distributed.get_task_stream(client=None, plot=False, filename='task-stream.html')[源代码]¶
在上下文块中收集任务流
这提供了在此块活动期间运行的每个任务的诊断信息。
这必须作为上下文管理器使用。
- 参数
- plot: boolean, str
如果为真,则还返回一个 Bokeh 图形。如果 plot == ‘save’,则将图形保存到文件中。
- filename: str (可选)
如果你设置
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 。这个过程应该会提供一个可分享的链接,其他人可以使用该链接查看你的任务流图。