使用 Gunicorn 工作器管理器在 Docker 容器中运行 PyTorch 多处理

Sur*_*Roy 5 multiprocessing gunicorn docker google-cloud-platform pytorch

  • 我正在尝试在 GCP 上部署服务。它是一个使用 Gunicorn 进行工人管理的 Docker 容器。

  • 该代码运行 torch.multiprocessing.process 以将 POST 响应作为后台进程运行。

如果我使用 python3 命令运行脚本,这会起作用。但是在使用 Gunicorn 时挂起。

  • 我的理解是 CUDA 需要线程安全的多处理,这就是为什么 Torch 有自己的实现。当我们设置 Gunicorn 来管理 worker 时,这可能会导致一些冲突或线程安全问题。

有没有人遇到过这个。我可以使用不同的工人经理吗?

在 Dockerfile 中: CMD gunicorn -w 1 -t 6000 -b 0.0.0.0:8080 --timeout 6000 --preload app_script:app - 这就是我在 docker 中运行应用程序的方式。所以是的,我正在使用预加载。即使我在本地运行 docker 容器,问题也会发生,所以它不仅仅是 gcp 的情况

p=torch.multiprocessing.Process(target=my_function args=(args, )) 。p.start() - 这就是处理后调用的方式。

小智 6

我花了很多时间调查类似的问题。在带有 Gunicorn 的 Docker 容器上运行时,Pytorch 调用被卡住。

对我有用的解决方案是--preload从 Docker Gunicorn 命令中删除该标志。