-
我正在尝试在GCP上部署服务。这是一个使用Gunicorn进行工人管理的Docker容器。
-
该代码运行torch.multiprocessing.process以作为后台进程运行POST响应。
如果我使用python3命令运行脚本,这会起作用。但使用Gunicorn时会挂起。
- 我的理解是CUDA需要线程安全的多处理,这就是为什么torch有自己的实现。当我们设置Gunicorn来管理工人时,这可能会导致一些冲突或线程安全问题
以前有人遇到过这个吗。会不会有一个不同的工人经理可以让我使用?
在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()-这就是处理post调用的方式。
我花了很多时间研究类似的问题。Pytorch的呼叫在一个装有gunicorn的码头集装箱上运行时被卡住了。
对我有效的解决方案是从Docker gunicorn命令中删除--preload
标志。
我遇到了同样的问题,NitzanS的答案对我有效。另一个解决方案是设置PyTorch使用的线程数:
import torch
torch.set_num_threads(1)