名称 | 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 |
- P2 实例的 GPU 是 K80, 每个显存为 12 GB; P3 实例的 GPU 是 V100, 每个显存为 16 GB.
- 如果我是配置 Docker, 那肯定是选 p2.xlarge
- 如果是计算可以选择 p2.8xlarge, 毕竟卡多
-
在 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.
-
更新系统
$ sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3
-
安装 CUDA
- 访问 https://developer.nvidia.com/cuda-toolkit-archive 选择对应的 CUDA 驱动下载.
- Laplace 上目前的 CUDA 版本是 10.0
- 从 GPU Nodes 中知目前 Ocelote 上的 CUDA 版本是 9.1 和 9.0, 又从 Installing MXNet 得知, MXNet 并没有 9.1 版本, 因此如果要在 Ocelote 上跑, 还是要装 9.0 版本, 下面是 9.0 版本的代码
$ 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
-
安装 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
- 安装 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 是否成功, 至此环境应该就好了.
在安装了 CUDA 之后, Docker 定制的步骤主要如下:
- 安装 Docker, 然后从 https://hub.docker.com/r/mxnet/python/tags 上面 Pull 相应的镜像, 比如 1.5.0_gpu_cu90_mkl_py3.
- 运行该镜像, 然后安装该镜像缺失的库, 比如 Gluon-CV 等
- 将该镜像保存并推送到 Docker Hub
- 在 HPC 上 Pull 该镜像, 并用 singularity build 它
因为 AWS 貌似只有 m5 和 r5 系列是 amd 的, P 系列可以确定就是 Intel, Azure 的 NC 系列是 Intel Xeon, 因此, 不用担心 mkl 会负优化.
具体步骤如下:
-
按照 https://docs.docker.com/install/linux/docker-ce/ubuntu/ 这里的步骤, 安装 Docker
-
从 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
-
按照 https://github.com/NVIDIA/nvidia-docker/wiki 安装
nvidia-docker-plugin
, 这是用到 GPU 的必要条件 -
验证安装是否成功:
sudo nvidia-docker run -it mxnet/python:1.5.0_gpu_cu90_mkl_py3 bash
-
升级并安装一些库:
- 升级 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 等包
- 升级 Python 到 3.7
-
先查看容器 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 和 代码的
- 安装 Docker
在如下第一次登陆 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
报错信息:
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
在安装 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
是没有将 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