首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >valueError在keras中使用multi_gpu_model时

valueError在keras中使用multi_gpu_model时
EN

Stack Overflow用户
提问于 2018-10-23 13:34:01
回答 6查看 8.3K关注 0票数 3

我使用谷歌云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

有人能帮我解决这个错误吗。谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-10-23 14:22:32

看起来Keras只看到其中一个GPU。

确保所有4个GPU都是可访问的,您可以将device_lib与TensorFlow结合使用。

代码语言:javascript
运行
复制
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驱动程序。咨询这里

票数 4
EN

Stack Overflow用户

发布于 2018-10-23 20:18:31

TensorFlow只看到一个GPU ( gpu和xla_gpu设备是同一物理设备上的两个后端)。你在设置CUDA_VISIBLE_DEVICES吗?nvidia是否显示所有GPU?

票数 1
EN

Stack Overflow用户

发布于 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行:

代码语言:javascript
运行
复制
/home/.local/lib/python3.7/site-packages/keras/utils/multi_gpu_utils.py

我解决了这一问题,将第175行改为:

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
/home/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py

因此,我把510行改为:

代码语言:javascript
运行
复制
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一起运行,我希望这会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52950449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档