Ubuntu22.04 深層学習の環境構築（NVIDIA Driver CUDA cuDNN Anaconda Navigator VSCode）

#### Ubuntu22.04にDeepの環境を作成したくなり，検索したときのメモ

> Ubuntu 22.04 LTS
NVIDIA Driver 535
    CUDA 12.1
    cuDNN 8.9.7
    Anaconda Navigator 2023.09
    VSCode 1.86.0

の環境構築の手順メモです．
なお，Ubuntu 22.04 は ESXi 8.0U2 環境下に
☑ Minimum installation
☑ Download updates while installing Ubuntu
❑ Install third-party software for graphics and WiFi hardware and additional media formats
にてインストール済みです．

> #### ESXi関係のハマりそうな設定のメモ
☑Secure Boot -> OFF
> ##### ESXi GPU passthuru
>hypervisor.cpuid.v0=FALSE
pciPassthru.use64bitMMIO=TRUE
pciPassthru.64bitMMIOSizeGB=128
> ##### NVIDIA Graphicsインストール前 (Nouveau)の無効化
>###### disabled nouveau (PCI passthuruをする前に設定）
>cat <<EOF | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF# blacklist-nouveau の作成
>sudo update-initramfs -u



## 0 準備前のおまじない
    $ sudo apt update
    $ sudo apt upgrade
    
    #もともと入っているドライバの削除
    $ sudo apt-get --purge remove nvidia-*
    $ sudo apt-get --purge remove cuda-*

    #nouveau exsists?
    $ lsmod | grep -i nouveau

    $ sudo nano /etc/modprobe.d/blacklist-nouveau.conf
    blacklist nouveau
    options nouveau modeset=0
    # Save(Ctrl+S) Close(Ctrl+X)

    $ sudo update-initramfs -u
    
    
## 1 NVIDIA Driver
    $ ubuntu-drivers devices
    ...
    driver   : nvidia-driver-535 - distro non-free
    ...
---
    $ sudo apt install nvidia-driver-535
    [Y/n] -> Y
    $ reboot
    $ nvidia-smi
    
## 2 CUDA 12.1
### PyTorch の latest version(2024.02現在) に合わせて敢えて 12.1 を選択
https://developer.nvidia.com/cuda-12-1-1-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local

    #Runfile
    $ wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
    $ sudo sh cuda_12.1.1_530.30.02_linux.run
    Continue -> accept -> CUDA Toolkit 12.1[X] = Install 

    #include pass
    $ export PATH="/usr/local/cuda/bin:$PATH"
    $ export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

    #確認
    $ nvcc -V
        nvcc: NVIDIA (R) Cuda Compiler driver....が表示されたらインストール成功
        Command 'nvcc' not found......は失敗（パスが通っていない）

## 3 cuDNN 8.9.7
https://developer.nvidia.com/rdp/cudnn-archive

> Download cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x
>> Local Installer for Ubuntu22.04 x86_64 (Deb)

cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb をダウンロード（要NVIDIAアカウント）

    $ sudo dpkg -i <ダウンロードしたcudnnのパス>
    #keyring.gpg を /usr/share/keyrings/ にコピー
    $ sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-XXXXXXXX-keyring.gpg /usr/share/keyrings/
    $ sudo apt-get update
    #[libcudnn8_8.9.7.29-1+cuda12.2] の部分は /var/cudnn-local-repo* の中 .deb ファイルの [_amd64.deb] を除いた文字列
    #+cuda12.2 は installed version: 12.1 と違いますがとりあえず気にしない
    $ sudo apt-get install libcudnn8=8.9.7.29-1+cuda12.2
    $ sudo apt-get install libcudnn8-dev=8.9.7.29-1+cuda12.2
    #インストールの確認 libcudnn8 と libcudnn8-dev が表示されれば成功
    $ dpkg -l | grep cudnn

> cuDNNのダウンロード先には 対応するcuda の varsion は 12.Xとひとくくりになっているが，ファイル名を見る限りでは下記のようになっている
> cuDNN 8.9.0-3 -> cuda12.1
> cuDNN 8.9.4-7 -> cuda12.2
> 上記には気にしないと書いてはみたものの，気になるようならversion をあわせておいたほうが無難かも．

## 4 ANACONDA Navigator
https://www.anaconda.com/download#downloads
Linux Python 3.11 (2024.1現在)
64-Bit (x86) Installer (1015.6MB) をダウンロード

    $ bash <ダウンロードした anacondaファイルのパス>
    #--Enter--, --More-- が何度も登場するので　space key で行送り
    #Do you accept the lisence terms? [yes/no]
    >>> yes
    --- 
    Press ENTER to confirm the location
    >>> Enter key を押す -> インストールが始まる
    #done installation finished の表示を確認しておく
    You can undo this by running 'conda init --reverse $SHELL'? [yes|no]
    >>> no
    
    #pass を通す
    $ export PATH=~/anaconda3/bin:$PATH
    #.bashrcを更新
    $ source ~/.bashrc

    #インストール確認
    $ conda -V
    $ conda info
    #conda: command not found -> インストール失敗（パスが通ってない） 
    
## 5 ANACONDA Navigator ショートカットの作成
Anaconda Navigatorはショートカットが自動作成されない
> terminal -> anaconda-navigator
 (pass が通っていない場合は　　source ~/bin...../anaconda-navigator
> /home/<username>/bin/anaconda-navigator を Run as a Program

などで起動するがどれも面倒で忘れてしまいそう

### ショートカット作成
    $ sudo nano /usr/share/applications/anaconda-navigator.desktop

    # anaconda-navigator.desktop の内容
    # <username> は自身の環境に合わせて修正
    [Desktop Entry]
    Version=1.0
    Name=Anaconda-Navigator
    Exec=/home/<username>/anaconda3/bin/anaconda-navigator
    Icon=/home/<username>/anaconda3/lib/python3.11/site-packages/anaconda_navigator/app/icons/Icon1024.png
    Terminal=false
    Type=Application
    # Save(Ctrl+S) Close (Ctrl+X)
    # /usr/share/applications の中に anaconda-navigator.desktop ができる
    # この時点で show applications 内にショートカットができている

    # Desktop shortcut の作成
    # <username> は自身の環境に合わせて修正
    cp /usr/share/applications/anaconda-navigator.desktop /home/<usename>/Desktop/
    # デスクトップ上にコピー > 右クリック > Allow Launching で有効に

## 6 VSCode 1.86.0
> snap package を利用 (一番簡単だとおもう）
> Or Ubuntu software にもありますね

    $ sudo snap install --classic code
    # anaconda navigator から起動する予定なのでショートカットの作成は必要なし
    # Anaconda Navigator -> enviroment -> terminal では仮想環境が起動しない（Windows版とは違う）
    # -> VSCode 内のterminal を使うことにする

## 7 GPU温度表示 - indicator-sensors

    $ sudo apt-add-repository ppa:alexmurray/indicator-sensors
    # press [ENTER]
    $ sudo apt-get update
    $ sudo apt-get install indicator-sensors

    #起動
    indicator-sensors
    #エラーがでますが起動はしています（右上のtaskbar に "No active sensors"が現れているはず

> Preferences...
>> ☑Start automatically on login
>> Sensor    Icon    Label      Enabled
>> #> nvidia などの表記を探して > をクリックして展開
>> 必要な項目のEnabledに☑
>> Plugins -> ATIConfig これは Radeon系なので今回は必要なし

## その他
### VSCode から python 呼び出し時に (base)(xxxx) のような二重起動が発生してしまう場合
    $ conda config --set auto_activate_base false
にて base の起動を止める


Reference

https://qiita.com/koki2022/items/b26cef2a2287344f8e6a

https://qiita.com/porizou1/items/74d8264d6381ee2941bd

https://qiita.com/tf63/items/0c6da72fe749319423b4

https://blog.boochow.com/article/vmware-ubuntu-gparted.html

https://tech-mmmm.blogspot.com/2020/06/ubuntu-2004.html#google_vignette

https://qiita.com/s-katsumata/items/03be5046e53b211fb113

https://www.pc-koubou.jp/magazine/38846#section03

https://www.joelotz.com/blog/2021/creating-a-launch-shortcut-for-anaconda-on-ubuntu.html

https://qiita.com/yoshiyasu1111/items/e21a77ed68b52cb5f7c8

https://techlack.hatenablog.com/entry/2015/02/03/075501

https://docs.nvidia.com/ai-enterprise/deployment-guide-vmware/0.1.0/nouveau.html