如果安装了GPU版本的TensorFlow,使用其进行模型的载入时,遇到报错,类似下面这种:
InternalError: Blas GEMM launch failed : a.shape=(10000, 784), b.shape=(784, 10), m=10000, n=10, k=784
[[node MatMul (defined at <ipython-input-2-0367395f566d>:16) = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_Placeholder_0_0/_7, Variable/read)]]
[[{{node Mean/_9}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_25_Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
后面也许还有一大堆的提示,不过不用去管,最最常见的情形就是:
老兄,你的GPU被占用了!!
——解决方法如下:
- 如果你使用的Pycharm或者Spyder之类的IDE,那么你需要检查一下是否之前运行了其他使用GPU的程序,如果找到了,请毫不犹豫的关掉它。
- 如果你使用的是JupyterNotebook,那么你同样需要先检查是否之前运行了其他使用GPU的程序,如果有,在目录中选中它,并点击上面工具栏中的shutdown来关掉它。如果不是前面这种情形,那一定要检查一下你的JupyterNotebook的编译器(就是那个黑框框)是否多打开了一个,如果是的话,一定要关闭你没有正在使用的那个。不知道哪个才是没正在使用的?好吧,那就都关了重新打开JupyterNotebook吧 - -。
- 以上解决办法的前提是:你并没有开游戏,或者没有其他程序占用GPU。
- 核心思想其实就是:保持你的GPU只被一个程序占用~
不过如果我就是想开几个程序,或者边跑游戏边跑模型肿么办?
——这么办:
- 给你的模型训练分配一下显存,让它们不要打架。使用下面的语句来创建会话:
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))