AWS EC2 服务建立云端Deep Learning开发环境 -- GPU with Tensorflow and Caffe

1. AWS EC2 的建立

  • AMI 选择

    Ubuntu Server 14.04 LTS (HVM), SSD Volume Type - ami-48db9d28

  • GPU Instance 选择

    目前只有g2.2xlarge是最廉价的方案,里面的硬盘空间最大为60g

  • 因此需要添加 EBS 硬盘来扩充空间

    • Root - /dev/sda1 60GB
    • ebs - /dev/sdb 200GB

2. Access EC2 through ssh

  • 使用ssh连接系统

    • weiwei_0903.pem 是下载到本地一个目录的key
    • 然后执行下面语句
    ssh -i "weiwei_0903.pem" ubuntu@ec2-52-53-235-35.us-west-1.compute.amazonaws.com
    
    • 让 know_host 记住这个IP地址即可

3. 加载 EBS 到刚才建立的 GPU Instance

  • 查看EBS是不是存在

    ubuntu@ip-*-*-*-*:~$ lsblk
    NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0     8G  0 disk 
    `-xvda1 202:1    0     8G  0 part /
    xvdb    202:16   0   100G  0 disk /home/ubuntu/workspace
    
    • 其中 xvdb 是我单独添加的 EBS 硬盘。在最初,MOUNTPOINT下的/home/ubuntu/workspace应该是没有的,可以通过下面的步骤完成。
  • 查询EBS是否已经有 File System

    [ec2-user ~]$ sudo file -s /dev/xvdb
    /dev/xvdb: data
    
    • 返回值是data意味着这个device目前没有文件系统,需要进一步格式化

      [ec2-user ~]$ sudo mkfs -t ext4 /dev/xvdb
      
    • 再次查看

      ec2-user ~]$ sudo file -s /dev/xvdb
      /dev/xvdb: Linux rev 1.0 ext4 filesystem data, UUID=1701d228-e1bd-4094-a14c-8c64d6819362 (needs journal recovery) (extents) (large files) (huge files)
      
  • 挂载格式化好的device到当前目录

    ubuntu@ip-*-*-*-*:~$ sudo mount /dev/xvdb workspace
    ubuntu@ip-*-*-*-*:~$ lsblk
    NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0     8G  0 disk 
    `-xvda1 202:1    0     8G  0 part /
    xvdb    202:16   0   100G  0 disk /home/ubuntu/workspace
    
    • 此时就可以看到xvdb这个硬盘的挂载点。
  • 添加权限

    $ sudo chmod go+rw workspace
    
  • 关于其他Storage

    /dev/sda = /dev/xvda in the instance 8Gb "EBS persistent storage"
    /dev/sdb = /dev/xvdb in the instance 400Gb "Non persistent storage"
    
  • 查看 Storage

    df -h
    

4. 安装相关软件

  • 基本依赖库

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install -y build-essential git python-pip libfreetype6-dev libxft-dev libncurses-dev libopenblas-dev gfortran python-matplotlib libblas-dev liblapack-dev libatlas-base-dev python-dev python-pydot linux-headers-generic linux-image-extra-virtual unzip python-numpy swig python-pandas python-sklearn unzip wget pkg-config zip g++ zlib1g-dev
    sudo pip install -U pip
    
  • Install Python2.7, Anconda, CUDA 7.5.178, CUDNN 7.0, Tensorflow 0.10.0

    git clone https://gist.github.com/weiweikong/374e93d9ccb88ea45341268a06897259 aws-tensorflow-python2.7-setup
    
    • 注意给bash文件权限
  • Set a folder to /mnt

    # stop on error
    set -e
    ############################################
    # install into /mnt/bin
    sudo mkdir -p /mnt/bin
    sudo chown ubuntu:ubuntu /mnt/bin
    
  • Install Anaconda

    wget https://repo.continuum.io/archive/Anaconda2-4.1.1-Linux-x86_64.sh
    bash Anaconda2-4.1.1-Linux-x86_64.sh -b -p /mnt/bin/anaconda2
    rm Anaconda2-4.1.1-Linux-x86_64.sh
    
    echo 'export PATH="/mnt/bin/anaconda2/bin:$PATH"' >> ~/.bashrc
    

  • Install Required Packages

    # install the required packages
    sudo apt-get update && sudo apt-get -y upgrade
    sudo apt-get -y install linux-headers-$(uname -r) linux-image-extra-`uname -r`
    
  • Install CUDA 7.5

    # install cuda
    wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.5-18_amd64.deb
    sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
    rm cuda-repo-ubuntu1404_7.5-18_amd64.deb
    sudo apt-get update
    sudo apt-get install -y cuda
    
  • Manually download CUDNN 7.5 and upload

    scp -i your_pem_file.pem cudnn-7.5-linux-x64-v5.0-ga.tgz ubuntu@ec2-54-67-18-98.us-west-1.compute.amazonaws.com:~/.
    
  • Install cuDNN 7.5.1

    # get cudnn
    tar xvzf cudnn-7.5-linux-x64-v5.1.tgz
    cd cuda
    sudo cp lib64/* /usr/local/cuda/lib64/
    sudo cp include/* /usr/local/cuda/include/
    sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
    
    echo 'export CUDA_HOME=/usr/local/cuda
    export CUDA_ROOT=/usr/local/cuda
    export PATH=$PATH:$CUDA_ROOT/bin:$HOME/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_ROOT/lib64
    ' >> ~/.bashrc
    
  • Install Tensorflow with only cuDNN 7.5.1 and Python 2.7

    export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp27-none-linux_x86_64.whl
    /mnt/bin/anaconda2/bin/pip install $TF_BINARY_URL
    
  • Install Caffe 依赖库

    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
    sudo apt-get install --no-install-recommends libboost-all-dev
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
    
  • 配置 Caffe 文件并编译

    cp Makefile.config.example Makefile.config
    # Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
    
    mkdir build
    cd build
    cmake ..
    
    make all
    make test
    make runtest
    
  • Test Caffe Install

    sh data/mnist/get_mnist.sh
    sh examples/mnist/create_mnist.sh
    sh examples/mnist/train_lenet.sh
    

  • Monitor Code

    # install monitoring programs
    sudo wget https://git.io/gpustat.py -O /usr/local/bin/gpustat
    sudo chmod +x /usr/local/bin/gpustat
    sudo nvidia-smi daemon
    sudo apt-get -y install htop
    
  • Ref: http://www.pyimagesearch.com/2016/07/04/how-to-install-cuda-toolkit-and-cudnn-for-deep-learning/

4.1 Trouble Shooting

  • Caffe 遇到 locale::facet::_S_create_c_locale name not valid

  • Tensorflwo 遇到 AttributeError: 'GFile' object has no attribute 'size'

    sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
    
  • libdc1394 error: Failed to initialize libdc1394

    sudo ln /dev/null /dev/raw1394
    
  • Cafee 遇到 Aborted at 1458527401 (unix time) try "date -d @1458527401" if you are using GNU date

    • Check Nvidia GPUs List

      $ nvidia-smi
      Mon Sep 26 18:01:53 2016       
      +------------------------------------------------------+                       
      | NVIDIA-SMI 352.63     Driver Version: 352.63         |                       
      |-------------------------------+----------------------+----------------------+
      | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
      |===============================+======================+======================|
      |   0  Tesla K40c          Off  | 0000:02:00.0     Off |                    0 |
      | 31%   69C    P0    74W / 235W |    150MiB / 11519MiB |     66%      Default |
      +-------------------------------+----------------------+----------------------+
      |   1  GeForce GT 610      Off  | 0000:81:00.0     N/A |                  N/A |
      | 40%   43C    P8    N/A /  N/A |    277MiB /  1023MiB |     N/A      Default |
      +-------------------------------+----------------------+----------------------+
      |   2  Tesla K40c          Off  | 0000:82:00.0     Off |                    0 |
      | 30%   65C    P0    68W / 235W |    113MiB / 11519MiB |      0%      Default |
      +-------------------------------+----------------------+----------------------+
      
    • Set Specific GPU Visible

      CUDA_VISIBLE_DEVICES=1  Only device 1 will be seen
      CUDA_VISIBLE_DEVICES=0,1    Devices 0 and 1 will be visible
      CUDA_VISIBLE_DEVICES=”0,1”  Same as above, quotation marks are optional
      CUDA_VISIBLE_DEVICES=0,2,3  Devices 0, 2, 3 will be visible; device 1 is masked
      
    • 目前选择两个GPU工作不会报错

    • Ref:https://github.com/BVLC/caffe/issues/1993

4.2 Access to EC2 using FileZilla

  • Download FileZilla and setup.
  • Add .pem key file
    • Edit -> Settings -> Connection -> SFTP
    • Select the .pem file and add it to the list.
  • Add EC2 connection
    • File -> Site Manager
    • Host: EC2 Public IP (Could be check under EC2 Console)
    • Protocol: SFTP
    • Login Type: Normal
    • User: ubuntu
    • Password: /
  • Press Connect
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容