Skip to content

Instantly share code, notes, and snippets.

@YimianDai
Last active September 26, 2019 23:01
Show Gist options
  • Save YimianDai/6f67d6e71c526cefe40ce186a66f09c2 to your computer and use it in GitHub Desktop.
Save YimianDai/6f67d6e71c526cefe40ce186a66f09c2 to your computer and use it in GitHub Desktop.
Notes on AWS

目录

  1. 实例类型选择
名称 GPU vCPU RAM (GiB) 网络带宽 价格 / 小时
p2.xlarge 1 4 61 0.900 USD
p2.8xlarge 8 32 488 10Gbps 7.200 USD
p3.2xlarge 1 8 61 10Gbps 3.06 USD
p3.8xlarge 4 32 244 10Gbps 12.24 USD
  1. P2 实例的 GPU 是 K80, 每个显存为 12 GB; P3 实例的 GPU 是 V100, 每个显存为 16 GB.
  2. 如果我是配置 Docker, 那肯定是选 p2.xlarge
  3. 如果是计算可以选择 p2.8xlarge, 毕竟卡多

2. 配置 MXNet 环境

  1. 在 AWS 上创建 Ubuntu 实例后 (会跳出不符合免费套餐, 无视这条消息就可以创建成功了), 但要注意的是:

    • 加利福尼亚北部 是没有 P2, P3 这样的实例的, 俄勒冈
    • CUDA 9.0 驱动只支持到 Ubuntu 17.04 和 16.04, 因此如果要用 CUDA 9.0, Ubuntu 必须安装 16.04 LTS, 不能选 18.04 LTS; CUDA 10.0 是既支持 Ubuntu 18.04, 也支持 CentOS 7 的.
    • 硬盘选大一点, 因为光 CUDA 9.0 的驱动就至少要 5.5 GB, 默认的 8 GB 硬盘是肯定不够的, 估计要 32 GB.
  2. 更新系统

$ sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3
  1. 安装 CUDA

    $ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run
    $ sudo sh cuda_9.0.176_384.81_linux-run
    • 测试是否安装成功, 如果报错, 看下面的错误整理中的解决方法
    $ nvidia-smi

    添加 Cuda 路径, 在 ~/.bashrc 中添加如下内容

    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  2. 安装 Conda

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

安装完成后,运行一次 source ~/.bashrc 让 CUDA 和 conda 生效

source ~/.bashrc

更新现有的包管理器

conda update conda
pip install --upgrade pip
  1. 安装 MXNet, Gluon-CV 等包
cd ~
git clone https://github.com/mli/gluon-tutorials-zh.git
cd gluon-tutorials-zh/
conda env create -f environment.yml
source activate gluon
pip uninstall mxnet
pip install --pre --upgrade mxnet-cu90 gluoncv
pip install scikit-image
pip install tqdm

完了后可以在 Python 解释器中 用 mx.nd.zeros((3,4), ctx=mx.gpu()) 测试下 GPU 是否成功, 至此环境应该就好了.

3. Docker

在安装了 CUDA 之后, Docker 定制的步骤主要如下:

  1. 安装 Docker, 然后从 https://hub.docker.com/r/mxnet/python/tags 上面 Pull 相应的镜像, 比如 1.5.0_gpu_cu90_mkl_py3.
  2. 运行该镜像, 然后安装该镜像缺失的库, 比如 Gluon-CV 等
  3. 将该镜像保存并推送到 Docker Hub
  4. 在 HPC 上 Pull 该镜像, 并用 singularity build 它

因为 AWS 貌似只有 m5 和 r5 系列是 amd 的, P 系列可以确定就是 Intel, Azure 的 NC 系列是 Intel Xeon, 因此, 不用担心 mkl 会负优化.

具体步骤如下:

  1. 按照 https://docs.docker.com/install/linux/docker-ce/ubuntu/ 这里的步骤, 安装 Docker

  2. https://hub.docker.com/r/mxnet/python/tags 上面 Pull 1.5.0_gpu_cu90_mkl_py3 这个镜像 sudo docker pull mxnet/python:1.5.0_gpu_cu90_mkl_py3

  3. 按照 https://github.com/NVIDIA/nvidia-docker/wiki 安装 nvidia-docker-plugin, 这是用到 GPU 的必要条件

  4. 验证安装是否成功: sudo nvidia-docker run -it mxnet/python:1.5.0_gpu_cu90_mkl_py3 bash

  5. 升级并安装一些库:

    • 升级 Python 到 3.7
      $ apt update
      $ apt install software-properties-common
      $ add-apt-repository ppa:deadsnakes/ppa
      $ apt update
      $ apt install python3.6
      $ python3.6 get-pip.py
    • 安装 vim
      $ apt install --assume-yes vim 
    • 将 python3.6 绑定成 python, 方便后面使用, 在 .bashrc 中添加如下代码:
      alias python='python3.6'
      alias pip='pip3.6'  
    • 继续安装其他软件
      $ apt-get install -y wget gcc 
      $ apt-get install git-core
      $ apt install python3.6-tk # Not apt-get 
    • 按照上面安装 conda, 设置 gluon 环境, 再安装 scikit-image 等包
  6. 先查看容器 ID, 然后再把容器打包成镜像

$ sudo docker ps -a $ sudo docker commit

$ pip install matplotlib

$ pip install gluoncv --upgrade pip install matplotlib

Ocelote 上最新的 Cuda 是 9.1, 而 Laplace 上的是 10.0

注意, 如果你要做成一个 Docker, 肯定要用干净的系统, 而不是含有你的 Data 和 代码的

  1. 安装 Docker

错误整理

1. 秘钥权限过于开放

在如下第一次登陆 AWS 机器的时候会遇上这个问题:

$ ssh -i "XXX.pem" [email protected]

报错如下, 这是因为秘钥是从 AWS 网站创建下载的, 权限过于开放

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'XXX.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "XXX.pem": bad permissions
[email protected]: Permission denied (publickey).

解决方法, 密钥必须不公开可见,SSH 才能工作

$ chmod 400 XXX.pem

2. Ubuntu 16.04 上安装 CUDA 失败

报错信息:

The driver installation is unable to locate the kernel source.
Please make sure that the kernel source packages are installed and set up correctly.

https://unix.stackexchange.com/questions/115289/driver-install-kernel-source-not-found 的第二个答案解决了, 也就是在安装 cuda 前先按照 dkms

$ sudo apt-get install dkms

3. NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver

在安装 CUDA 完成后, 用 nvidia-smi 来测试下安装成功了么, 报错 NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.

https://deeptalk.lambdalabs.com/t/nvidia-smi-has-failed-because-it-couldnt-communicate-with-the-nvidia-driver/148 中得知解决方法如下, 的确可以工作

$ sudo apt-get update
$ sudo apt-get install --no-install-recommends nvidia-384 libcuda1-384 nvidia-opencl-icd-384
$ sudo reboot

sudo apt-get install --no-install-recommends nvidia-418 libcuda1-418 nvidia-opencl-icd-418

OSError: libcudart.so.10.1: cannot open shared object file: No such file or directory

是没有将 CUDA 添加到路径里面去, 在 ~/.bashrc 中添加下面内容:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

然后在 source ~/.bashrc 然后在 source activate gluon 再测试下就可以了.

重启后 GPU not available, MXNet 报错 Check failed: device_count_ > 0 (-1 vs. 0) : GPU usage requires at least 1 GPU

不管是 Laplace 还是 AWS / Azure 都会遇到这个问题.

也许有用的链接:

https://www.pugetsystems.com/labs/hpc/How-To-Install-CUDA-10-1-on-Ubuntu-19-04-1405/

怎么卸载 cuda

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.1/bin To uninstall the NVIDIA Driver, run nvidia-uninstall

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment