我使用谷歌云VM与4特斯拉K80 GPU。
我使用multi_gpu_model和gpus = 4运行keras模型(因为我有4个gpu)。但是,我收到以下错误
ValueError:要使用
multi_gpu_model
调用gpus=4
,我们希望以下设备可用:['/ 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:要使用
multi_gpu_model
调用gpus=2
,我们希望以下设备可用:['/ cpu:0','/ gpu:0','/ gpu:1']。但是这台机器只有:['/ cpu:0','/ xla_cpu:0','/ xla_gpu:0','/ gpu:0']。尝试减少gpus
。
任何人都可以帮我解决这个错误。谢谢!
看起来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驱动程序。咨询here。
TensorFlow只看到一个GPU(gpu和xla_gpu设备是同一物理设备上的两个后端)。你在设置CUDA_VISIBLE_DEVICES吗? nvidia-smi是否显示所有GPU?
您可以使用以下代码检查所有设备列表:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
这可以通过使用tensorflow
而不是tensorflow-gpu
引起。
解决此问题的一种方法是:
$ pip uninstall tensorflow
$ pip install tensorflow-gpu
更多信息可以在这里找到:https://stackoverflow.com/a/42652258/6543020