第04课:在

第04课:在 GPU 上进行训练

一般来说我们会在笔记本或者 PC 端编写模型和训练代码,准备一些数据,配置训练之后会在笔记本或者 PC 端做一个简单验证,如果这些代码数据都 OK 的话,然后真正的训练放在计算力更强的的计算机上面执行,一般来说至少有一块或者多块 GPU,有相当好的显存和内存,接下来实验一下。

选择一个支持 TensorFlow GPU 的计算机

当务之急是找到一块可以用于 TensorFlow 的显卡,TensorFlow 只支持在 NVIDIA 的部分高端显卡上面进行 GPU 加速, 在 NVIDIA 开发者中心可以找到支持的显卡列表,确保显卡在这个列表之内。

一般来说有两个选择,第一可以自己购买配置一个专门用于机器学习/深度学习的服务器,这样初期的投入比较高。第二可以租用云服务器,目前各大云服务商都有专门的 GPU 计算实例,可以按照小时计费,这样对于学习来说成本还是可以接受的。

其实我的 MacBook Pro 上面有一块 N 卡,但是从 TensorFlow 1.2 开始,官方已经不再支持 Mac 上的 GPU 计算了。虽然可以通过一些 hack 使 TensorFlow 的 Mac 版本继续支持 GPU,但是笔记本上的显卡计算能力还是比较弱,我也不想训练到一半把这块显卡烧了,所以我选择从云服务商那里租用一台 GPU 计算实例。

由于暂时没有人付我广告费,所以在这里就不透露我选择的是哪家云服务商的产品了 ^_^,总之我租用了一台装有 NVIDIA K80 的、安装 Ubuntu 16.04.1 LTS 的主机,综合费用的话大概不到 5 块人民币一小时。接下来在这台主机上面继续训练。

安装 CUDA

CUDA 是一种由 NVIDIA 推出的通用并行计算架构,只能应用于 NVIDIA 的系列显卡,目前主流的深度学习框架包括 TensorFlow 都是使用 CUDA 来进行 GPU 加速的(可以把 CUDA 当做是一种驱动程序,TensorFlow 通过这个驱动程序来使用显卡),所以我们必须先安装 CUDA。

首先检查一下显卡信息,确保没有租错主机,在终端上运行:lspci | grep -i nvidia

要确保列出的显卡在 NVIDIA 支持 CUDA 的显卡列表里面。

在我租用的主机上,显示如下:

enter image description here

显卡没有问题,接下安装 CUDA(本课程使用 CUDA 8)。

NVIDIA 开发者中心下载相应的 deb 包。

enter image description here

下载完成以后运行:

    sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
    sudo apt-get update
    sudo apt-get install cuda

如果不出意外,安装完成之后在终端运行:nvcc --version,则输出 CUDA 的版本信息:

enter image description here

安装 cuDNN

我们还需要安装一个叫做 cuDNN 的深度卷积神经网络的加速库。

NVIDIA 开发者中心下载安装包,这需要注册一个账号。

注意:选择 cuDNN 6 的版本,这样才和 CUDA 8 兼容。

下载完成后运行:

    sudo tar -zxf cudnn-8.0-linux-x64-v6.0.tgz 
    cd cuda
    sudo cp lib64/* /usr/local/cuda/lib64/
    sudo cp include/cudnn.h /usr/local/cuda/include/

然后编辑 ~/.bashrc,在最后面加入:

    export CUDA_HOME=/usr/local/cuda
    export PATH=${CUDA_HOME}/bin/:$PATH
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64:$CUDA_HOME/extras/CUPTI/lib64

然后source ~/.bashrc,安装完成。

安装 TensorFlow GPU 版

为了在 GPU 上进行训练,还要安装 TensorFlow 的 GPU 版本(之前在笔记本上面安装的是 CPU版): sudo pip install tensorflow-gpu==1.3.0

安装完成以后,运行 Python:

    python
    >>> from tensorflow.python.client import device_lib
    >>> print device_lib.list_local_devices()

如果输出信息里面有 /gpu:0 的信息,那么说明整个安装就成功完成了。

继续训练

前面花了一点时间来配置 GPU 的环境,现在是时候继续我们的训练了。当然还是需要在这台机器上面根据上一课时的内容完成 Object Detection API 的安装和配置;下载 Pre-trained 模型,然后把本地的训练目录打包上传,接着根据具体的路径修改 pipeline.config 中的相应项;最后运行训练脚本,这次的输出是这样的:

enter image description here

每一步的时间被缩短到 1 秒左右,那么执行完 200000 步大概需要 2 天多一点时间,对于实际应用,其实是可以接受的。

我在运行到 20000 多步的时候终止了学习(大概 6 个多小时),然后将训练目录复制到了本地:

enter image description here

model/train 目录下就是这 20000 多步的学习输出,如果在这个目录上继续运行训练脚本的话,它会从之前的学习进度开始,继续学习。

将训练好的模型导入到《TensorFlow on Android:物体识别》中的 Android App 中体验了一下效果:

enter image description here

效果还不错!

一个训练的流程就跑完了,我们配置好了深度学习的软硬件环境,接下来开始准备数据,训练自己的模型吧。

上一篇
下一篇
目录