如何配置Ray以使用标准Python日志记录器进行多进程?
我正在尝试使用Ray来提高一个过程的速度,并希望将日志信息传递给标准的Python日志记录器。这样,应用程序就可以处理日志信息的格式、过滤和保存。不过,当我使用Ray时,日志信息并没有按照我设置的日志记录器配置进行格式化,也没有返回到根日志记录器。我尝试在ray.init()
中设置log_to_driver=True
和configure_logging=True
,但这并没有解决问题。我该如何配置Ray,以便在多进程中使用标准的Python日志记录器呢?
下面是一个示例,应该能展示出这个问题:
from ray.util.multiprocessing import Pool
import pathlib
import logging
import json
def setup_logging(config_file: pathlib.Path):
with open(config_file) as f_in:
config = json.load(f_in)
logging.config.dictConfig(config)
logger = logging.getLogger(__name__)
config_file = pathlib.Path(__file__).parent / "log_setup/config_logging.json"
setup_logging(config_file=config_file)
def f(index):
logger.warning(f"index: {index}")
return (index, "model")
if __name__ == "__main__":
logger.warning("Starting")
pool = Pool(1)
results = pool.map(f, range(10))
print(list(results))
这是我设置的日志记录器配置:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"detailed": {
"format": "[%(levelname)s|%(name)s|%(module)s|L%(lineno)d] %(asctime)s: %(message)s",
"datefmt": "%Y-%m-%dT%H:%M:%S%z"
}
},
"handlers": {
"stdout": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "detailed"
}
},
"loggers": {
"root": {
"level": "DEBUG",
"handlers": [
"stdout"
]
}
}
}
如果我只是使用Python的map,我会得到以下输出:
[WARNING|__main__|ray_trial|L28] 2024-03-27T15:14:21+0100: Starting
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 0
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 1
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 2
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 3
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 4
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 5
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 6
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 7
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 8
[WARNING|__main__|ray_trial|L22] 2024-03-27T15:14:21+0100: index: 9
但是当我使用Ray时,我得到的是:
2024-03-27 14:54:55,064 INFO worker.py:1743 -- Started a local Ray instance. View the dashboard at 127.0.0.1:8265
(PoolActor pid=43261) index: 0
(PoolActor pid=43261) index: 1
(PoolActor pid=43261) index: 2
(PoolActor pid=43261) index: 3
(PoolActor pid=43261) index: 4
(PoolActor pid=43261) index: 5
(PoolActor pid=43261) index: 6
(PoolActor pid=43261) index: 7
(PoolActor pid=43261) index: 8
(PoolActor pid=43261) index: 9
3 个回答
暂无回答