如何解决有关Tensorflow和cuda兼容性的问题?

问题描述 投票:1回答:1

错误:

UnknownError:无法获得卷积算法。这可能是由于cuDNN无法初始化,因此请尝试查看是否有警告日志消息已打印在上方。 [Op:Conv2D]

用于软件包安装的命令:

conda install -c anaconda keras-gpu

已安装:

  • tensorflow 2.0.0
  • cudatoolkit 10.0.130 0
  • cudnn 7.6.5
  • cuda10.0_0
  • keras-gpu 2.2.4 0

    tf.test.is_gpu_available()返回True

tensorflow conv-neural-network cudnn
1个回答
0
投票

UnknownError:无法获得卷积算法。这可能是由于cuDNN无法初始化,因此请尝试查看是否有警告日志消息已打印在上方。 [Op:Conv2D]

通常,此问题是由于所安装的CUDA与cuDNN驱动程序不兼容而出现的。请参考LinuxCPU的经过测试的构建配置。

如果tf.test.is_gpu_available()返回True表示安装没有问题。

因此,在下一步中,您可以通过允许GPU内存增长来尝试GPU内存资源管理。

这可以通过调用tf.config.experimental.set_memory_growth来完成,它尝试仅分配运行时分配所需的GPU内存:开始分配的内存很少,并且随着程序的运行和需要更多的GPU内存,我们扩展分配给TensorFlow进程的GPU内存区域。

要为特定GPU打开内存增长,请在分配任何张量或执行任何操作之前使用以下代码。

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    # Currently, memory growth needs to be the same across GPUs
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    # Memory growth must be set before GPUs have been initialized
    print(e)

启用内存增长的另一种方法是将环境变量TF_FORCE_GPU_ALLOW_GROWTH设置为true。此配置是特定于平台的。

在此方法中,将虚拟GPU设备配置为tf.config.experimental.set_virtual_device_configuration,并对要在GPU上分配的总内存设置硬限制。

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Restrict TensorFlow to only allocate 1GB of memory on the first GPU
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    # Virtual devices must be set before GPUs have been initialized
    print(e)

有关更多详细信息,请参考here

这里的一个建议,您可以尝试安装tensorflow-gpu而不是keras-gpu

© www.soinside.com 2019 - 2024. All rights reserved.