在上篇文章中,我们总结了一些在Theano安装使用过程中遇到的问题以及解决办法,接下来我们主要说一下Tensorflow。

1. Tensorflow安装

Tensorflow如果直接使用pip命令的话,可能十分耗时,下载速度非常慢,还很容易中断,所以大家可以使用清华大学的开源软件镜像站进行下载https://mirrors.tuna.tsinghua.edu.cn/help/tensorflow/。python3.5版本的话,可以选择Tensorflow1.4.0版本啦,其他版本应该也有可以的,这个版本是一个师弟推荐我使用的,所以我就直接使用了这个啦~  

我们可以根据自己用CPU还是GPU,操作系统是Linux还是别的,Python使用哪个版本,以及想下载哪个版本的Tensorflow来进行选择,得到相应的安装命令。如下图所示。

深度学习入门之Tensorflow安装、keras踩坑总结(二)——tensorflow指定GPU、Jupyter notebook切换内核、显存释放等

然后按照图中的命令执行就可以啦~速度要快很多哦。

2.  在Jupyter notebook下使用Keras Tensorflow时遇到的显存不释放、占满等问题

在运行Keras或者Tensorflow时我们会发现个问题,如果你使用的是具有多个GPU的服务器,那么程序会自动调用所有的能够调用到的资源,在每个GPU上挤占一块内存,并且全占满,因而一旦你运行程序,别人就无法再使用了。这会给其他使用该服务器的人带来一些不便,尤其是实验室共用服务器的情况下。更糟糕的事情是,Jupyter notebook 每次运行完 tensorflow的程序后,都会占着显存不释放,这会使得后续程序难以运行。

因此,为了解决上述问题,我们一般通过指定GPU+固定显存的办法来避免这种情况的发生。代码如下:

import tensorflow as tf
import os
os.environ["CUDA_VISIBLE_EDVICES"] = '6' #指定代号为6的那块GPU
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
config.gpu_options.allow_growth = True
sess = tf.Session(config = config)

其中,os.environ["CUDA_VISIBLE_EDVICES"] = '6'  意为指定代号为6的那块GPU,一般都是从0开始的,这要根据你空闲哪个GPU来决定了。

config.gpu_options.per_process_gpu_memory_fraction = 0.3 使得程序最多只能占用指定GPU的30%,这个语句主要用来限制程序占有GPU的比例。

但是有时候我们会发现,我们无法得知程序需要多大的显存会比较合适,有可能我们运行的只是一个最最基础的神经网络,仅仅需要很小的内存就够了,在这种情况下,我们没必要去占用多余的资源(毕竟公共资源能省就省啦),这时候我们比较希望程序能够按照它的需求去申请内存。config.gpu_options.allow_growth = True 这句话就实现了这个目的。

那么,如果说呢第一次运行Notebook中的Tensorflow,但是忘记指定GPU,后来又修改了代码,加上了上面那段话,重新运行,但是你会发现,内存依旧占用没有改变。这就是jupyter notebook搞的鬼啦。这个时候你需要log out并把终端运行程序关掉,重新启动notebook,再重新运行,你会发现内存占用变得很小啦~

那么问题来了,如何查看GPU的使用情况呢?其实也很简单,只需要执行下面这个指令:

nvidia-smi

通过这个指令,你就可以看到自己有几块GPU,以及每块GPU的利用率,有哪些程序正在使用该GPU,这样你就可以根据自己的情况来选择GPU指定运行了。

3. Jupyter notebook 使用anaconda中的虚拟环境需要切换内核

上文我们提到了通过在Anaconda中建立不同的虚拟环境来使用不同的python版本,那么如何用jupyter notebook呢,你如果直接打开的话,可能会发现仍然会在默认的环境中运行,这时候你在虚拟环境中安装的Tensorflow keras等框架就不好用了。为了能够在虚拟环境的条件下使用jupyter notebook运行程序,我们只需要切换一下jupyter notebook的kernel啦。

你会发现notebook中暂时只有一个Kernel,所以需要你进行一些操作啦。首先打开命令行,**想要使用的虚拟环境,比如conda activate py35,然后安装ipykernel这个包,最后添加Kernel就好了。命令如下:

conda activate py35
pip install ipykernel
python -m ipykernel install --name py35 --display-name "py35"

其中第一个py35是你虚拟环境的名称,第二个py35是你想在jupyter notebook中展示的名称。

至此完成啦~你可以先deactivate py35 回到 base环境中,然后输入Jupyter notebook启动就可以了。在导航栏的Kernel中选择Change kernel,里面有你新建的Kernel,选择即可。

深度学习入门之Tensorflow安装、keras踩坑总结(二)——tensorflow指定GPU、Jupyter notebook切换内核、显存释放等

好了,暂时先写到这里啦,祝愿大家的代码之旅能够愉快,少走弯路~