我想使用两个python源代码,第一个是使用开发的,tensorflow
另一个是使用开发的pythorch
。我想使用单独的GPU在线程中运行这些代码。两个代码的输入是相同的,并且当两个代码的结果准备好时,会有一些后处理。
我无法使用tf.device,因为它在初始化时会获取所有可用的GPU,并且我必须使用CUDA_VISIBLE_DEVICES环境变量。可通过在python中设置CUDA_VISIBLE_DEVICES来选择GPU访问。
os.environ["CUDA_VISIBLE_DEVICES"] = "Accessible_GPUs"
Run Code Online (Sandbox Code Playgroud)
但不幸的是,似乎CUDA_VISIBLE_DEVICES不能与线程一起使用:
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
Thread(target = method_from_code1).start()
os.environ["CUDA_VISIBLE_DEVICES"] = "3"
Thread(target = method_from_code2).start()
Run Code Online (Sandbox Code Playgroud)
现在的问题是为每个线程的环境变量设置不同的值。这个问题有解决方案吗?
有一个预先训练Tensorflow
的图像识别模型.我想将它用作特征提取器.
为了提高性能,可以读取cv2.read()
和缓冲视频帧frameBuffer
.在下一步中,我选择一批图像并在一组预处理之后将它们输入图形(为了准备图像以供给):
for x in range ( lowerIndex,upperIndex):
frame = frameBuffer[x]
img_data = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 100]
result, img_str = cv2.imencode('.jpg', frame, encode_param)
img_str = img_str.tostring(order='C')
batchFrameBuffer.append(img_str)
Run Code Online (Sandbox Code Playgroud)
预处理步骤需要很长时间,在此期间GPU的利用率为0.有没有办法让GPU始终保持工作状态?(例如使用不同的线程(一个用于读取和预处理,另一个用于运行会话)