RTX2080マシンに、GPU対応のPythonライブラリをインストールする手順

## はじめに
本記事では、私が最近購入したRTX2080マシンに、GPU対応のxgboostやPyTorchなどのPythonライブラリをインストールした際の手順を示します。


## 本記事の前提とする環境
本記事では、以下のハード・ソフトを使う前提とします。

- GPU: NVIDIA GeForce RTX 2080
- CPU: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
- OS : Ubuntu Linux 18.04
- Python環境: Anaconda3-2018.12-Linux-x86_64

(追記)19/3/18現在、Ubuntu 18.10でもCUDA 10が正式に対応するようになりましたが、本資料では18.04を使う前提として説明します。
本資料の執筆時点(19/01/31)では、[xserverに関連するモジュールが新しすぎて、CUDAなどのライブラリがサポートしていなかった](https://askubuntu.com/questions/1094909/when-will-cuda-support-ubuntu-18-10/1097601#1097601)ためです。

## NVIDIA Driverのインストール
まず、GPUドライバの型番とOSに対応したNVIDIA Driverを公式サイトからインストールしてください。
サイトのプルダウンメニューから、お使いのドライバやOSを選択して"SEARCH"ボタンを押すと、最適なドライバのダウンロードページに遷移できます。
https://www.nvidia.com/Download/index.aspx?

## CUDA Toolkitのインストール
次に、CUDA Toolkitをインストールします。
CUDAはGPUでの計算処理を扱うライブラリであり、これからインストールするGPU対応のPythonライブラリは、基本的にCUDAを利用します。

### バージョン10.0のインストール
CUDA Toolkitにはいくつかのバージョンがありますが、**今回はバージョン10.0のものを使います**。
理由は、[NVIDIAのフォーラムで推奨されていたため](https://devtalk.nvidia.com/default/topic/1042920/cuda-setup-and-installation/which-version-of-cuda-can-work-with-rtx-2080)です。推奨の根拠はおそらく、[2000系のRTXの"Turing architecture"](https://www.nvidia.com/ja-jp/geforce/turing/)を[CUDA Toolkit 10.0からサポートするようになった](https://docs.nvidia.com/cuda/cuda-memcheck/index.html#release-notes)ことと推察されます。

(追記)19/3/18現在は、公式サイトでダウンロードできるデフォルトのCUDA 10はバージョン10.1です。
おそらく10.1でも、10.0と同じく導入可能なはずですが、筆者は動作確認していないことをご了承ください。

### インストール手順の確認
CUDA Toolkit 10.0のインストール手順は、下記のページで確認します。
このページでは、利用環境やインストール方法の文字列をページ上で順番に選択していくと、適切なインストール方法を示してくれます。
https://developer.nvidia.com/cuda-downloads

今回は、Ubuntu Linux 18.04でネットワークインストールするので、そのとおりの選択肢を選びました。
選んだ内容は、下記URLのとおりです。
https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=debnetwork

選択肢を選び終わると、19/1/31の時点では以下のとおり、インストールに必要なコマンドが示されます。
ただし、**以前に別のバージョンのCUDAやNVIDIA Driverを入れたことがある環境では、ライブラリの競合を避けるため、予めそれらをアンインストールしておくべき**です。

```bash
$ sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda
```

ただ、上記のインストールコマンドは、バージョンアップなどにより適宜変更されるものです。
下記はあくまでも参考にとどめ、正式なものは必ず公式サイトにて確認ください。

一連のコマンドが正常実行できたら、一旦マシンをリブートして次の手順に進みます。


## Anaconda3の導入とPython仮想環境の構築
以下の手順でAnaconda3とPython仮想環境を構築します。
1. Anacondaの公式環境から、Anaconda3-2018.12-Linux-x86_64.shをダウンロードして実行します。
2. Python3.6の仮想環境を作ります。以下、仮想環境の名前は"py36"とします。念の為、仮想環境を作るコマンドを示します。

```bash
$ conda create -n py36 python=3.6 anaconda 
```

## Pythonライブラリのインストール
下記のとおりにpy36の仮想環境を有効にしたのち、必要なライブラリをインストールしていきます。

```bash
$ conda activate py36
```

例えば、GPU対応のxgboostをインストールするコマンドは、下記のとおりです。

```bash
(py36)$ conda install py-xgboost-gpu
```

他のライブラリのインストール方法の詳細は、下記に示すAnacondaの公式マニュアルを参照ください。
https://docs.anaconda.com/anaconda/user-guide/tasks/gpu-packages/

ただし、**PyTorchに関しては、別途PyTorchの公式サイトに示す手順でインストールします。**
その具体的な手順は、次章で説明します。


## CUDA Toolkit 10.0対応のPyTorchのインストール方法
PyTorchのインストールは、公式サイトのインストール手順が確実です。

PyTorchのインストール方法は下記の公式サイトにあります。
CUDAのときと同じく、利用環境やインストールするバージョンを順次にクリックしていけば、最後に適切なインストール方法が示されます。
これを素直に実行すればOKです。
https://pytorch.org/get-started/locally/

今回は、利用環境などを下記のとおり選択しました。

- PyTorch Build: Stable(1.0)
- Your OS: Linux
- Package: Conda
- Language: Python 3.6
- CUDA: 10.0

19/1/31の時点では、上記の選択を行うと、最後にインストールに必要なコマンドが下記の通り示されます。
ただし、こちらのコマンドもCUDAと同様に参考に留め、最新のコマンドはPyTorch公式サイトより確認ください。

```bash
(py36)$ conda install pytorch torchvision cuda100 -c pytorch
```

## 最後に
これまでの手順で、必要なライブラリは一通りインストールできているはずですので、あとは好きに使えばOKです。

ただ、GPU対応のライブラリを使ったプログラムでは、GPUリソースの取扱いに関連するいくつかのことを意識しないと、意図通りに実行することができないこともしばしばです。

どういったことを意識し、対策していかねばならないかについては、適宜別の資料にあたっていただければと思います。