Ubuntu18.04をインストールしてPyTorchでGPUが使えるかを確認するまでの設定

Nvidia GeForce RTX 2080 Tiを搭載したOSなしのPCを買ってライブUSBを指すも、バグった画面が出てインストール画面にすら行かないという状況だったが、 なんとかNvidia Driver/CUDA/cuDNNを入れて、PyTorchでGPUを認識するに至った過程を残しておく。

1. インストールメディアの作成

ライブUSBでもライブDVDでもいいが、Ubuntu18.04のISOファイルを書き込んだメディアを作成する。 簡単だがそれぞれ作り方が異なるので この辺とか ネットで検索してから実施した。 自分は最初、手持ちの古いUSBでライブUSBを作成したがバグ画面が出たので、古いからダメなのかなと思い、 DVDを買ってきてライブDVDを作成して再度インストールを試みたが同じ画面が出た感じ。 結局どっちでもいいと分かったので、その後はDVDで進めている。 今回の件とは無関係かもしれないが、今回インストールしたUbuntu18.04は日本語翻訳版で、 それが悪さしているという噂 も散見されるので、英語版でやった方がすんなり行くかも。

2. インストール画面に行けない問題の解決

メディアを読み込むとGNU GRUB画面が出る。 デフォルトのTry Ubuntu without installingか、その下のInstall Ubuntuに進むと、 Ubuntu18.04のインストール画面に行く。 自分はWi-Fiが使えるのかを確認してからインストールしたかったので前者を選択したが、 どちらもその先はバグった画面にメッセージが書かれたまま進まない状況となる。 解決策としては、 ここ にも書かれている通り、以下の手順を踏むと上手く行く。

  1. GNU GRUB画面でTry Ubuntu without installingInstall Ubuntuを選択した状態にする
  2. e キーを押して起動コマンドを編集する画面を開く
  3. 起動コマンドのquiet splashの箇所をnomodesetに書き換える
  4. F10で起動

3の手順は最後に追加すればOKとかいうサイトもあるけど、quiet splashnomodesetに置き換える必要がある。 あとnomodesetのスペルミスに気を付けて入力すること。 上手く行けばインストール画面に進める。

3. ログイン画面に行かない問題の解決

無事インストールできたと思っても、再起動後にログイン画面が表示されず、またバグった画面が出るという状態になった。 問題はWaylandという未完成のディスプレイサーバーを利用しているかららしい。 なので、これをオフにすると上手く行った。 本記事には詳しく書かないが、 ここ を参考に進めたら上手く行った。1度だけ。。 ちなみに、Advanced option for Ubuntuを選択する画面だが、 自分の環境ではShiftではなくEscを連打したら行くことができた。 あと、自分はviではなくemacs派だったのでviを使えないのだが、 手順の例に挙げられているnanoは普通のエディタなので、vi使えない人はnanoがいいと思う。

4. ログイン画面に行かない問題の解決 その2

再起動したもの再びログイン画面は表示されなかった。 上記と同じ手順に従うと行けるはずと思ったが、もうconfファイルの編集は必要ないので、 [Advanced option for Ubuntu] > [Ubuntu, with Linux ... (recovery mode)] > [resume] > [Ok] の手順でログイン画面の表示に成功した。

5. Nvidia Driverを入れて問題解決

様々な参考文献を読んでると、どうやら諸悪の根源はNvidia Driverのような感じがする。 と言うわけで、Nvidia Driverを入れれば全部解決するっぽい。 ただし、自分はNvidia Driverだけでなく、 CUDA/cuDNNまで入れてPyTorchが動くことまで確認したら、 ログイン画面が表示されるようになった。 ただし、Ubuntu18.04とPyTorch1.4では、この辺はほぼ全自動で簡単にできる。

5.1. Secure BootをDisableにしてNvidia Driverを入れる

まずPCを再起動して、F11を連打して、UEFI画面を開いて、セキュアブートを無効にする。 次にログイン画面して、以下のコマンドを入力して各種ドライバーをインストールする。 詳しくは ここここを参照。 なお、これだけでもログイン画面問題は解決するかも。

$ ubuntu-drivers devices
$ sudo ubuntu-drivers autoinstall

5.2 Anacondaを入れて仮想環境にPyTrochを入れる

ここを参考にAnacondaを入れたあと、 仮想環境を作って、そのにPyTorchを入れる。 PyTorchをインストールする際は、以下のようにcudatoolkitも入るので、 これでCUDAとcuDNNもバージョンを気にせずインストールできる。

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

すべて上手くいくと以下のように環境構築できたことが確認できる。

$ nvidia-smi
Sun Apr  5 12:31:15 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:01:00.0  On |                  N/A |
| 35%   30C    P8    12W / 260W |    395MiB / 11011MiB |      8%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1169      G   /usr/lib/xorg/Xorg                            18MiB |
|    0      1263      G   /usr/bin/gnome-shell                          58MiB |
|    0      1572      G   /usr/lib/xorg/Xorg                           157MiB |
|    0      1705      G   /usr/bin/gnome-shell                         113MiB |
|    0      2938      G   ...quest-channel-token=6894681319300380423    46MiB |
+-----------------------------------------------------------------------------+

$ python
Python 3.6.10 |Anaconda, Inc.| (default, Mar 25 2020, 23:51:54) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True

参考文献