Deep Learning 環境の構築 (2022/01版, Ubuntu 20.04.03 LTS 利用)

# 概要
UbuntuでのDeep Learning環境構築が、
OSやNVIDIA driverのバージョンアップにより簡単にできるようになってきたため
2022/01 時点での状況でのインストール方法を備忘録的に記載します。

過去にも、 RTX 3000 シリーズや CUDA 10 系のインストール方法の記事を記載しています。
処理中にフリーズした場合は、こちらの記事も参照ください.
本記事の記載内容で、RTX 3000シリーズでも動作することは確認できております。
https://qiita.com/k_ikasumipowder/items/e711186c329b36f53833
https://qiita.com/k_ikasumipowder/items/5e88ec45f958c35e05ed

上記は、過去のCUDAバージョンや他のCUDAバージョン等のインストール時に有用なため、別記事として作成して、残しております。

# 初期設定
主要なライブラリのインストールを行います。

```shell
sudo apt-get update
sudo apt-get upgrade

sudo apt-get install -y vim csh flex gfortran g++ \
                 cmake xorg-dev patch zlib1g-dev libbz2-dev \
                 libboost-all-dev openssh-server libcairo2 \
                 libcairo2-dev libeigen3-dev lsb-core \
                 lsb-base net-tools network-manager \
                 git xclip gdebi-core libffi-dev \
                 make build-essential libssl-dev zlib1g-dev libbz2-dev \
                 libreadline-dev libsqlite3-dev wget curl llvm \
                 libncurses5-dev libncursesw5-dev \
                 xz-utils tk-dev libffi-dev liblzma-dev

# 必要な場合
sudo apt install -y  python-openssl 
sudo apt update
sudo apt upgrade

```

# 任意 pyenv のインストール
Python のバージョンを切り替える際に、 pyenv を利用したい方はここでインストールを行います。
不要な方は、デフォルトのPythonのバージョンを確認しておきましょう
インストールしない方は、以降の手順での、 `python` を `python3` 、 `pip` を `pip3` に置き換える必要があります。

```shell
$ python3 -V
Python 3.10.6
```

### pyenv install 手順
※最近 PATH を通す内容が変わったので気をつけます。

```shell
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

# ~/.bashrc にPATHを通す (最近内容が変わりました。 2021/05 あたり？)
echo '#.pyenv setting' >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

source ~/.bashrc
```

必要なPythonバージョンをインストール
あまりにも新しいバージョンは、主要なライブラリが対応していないため、少し古いものがおすすめです。

```shell
$ pyenv install 3.11.1
$ pyenv global 3.11.1
$ pyenv rehash
$ python -V
Python 3.11.1
```

# nvidia-driver, CUDA 等のインストール

```shell
# PATH を通す
echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64' >> ~/.bashrc


# NVIDIA package リポジトリを追加
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
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 -y ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libnvinfer7_7.1.3-1+cuda11.0_amd64.deb
sudo apt install -y ./libnvinfer7_7.1.3-1+cuda11.0_amd64.deb
sudo apt-get update

# CUDA 11.0 系のライブラリをインストール
# CUDA 11.3 や CUDA 11.4 をインストールしたい場合、ここで指定します。
sudo apt-get install -y --no-install-recommends \
    cuda-11-8 \
    libcudnn8=8.6.0.163-1+cuda11.8  \
    libcudnn8-dev=8.6.0.163-1+cuda11.8

# 再起動を行い、再起動後に nvidia-smi を実行します。
nvidia-smi 


sudo apt-get install -y --no-install-recommends \
  libnvinfer8 \
  libnvinfer-dev \
  libnvinfer-plugin8 

```

以前に比べて短い手順で install できるようになりました。