我使用谷歌云VM与4特斯拉K80 GPU的。
我使用multi_gpu_model和gpus=4运行一个keras模型(因为我有4个gpu)。但是,我得到了以下错误
ValueError:要用
gpus=4调用multi_gpu_model,我们希望有以下设备可用:'/cpu:0‘、'/gpu:0’、'/gpu:1‘、'/gpu:2’、'/gpu:3‘。然而,这台机器只有:'/cpu:0','/xla_cpu:0','/xla_gpu:0','/gpu:0‘。尝试减少gpus。
我可以看到这里只有两个gpu,即'/xla_gpu:0', '/gpu:0'。因此,我尝试使用gpus = 2,并再次得到以下错误
ValueError:要用
gpus=2调用multi_gpu_model,我们希望可以使用以下设备:'/cpu:0‘、'/gpu:0’、'/gpu:1‘。然而,这台机器只有:'/cpu:0','/xla_cpu:0','/xla_gpu:0','/gpu:0‘。尝试减少gpus。
有人能帮我解决这个错误吗。谢谢!
发布于 2018-10-23 14:22:32
看起来Keras只看到其中一个GPU。
确保所有4个GPU都是可访问的,您可以将device_lib与TensorFlow结合使用。
from tensorflow.python.client import device_lib
def get_available_gpus():
local_device_protos = device_lib.list_local_devices()
return [x.name for x in local_device_protos if x.device_type == 'GPU']您可能需要在实例中手动安装或更新GPU驱动程序。咨询这里。
发布于 2018-10-23 20:18:31
TensorFlow只看到一个GPU ( gpu和xla_gpu设备是同一物理设备上的两个后端)。你在设置CUDA_VISIBLE_DEVICES吗?nvidia是否显示所有GPU?
发布于 2020-08-06 10:25:01
我也有同样的问题,我想我想出了一个解决办法。在我的例子中,我正在做一台高性能HPC,我在我的/.local上安装了keras,而Tensorflow和CUDA是由IT人员安装的,无论如何,我遇到了同样的错误。我正在使用Tensorflow==1.15.0和Keras==2.3.1
我注意到消息错误:
ValueError:要用gpus=2调用multi_gpu_model,我们希望可以使用以下设备:'/cpu:0‘、'/gpu:0’、'/gpu:1‘。然而,这台机器只有:'/cpu:0','/xla_cpu:0','/xla_gpu:0','/xla_gpu:1‘。尝试减少gpus。
位于下列keras文件中,第184行:
/home/.local/lib/python3.7/site-packages/keras/utils/multi_gpu_utils.py我解决了这一问题,将第175行改为:
target_devices = ['/cpu:0'] + ['/gpu:%d' % i for i in target_gpu_ids] (before)
target_devices = ['/cpu:0'] + ['/xla_gpu:%d' % i for i in target_gpu_ids] (after)此外,我修改了以下keras文件:
/home/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py因此,我把510行改为:
return [x for x in _LOCAL_DEVICES if 'device:gpu' in x.lower()] (before)
return [x for x in _LOCAL_DEVICES if 'device:XLA_GPU' in x] (after)长话短说,显然这是Keras的一个bug,而不是某些环境设置的问题。经过这样的修改后,我的网络能够与xla_gpus一起运行,我希望这会有所帮助。
https://stackoverflow.com/questions/52950449
复制相似问题