PaddleOCR 如何在一个进程里在多个卡上定义多个模型

krcsximq  于 2022-10-27  发布在  其他
关注(0)|答案(6)|浏览(291)

如何在一个进程里在多个卡上定义多个模型
import os
from paddleocr import PaddleOCR
os.environ['CUDA_VISIBLE_DEVICES']='0'
model1=PaddleOCR(use_gpu=True)
os.environ['CUDA_VISIBLE_DEVICES']='1'
model2=PaddleOCR(use_gpu=True)
发现实际上两个模型都是定义在了GPU卡0上,并且在代码中设置CUDA_VISIBLE_DEVICES必须在from paddleocr import PaddleOCR之前设置才会生效,
那如果想要实现在一个进程里同时定义多个模型在不同的卡上该如何操作

643ylb08

643ylb081#

在第一次初始化paddle的时候,这个环境变量就已经确定了,暂时可能不太好实现你的这个功能,更合适的方式是创建不同的子进程,处理不同的图片

q5iwbnjs

q5iwbnjs2#

那这个除了多进程之外有办法解决吗?是不是只能改paddle源码了?

1tuwyuhd

1tuwyuhd3#

看起来是的,也可以试下python的reload函数

nmpmafwu

nmpmafwu4#

我尝试了reload不行,paddle没法reload,我试了用python里面的Process,然后报错了,可以帮我看看嘛
def init():
from paddleocr import PaddleOCR
model3=PaddleOCR(use_gpu=True)

from multiprocessing import Process
p=Process(target=init)
p.start()

报错信息如下:
Process Process-3:
Traceback (most recent call last):
File "/root/anaconda3/envs/paddle_rec/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/root/anaconda3/envs/paddle_rec/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(self._args,self._kwargs)
File "", line 5, in init
File "/root/anaconda3/envs/paddle_rec/lib/python3.6/site-packages/paddleocr/paddleocr.py", line 221, in
init
*
super().init(postprocess_params)
File "/root/anaconda3/envs/paddle_rec/lib/python3.6/site-packages/paddleocr/tools/infer/predict_system.py", line 41, ininit
self.text_detector = predict_det.TextDetector(args)
File "/root/anaconda3/envs/paddle_rec/lib/python3.6/site-packages/paddleocr/tools/infer/predict_det.py", line 80, ininit
utility.create_predictor(args, mode="det")
File "/root/anaconda3/envs/paddle_rec/lib/python3.6/site-packages/paddleocr/tools/infer/utility.py", line 144, in create_predictor
predictor = create_paddle_predictor(config)
paddle.fluid.core_avx.EnforceNotMet:

C++ Call Stacks (More useful to developers):

0 std::string paddle::platform::GetTraceBackString<char const*>(char const*&&, char const*, int)
1 paddle::platform::EnforceNotMet::EnforceNotMet(std::__exception_ptr::exception_ptr, char const*, int)
2 paddle::platform::SetDeviceId(int)
3 paddle::AnalysisConfig::fraction_of_gpu_memory_for_pool() const
4 std::unique_ptr<paddle::PaddlePredictor, std::default_deletepaddle::PaddlePredictor > paddle::CreatePaddlePredictor<paddle::AnalysisConfig, (paddle::PaddleEngineKind)2>(paddle::AnalysisConfig const&)
5 std::unique_ptr<paddle::PaddlePredictor, std::default_deletepaddle::PaddlePredictor > paddle::CreatePaddlePredictorpaddle::AnalysisConfig(paddle::AnalysisConfig const&)

Error Message Summary:

ExternalError: Cuda error(3), initialization error.
[Advise: The API call failed because the CUDA driver and runtime could not be initialized. ] at (/paddle/paddle/fluid/platform/gpu_info.cc:212)

ff29svar

ff29svar5#

我在使用multiprocessing单卡多进程跑的时候有同样的问题,请问楼主解决了吗,求大佬指导啊

mdfafbf1

mdfafbf16#

我在使用multiprocessing单卡多进程跑的时候有同样的问题,请问楼主解决了吗,求大佬指导啊

不要在主进程里面import paddle相关的类,全部在子进程里面进行import

相关问题