2080Ti持っていて、とりあえずDLやりたいっていう方へ

# Ubuntu 18.04 + Cuda 10 + Cudnn 7 + tensorflow 1.13.1 + pytorch


たまたまRTX2080Tiサーバーを何台か立ち上げることになったので、その環境整備周りについて殴り書きしておく。
また、直でインストールしたら、どハマりして、半日ぐらい無駄にしたので、そんなことせずにできる人のためのdocker編も書いておく。

前提として、Tensorflow / Pytorch / Cuda10 がインストールされた前提のUbuntu18.04の環境を作り上げる。

#まず大前提の話からしよう
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1    |
|-------------------------------+----------------------+----------------------+

こいつあるやん、このcuda versionみたいなのは実はあてになるものではないっていうのがキモ
ここにも書かれているけど、` CUDA Version: 10.1 `こいつは今のドライバーで一番インストールできる「「可能」」なものであって、全然今インストールされているものを反映してない。から、気にしない。
https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi

むしろ、重要なのはnvcc であったり、
`/usr/local/cuda/version.txt`に書かれているものである。これ重要。

## 直でインストールする編

こちらの記事を参考にして、基本的にこの[ページ](https://krhb.hatenablog.com/entry/2019/05/23/232719)の最後にある成功編で色々やった。

`echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64' >> ~./bashrc`


NVIDIA Cuda 10.0 を入れる。そうじゃないと、RTX様が怒る。

```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update 
```



NVIDIA ドライバーをCLIから入れる
いっぱいドライバーに失敗すると、`autoinstall`とか`.run`以外信じない主義になっていくが、これは本当に安心。
418でうまくいかなかったら、 `ubuntu-drivers devices`でオススメされているものをチェックするべき
今回は418でいく
`sudo apt-get install --no-install-recommends nvidia-driver-410`

入れたら、それで起動するかを確かめる、
`reboot`

GPUドライバーとcuda 確認する
`$ nvidia-smi`

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10     |
|-------------------------------+----------------------+----------------------+
```
喜ぶ。

次にCudnn 7 を入れる。そうじゃないと、tensorflow-gpuが怒る。devもちゃんとインストールする。

```
sudo apt-get install --no-install-recommends \
    cuda-10-0 \
    libcudnn7=7.4.1.5-1+cuda10.0  \
    libcudnn7-dev=7.4.1.5-1+cuda10.0
```

入れたら、それで起動するかを確かめる、
`reboot`

GPUドライバーとcuda 確認する
`$ nvidia-smi`

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1    |
|-------------------------------+----------------------+----------------------+
```
喜ぶ。




## Docker編


以下が使ってるdockerfile

Nvidia Docker前提で、

立ち上げコマンドとして、Dockerfile作成して下のdockerfileをコピペして、
`docker build ./`
からの
`docker run -it --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=1,2,3 {docker-image-id} /bin/bash`とかで操作できる


```
FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
LABEL maintainer="kkshmz"

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

RUN apt-get update --fix-missing && \
    apt-get install -y --no-install-recommends wget bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 git mercurial subversion unzip libjpeg-dev libpng-dev build-essential && \
    apt-get -y autoremove && apt-get -y autoclean

RUN rm -rf /var/cache/apt

#install anaconda and install pytorch
RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh -O ~/anaconda.sh && \
    /bin/bash ~/anaconda.sh -b -p /opt/conda && \
    rm ~/anaconda.sh && \
    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
    echo "conda activate base" >> ~/.bashrc && \
    /opt/conda/bin/conda install -y python=$PYTHON_VERSION numpy pyyaml scipy ipython mkl mkl-include ninja cython typing && \
    /opt/conda/bin/conda install -y pytorch torchvision cudatoolkit=10.0 -c pytorch && \
    find /opt/conda/ -follow -type f -name '*.a' -delete && \
    find /opt/conda/ -follow -type f -name '*.js.map' -delete && \
    /opt/conda/bin/conda clean -ya
#set conda env 
ENV PATH /opt/conda/bin:$PATH
#set command default
CMD [ "/bin/bash" ]

#install tensorflow
RUN pip install tensorflow-gpu==1.13.1
```


tensorflow 系のをdockerで整備しようと思うと、こういうエラーが出てくるけど、
`include/cudnn.h:14:30: fatal error: cuda_runtime.h: No such file or directory`
これらは[公式](https://github.com/NVIDIA/nvidia-docker/wiki/CUDA)docs にも書かれているように、参照しているdocker file の起点を
`FROM nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04`から`FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04` に変えることによって解消できる。