今天在使用tensorflow-gpu跑一个模型的时候遇到了下述的UnknownError:
经过在网上查询解决方案之后,弄明白是tensorflow-gpu显存分配的问题,参考的博客是
# https://blog.csdn.net/weixin_44545603/article/details/103322446 # https://blog.csdn.net/m0_49376111/article/details/115336420?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.vipsorttest&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.vipsorttestz
最终我的解决方法是:
# 错误代码 from __future__ import print_function import tensorflow as tf import numpy as np import matplotlib import matplotlib.pyplot as plt import pandas as pd from tensorflow.keras import layers %matplotlib inline # 解决之后的代码 from __future__ import print_function import tensorflow as tf physical_devices = tf.config.experimental.list_physical_devices("GPU") if len(physical_devices) > 0: tf.config.experimental.set_memory_growth(physical_devices[0], True) logical_devices = tf.config.list_logical_devices("GPU") import numpy as np import matplotlib import matplotlib.pyplot as plt import pandas as pd from tensorflow.keras import layers %matplotlib inline
解释一下上述方法,tensorflow中用physical_devices 和 logical_devices分别表示 机器本身的gpu以及在使用过程中的gpu(这个使用过程中的gpu 解释一下就是比如你两块显卡 其中将一块显卡分成了两部分 那么就是 2 physical_devices 3 logical_devices),通过 tf.config.experimental.list_physical_devices 返回一个列表 来显示机器本身GPU的一些信息。tf.config.experimental.set_memory_growth() 这个函数为调用哪一块GPU,在tensorflow中如果你的机器只有一块显卡,那么它会默认调用全部的显存,这个是因为tensorflow本身为了防止显存碎片的出现(显存碎片 memory fragemnet就是指计算机不能利用的那部分内存),提高显卡的利用率。同时tensorflow它也提供了 设置显卡使用的显存机制 以及多块显卡使用的API,这个之后再写篇使用的blog。最后加上 logical_devices=tf.config.list_logical_devices("GPU") 就ok了。
需要注意的是哈,补充的那一部分代码一定要放到 import tensorflow as tf 之后,因为 如果不这样的话 会出现另外一个问题 就是initiallized 初始化的问题,猜测是因为我在一个base虚拟环境下运行的?(我的tensorflow安装在base环境中)这个之后有时间可以在尝试一下。另外,如果还遇到初始化的问题,这可以 重新运行代码哈!~~
最后附一下我的配置:
系统 win10
显卡 GTX1660
tensorflow 2.3.0
cudatoolkit == 10.1
cudnn == 7.6.5
UnknownError: Fail to find the dnn implementation.
原文:https://www.cnblogs.com/wzmgg/p/14754398.html