UbuntuをアップグレードしたらGPUが使えなくなった時のメモ

UbuntuのアップグレードをしたところCudaが動かなくなったので、修正したときのメモです。
基本的には、[こちらのリンク](https://zenn.dev/matsuo/articles/4c2aa2b4785bed)の通りでうまく行ったのですが、cudaのアップグレードでエラーがでたため、cuda-driversのインストールなどをしてUbuntuのアップグレードをしました。但しその後cudaが動かなくなり、driverのインストールを行って無事GPUの環境を再現できました。


#  行ったこと
1. Ubuntu16.04 -> Ubuntu18.04 -> Ubuntu20.04にアップグレードした。
2. Ubuntu20.04dでGPUが動かなくなったため、修正した。

#### 動作環境
```:OS(アップグレード前)
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
```
```:OS(アップグレード後)
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"
```


## 1. Ubuntuのアップグレード
[こちらのリンク](https://zenn.dev/matsuo/articles/4c2aa2b4785bed)を参照しました。
```:Ubuntu16.04 -> Ubuntu18.04
$sudo apt update
$sudo apt upgrade
$sudo apt dist-upgrade
$sudo apt install ubuntu-release-upgrader-core
$sudo do-release-upgrade
```

最初の sudo apt updateのところで、cudaの公開鍵に関連したwarningなどがでて上手く解決できませんでした。そのまま先に進んだところ、sudo do-release-upgrade のところでcuda-driversのアップグレードが必要とのメッセージがでてUbuntuのアップグレードができなかったために、以下のコマンドでcuda-driversをインストールしました。

```:cuda update対応
$sudo aptitude install cuda-drivers
```
これによりsudo apt updateのエラーがなくなり、上記sudo do-release-upgradeまで行うことでUbuntu18.04へのアップグレードができました。その後は、[先程のリンク](https://zenn.dev/matsuo/articles/4c2aa2b4785bed)にも書かれている通り、上記を繰り返すことで、無事Ubuntu20.04へアップグレードできました。

```:Ubuntu18.04 -> Ubuntu20.04
$sudo apt update
$sudo apt upgrade
$sudo apt dist-upgrade
$sudo apt install ubuntu-release-upgrader-core
$sudo do-release-upgrade
```
## 2. GPU環境の再構築
Ubuntu16.04ではpytorchでcudaを使っていました。Anacondaの仮想環境で、jupyter notebookを立ち上げて、というところまでは、20.04でも問題なく動作したのですが、以下でcudaが動作していないことがわかりました。
```:cuda
import torch
print(torch.cuda.is_available())
  -> False
```

GPUは認識されているようでした。
```:cuda
$lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
```
そこで、[こちらのリンク](https://qiita.com/routerman/items/99083317a69fd846c54f)を参考に、NVIDIAのGPUドライバをインストールすることで解決しました。

```:Nvidia GPU driver
$ sudo apt update
$ sudo apt upgrade
$ sudo ubuntu-drivers devices

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001B06sv00001462sd00003609bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP102 [GeForce GTX 1080 Ti]
driver   : nvidia-driver-510 - distro non-free recommended
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-510-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```
ちなみに、上記リンクによると、sudo ubuntu-drivers devicesが動作しないときは、以下のようにubuntu-driversをインストールするとよいそうです。
```:Nvidia GPU driver
$ udo apt install -y ubuntu-drivers-common
```
上記でrecommendedとなっているdriver(上記ではnvidia-driver-510)をインストールするとよいそうなので、以下のようにインストールして、再起動しました。

```:Nvidia GPU driver
$sudo apt install -y --no-install-recommends nvidia-driver-510
```

再起動後に, インストールを確認します。
```:install 確認
$nvidia-smi

Mon May  9 11:59:06 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.60.02    Driver Version: 510.60.02    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
| 29%   44C    P0    58W / 250W |    239MiB / 11264MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1171      G   /usr/lib/xorg/Xorg                 53MiB |
|    0   N/A  N/A      2174      G   /usr/lib/xorg/Xorg                 82MiB |
|    0   N/A  N/A      2311      G   /usr/bin/gnome-shell               89MiB |
+-----------------------------------------------------------------------------+
```
pytorchから確認すると、cudaが使えるようになっていました。
```:cuda
import torch
print(torch.cuda.is_available())
  -> True
```

# 参考リンク
1. [Ubuntuのアップデート手順（16.04 → 18.04 → 20.04）](https://zenn.dev/matsuo/articles/4c2aa2b4785bed)
2. [ubuntu20.04にNVIDIA GPUドライバをインストール](https://qiita.com/routerman/items/99083317a69fd846c54f)