多进程调用GPU出现UnknownError (see above for traceback): Failed to get convolution algorithm.

本文探讨了如何在使用TensorFlow和Keras进行目标检测时,为多个摄像头进行多进程并行调用GPU,避免了内存初始化错误。通过将类实例化移至函数内部,针对每个进程独立创建YOLO对象,解决了UnknownError问题,确保了高效资源利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在利用tensorflow和keras进行目标检测时,针对多个摄像头进行多进程调用GPU,在执行以下代码

import tensorflow as tf

os.environ["CUDA_VISIBLE_DEVICES"] = '0'
# '''使用tf.GPUOptions限制GPU资源的使用方法一'''
config = tf.ConfigProto()
# config.gpu_options.allow_growth = True  # 动态申请显存
config.gpu_options.per_process_gpu_memory_fraction = 0.2  # 占用20%显存

出现UnknownError (see above for traceback): Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.的情况

解决办法是将类的实例化过程移到函数内部,针对每个摄像头分别实例化。举例

# yolo = YOLO()  
# 类的实例化如果在这里执行,会出现错误
# UnknownError (see above for traceback): Failed to get convolution algorithm. 
# 将此行代码移到函数process内部,针对每个进程分别进行类的实例化即可。

def process(position):
    yolo = YOLO()  # 类的实例化
    image = yolo.detect_image(image)
    return image

if __name__ == '__main__':
    mp.freeze_support()
    processAll = []
    processAll.append(mp.Process(target=process, args=('1')))
    processAll.append(mp.Process(target=process, args=('2')))
    processAll.append(mp.Process(target=process, args=('3')))
    processAll.append(mp.Process(target=process, args=('4')))

    [setattr(p, "daemon", True) for p in processAll]
    [p.start() for p in processAll]
    [p.join() for p in processAll]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值