如何在 dask 分布式工作者上设置日志记录?
How to set up logging on dask distributed workers?
将 dask 分发版升级到 1.15.0 版后,我的日志记录停止工作。
我已经使用 logging.config.dictConfig 初始化 python 日志记录工具,并且之前这些设置已传播到所有工作人员。但是升级后就不行了
如果我在每个工作人员的每次日志调用之前都执行 dictConfig,它可以工作,但这不是一个合适的解决方案。
所以问题是它如何在我的计算图开始执行之前初始化每个工作人员的日志记录并且每个工作人员只执行一次?
更新:
这个技巧适用于一个虚拟示例,但对我的系统没有影响:
def init_logging():
# logging initializing happens here
...
client = distributed.Client()
client.map(lambda _: init_logging, client.ncores())
更新 2:
在深入了解文档后,问题得到了解决:
client.run(init_logging)
所以现在的问题是:这是解决这个问题的正确方法吗?
从版本 1.15.0 开始,我们现在从一个干净的进程中分叉工作人员,因此您在调用 Client()
之前对进程所做的更改不会影响分叉的工作人员。如需更多信息,请在此处搜索 forkserver
:https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
我觉得你使用 Client.run
的解决方案不错。 Client.run 目前(自版本 1.15.0 起)是在所有当前活跃的 worker 上调用函数的最佳方式。
分布式系统
值得注意的是,您在这里设置的客户端是从一台计算机上的同一进程派生出来的。您在上面使用的技巧在分布式环境中不起作用。如果有人问这个问题,询问如何在集群上下文中使用 Dask 处理日志记录,我将添加此注释。
通常 Dask 不会四处移动日志。相反,您用于启动 Dask 的任何机制都会处理此问题,这是很常见的。像 SGE/SLURM/Torque/PBS 这样的作业调度程序都这样做。像YARN/Mesos/Marathon/Kubernetes这样的云系统都是这样做的。 dask-ssh
工具可以做到这一点。
将 dask 分发版升级到 1.15.0 版后,我的日志记录停止工作。
我已经使用 logging.config.dictConfig 初始化 python 日志记录工具,并且之前这些设置已传播到所有工作人员。但是升级后就不行了
如果我在每个工作人员的每次日志调用之前都执行 dictConfig,它可以工作,但这不是一个合适的解决方案。
所以问题是它如何在我的计算图开始执行之前初始化每个工作人员的日志记录并且每个工作人员只执行一次?
更新:
这个技巧适用于一个虚拟示例,但对我的系统没有影响:
def init_logging():
# logging initializing happens here
...
client = distributed.Client()
client.map(lambda _: init_logging, client.ncores())
更新 2:
在深入了解文档后,问题得到了解决:
client.run(init_logging)
所以现在的问题是:这是解决这个问题的正确方法吗?
从版本 1.15.0 开始,我们现在从一个干净的进程中分叉工作人员,因此您在调用 Client()
之前对进程所做的更改不会影响分叉的工作人员。如需更多信息,请在此处搜索 forkserver
:https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
我觉得你使用 Client.run
的解决方案不错。 Client.run 目前(自版本 1.15.0 起)是在所有当前活跃的 worker 上调用函数的最佳方式。
分布式系统
值得注意的是,您在这里设置的客户端是从一台计算机上的同一进程派生出来的。您在上面使用的技巧在分布式环境中不起作用。如果有人问这个问题,询问如何在集群上下文中使用 Dask 处理日志记录,我将添加此注释。
通常 Dask 不会四处移动日志。相反,您用于启动 Dask 的任何机制都会处理此问题,这是很常见的。像 SGE/SLURM/Torque/PBS 这样的作业调度程序都这样做。像YARN/Mesos/Marathon/Kubernetes这样的云系统都是这样做的。 dask-ssh
工具可以做到这一点。