前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EC2上的深度学习:CUDA 7/cuDNN/caffe/DIGITS实战教程

EC2上的深度学习:CUDA 7/cuDNN/caffe/DIGITS实战教程

作者头像
用户1737318
发布2018-06-05 11:36:28
6550
发布2018-06-05 11:36:28
举报

本教程将演示如何在一个g2.2xlarge EC2实例(运行64位的Ubuntu14.04)中设置CUDA7、cuDNN、caffe和DIGITS,以及如何快速上手DIGITS。为了说明DIGITS的应用,本教程使用一个当前的 Kaggle竞赛项目作为案例进行演示, 是关于糖尿病视网膜病变检测的,其状态来自于荧光血管造影。

图像分类的卷积深度神经网络(DNN)

对于图像的分类或回归,你有两种选择:

  • 特征工程及把图像转换为向量;
  • 依赖于一个卷积DNN求出特征。

深度神经网络对计算的要求相当苛刻。这是由两个原因造成的:

  • 即使你使用一个很小的图像分辨率,输入数据也大得多,256×256的RGB像素意味着196608个输入神经元(256×256×3)。而如果你要使你的特征工程智能一些,那么1000个神经元已经是一个很大的数量了;
  • 让网络有计算出相关特征也需要一个更复杂的网络结构和更多层。

幸运的是,许多浮点矩阵的运算都被显卡的GPU无意中解决。

NVIDIA DIGITS和caffe

利用GPU支持深度学习的主流框架目前有三个,包括Theano、Torch和caffe。 NVIDIA DIGITS则是一个网络服务器,它提供了一个方便的网络接口,用于训练和测试基于caffe的深度神经网络。我打算在以后的文章中涵盖如何使用caffe工作。在这里,我会告诉你如何设置CUDA。

首先你需要一个AWS帐号和g2.2xlarge实例启动和运行,并确保为你的IP的5000端口添加入站规则——这是DIGITS服务器的需要。

# don't forget to get your system up to date
sudo apt-get update
sudo apt-get dist-upgrade

安装CUDA7

这一步的主要来源是 Markus Beissinger关于建立Theano的博客文章。

  1. # installation of required tools
  2. sudo apt-get install -y gcc g++ gfortran build-essential \
  3. git wget linux-image-generic libopenblas-dev python-dev \
  4. python-pip python-nose python-numpy python-scipy
  5. # downloading the (currently) most recent version of CUDA 7
  6. sudo wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.0-28_amd64.deb
  7. # installing CUDA
  8. sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
  9. sudo apt-get update
  10. sudo apt-get install cuda
  11. # setting the environment variables so CUDA will be found
  12. echo -e "\nexport PATH=/usr/local/cuda/bin:$PATH" >> .bashrc
  13. echo -e "\nexport LD_LIBRARY_PATH=/usr/local/cuda/lib64" >> .bashrc
  14. sudo reboot
  15. # installing the samples and checking the GPU
  16. cuda-install-samples-7.0.sh ~/
  17. cd NVIDIA\_CUDA-7.0\_Samples/1\_Utilities/deviceQuery
  18. make
  19. ./deviceQuery

安装cuDNN

要进一步加快深度学习相关的计算,安装cuDNN库是一个好主意。为了这个目的,你将需要注册一个NVIDIA开发者账户,并加入CUDA注册开发者计划。最后一步需要NVIDIA解锁你的帐户,这可能需要一两天。但你也可以在没有cuDNN库的情况下开始。只要你得到他们的允许—— 下载cuDNN并把它上传到您的实例。

  1. # unpack the library
  2. gzip -d cudnn-6.5-linux-x64-v2.tar.gz
  3. tar xf cudnn-6.5-linux-x64-v2.tar
  4. # copy the library files into CUDA's include and lib folders
  5. sudo cp cudnn-6.5-linux-x64-v2/cudnn.h /usr/local/cuda-7.0/include
  6. sudo cp cudnn-6.5-linux-x64-v2/libcudnn* /usr/local/cuda-7.0/lib64

安装caffe

caffe及DIGITS的安装步骤主要来源于 DIGITS项目的自述文件。

  1. sudo apt-get install libprotobuf-dev libleveldb-dev \
  2. libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev \
  3. libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler \
  4. libatlas-base-dev
  5. # the version number of the required branch might change
  6. # consult https://github.com/NVIDIA/DIGITS/blob/master/README.md
  7. git clone --branch v0.11.0 https://github.com/NVIDIA/caffe.git
  8. cd ~/caffe/python
  9. for req in $(cat requirements.txt); do sudo pip install $req; done
  10. cd ~/caffe
  11. cp Makefile.config.example Makefile.config
  12. # check that USE_CUDNN is set to 1 in case you would
  13. # like to use it and to 0 if not
  14. make all
  15. make py
  16. make test
  17. make runtest
  18. echo -e "\nexport CAFFE_HOME=/home/ubuntu/caffe" >> ~/.bashrc
  19. # load the new environmental variables
  20. bash

安装DIGITS

  1. cd ~
  2. git clone https://github.com/NVIDIA/DIGITS.git digits
  3. cd digits
  4. sudo apt-get install graphviz gunicorn
  5. for req in $(cat requirements.txt); do sudo pip install $req; done

启动和配置DIGITS

DIGITS在第一次启动时会问你一些关于配置目的的问题。这些设置是非常直白,并且可以事后在~/.digits/digits.cfg中更改。你可能要考虑在一个EBS上定位你的工作目录(jobs_dir)——在我的例子中,大约140,000 张PNG图像数据集,消耗大约10 GB的空间,训练模型(含所有的模型快照)约占1 GB。

  1. # change into your digits directory
  2. cd digits
  3. # start the server
  4. ./digits-devserver

DIGITS故障排除

当你第一次启动DIGITS时,你可能会遇到一些错误和警告。以下是我的情况。

  1. "libdc1394 error: Failed to initialize libdc1394"
  2. # no big deal - either ignore or treat symptomatically
  3. sudo ln /dev/null /dev/raw1394
  4. "Gtk-WARNING **: Locale not supported by C library."
  5. # not sure how serious this is - but it is easy to resolve
  6. sudo apt-get install language-pack-en-base
  7. sudo dpkg-reconfigure locales
  8. # check what locales are available and then ...
  9. locale -a
  10. # ... set LC_ALL to it
  11. echo -e "\nexport LC_ALL=\"en_US.utf8\"" >> ~/.bashrc
  12. "Gdk-CRITICAL **: gdk_cursor_new_for_display: assertion 'GDK_IS_DISPLAY (display)' failed"
  13. # this is a big deal and will cause the server start up to fail:
  14. # connect with ssh flags -Xi
  15. ssh -Xi ...
  16. "Couldn't import dot_parser, loading of dot files will not be possible."
  17. # reinstall pyparsing:
  18. sudo pip uninstall pyparsing
  19. sudo pip install pyparsing==1.5.7
  20. sudo pip install pydot

DIGITS入门

首先,你必须在想要训练的模型上创建一个数据集。你必须提供至少一个大的图片数据集用于训练并且任选两个较小的数据集进行验证和测试。你可以通过不同的文件夹的意思分离这些数据集(及它们正确的标签),或者通过提供相应的CSV。这些CSV中都应该具有两个未命名的制表符分隔列。第一列保证图像的完整路径(home不要使用~,要使用它的实际路径),第二列保证基于0的索引引用正确的类。你还需要提供一个文本文件持有不同的类别——每行一个。

例如,如果你有两个类“POS”(行1)和“NEG”(行2)——那么一个属于“POS”类的图像必须有与之相关联的类索引0。加载可能需要一段时间。我加载140,000个PNG的256×256分辨率的图像历时约一小时。

设置目标训练模型会很容易,倘若你坚持使用默认建议——你只需要选择要使用的数据集、网络就可以了。在描述的数据集上训练一个30 epochs的 GoogLeNet大约花一天又6小时。所以你需要确保以下两点:

  • 对于Spot实例的出价不能太低——否则你会有被终止的风险;
  • 在tmux session上启动服务器。否则,如果连接中断(也许因为你的IP在一夜之间改变了),服务器进程将会被杀死。

应对糖尿病性视网膜病变的Kaggle挑战

所提供的训练集由约35,000个高分辨率的图像组成——压缩和拆分成五个文件。所有ZIP压缩包大小约33 GB。我用lynx直接下载五个压缩包到一个EBS中——因为你可以定期登录并启动下载。顺便说一下,g2.2xlarge实例的下载速度是令人难以置信——你被授予最高100MB/秒的速度。我同时开始所有的五个下载任务,每个下载任务的速度是6MB/秒。准确地说,是兆字节(mega byte),而不是兆比特(mega bit——DSL提供商使用的单位)。

糖尿病性视网膜病变的可见指标,按照我的理解主要是泄漏(瘤)和病理上不断增长的血管。我认为,这些特征像具有相似性且旋转不变。因此,为了增加可用训练集我创建了四个版本:

  • (A):调整为256×256像素并保存为PNG;
  • (R):(A)的180度旋转;
  • (A)的垂直镜像;
  • (R)的垂直镜像。

因为手头的任务显然不是一个分类而是一个回归,我放弃尝试学习一个分类为无DR和DR的四个阶段。我标记所有DR的情况为“积极”,无DR情况为“消极”。这都会被执行于所有四个可能的分割({0} VS {1,…,4},…,{0,…,3},{4}),这些预测最后会相对实际阶段回归。

这一变换的bash脚本,你都可以在相应的 bash命令行上找到。

结果

一方面我本来希望看到一个更高的精度——在另一方面,我勉强可以(如果有的话)做出在一些健康的情况下和在有些极端的第四阶段情况下之间的差异。以73.95%为消极的情况下的比例——这也是网络精度的起点。经过30 epochs,它提高约8个百分点,达到81.8%。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档