GPU(nvidia-drtiver cuda)環境の再インストール 

# 前提
歴代のnvidia-driverが混在していて動かなくなったので、きれいさっぱりにして動くようにしたい。

# 役立ったコマンド
作業中によく使ったコマンド
飛ばしてかまわない。
```
dpkg -l | grep nvidia
dpkg -l | grep cuda
cat /usr/local/cuda/version.txt
cat /usr/bin/nvcc -V
watch -n 0.1 df -h
sudo du -sh | sort -rn | head -10
```




# 過去のnvidia関係のライブラリをすべて削除
```
sudo apt-get --purge remove nvidia*
sudo apt-get --purge remove cuda*
sudo apt-get --purge remove cudnn*
sudo apt-get --purge remove libnvidia*
sudo apt-get --purge remove libcuda*
sudo apt-get --purge remove libcudnn*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get update
sudo rm -rf /usr/local/cuda*
```

# 新しいversionのインストール
新しいnvidia-driverとcudaを[サイト](https://developer.nvidia.com/cuda-toolkit-archive)からversionを選んでダウンロードする。
12.3 Update 2の場合は以下のようになる。

```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda-repo-ubuntu2004-12-3-local_12.3.2-545.23.08-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-12-3-local_12.3.2-545.23.08-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3
```

```
sudo apt-get install -y cuda-drivers-545
#sudo apt-get install -y nvidia-kernel-open-545  <- これやっちゃだめっぽいdocker動かない
```
この状態で`nvidia-smi`が叩けるか確認。
叩けなければrebootする。

`nvcc -V`はまだ打てないと思うので、
```
sudo apt install nvidia-cuda-toolkit
```
でインストールを行う。


```
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.3.r12.3/compiler.33567101_0
```
となれば完了。
versionが古いままの時は下を参照

この作業をやっても`/usr/loacal`にcudaが現れない時がある。
その時はdev(net)を選んでインストールを行う。

```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3
```
ここまで打てばcudaが入って`nvcc -V`が叩けるようになっているはず。

# なぜかversionが更新されない

```
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
```
新しいcudaを入れたはずなのになぜか更新されなかった。
```
$ which nvcc
/usr/bin/nvcc

$ cat /usr/bin/nvcc
#!/bin/sh
exec /usr/lib/nvidia-cuda-toolkit/bin/nvcc "$@"
```
参照元が` /usr/lib/nvidia-cuda-toolkit/bin/nvcc`になっているので、

```bash:/usr/bin/nvcc
#!/bin/sh
exec /usr/local/cuda-12/bin/nvcc "$@"
```
に書き換えるとうまくいく。


# localでpytorchが使えるか確認
```
import torch
print(torch.cuda.is_available())
print(torch.cuda.get_device_name())
```


# Dockerでエラーが出た
```
version: "3.2"
services:
  ubuntu:
    image: hogehoge
    # build:
    #   context: .
    #   dockerfile: Dockerfile
    shm_size: '4gb'
    container_name: "hoge"
    network_mode: host
    volumes:
      - /dev/bus/usb:/dev/bus/usb
      - ./workspace:/workspace
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all
      - DISPLAY=$DISPLAY
    tty: true
```
`docker compose up -d` で以下のエラーが出たら
```
Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
```

以下を実行して`nvidia-container-runtime`を入れなおす
```
sudo apt-get install nvidia-container-runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey |   sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list |   sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
sudo apt-get install nvidia-container-runtime
service docker restart
```