PyTorchインストール時のCUDAバージョンの選び方

PyTorchは人気の機械学習フレームワークの一つであり、他フレームワークの例に漏れずGPUの使用をサポートしています。GPUを使用できる構成でPyTorchをインストールする場合、インストール時にCUDA Toolkitのバージョンを指定する必要がありますが、このバージョン選択で環境にそぐわないものを選んでしまうと、GPUを使用する構成でPyTorchをインストールしたにもかかわらずプログラムがGPUを使用せずに動作してしまいします。本記事では、PyTorchインストール時のCUDAバージョンの選び方を解説します。

PyTorchをインストールするマシンのGPUがCUDAに対応しているか確認する

CUDAを使用するアプリケーションを実行するには、まずマシンのGPUがCUDAに対応している必要があります。手元のグラフィックボードに搭載されているGPUがCUDAに対応しているかどうかは、以下のNDIVIAのページから確認することができます。

上の画像は上記ページの抜粋です。使用しているグラフィックボードがGTX 1060を搭載している場合、リストにはGTX 1060が載っているのでCUDAが利用可能であることが確認できます。

PyTorchをインストールするマシンのNVIDIAドライバを確認する

CUDAを使用するアプリケーションを実行するには、GPUがCUDAに対応していることに加え、使用するCUDA Toolkitと互換性のあるNVIDIAドライバが必要になります。CUDA ToolkitとNVIDIAドライバの各バージョンにおける互換性は、以下のリリースノートから確認できます。

上記の表は当該ページからの引用です。表によると、本記事執筆時点で最新のCUDA 10.2.89をLinuxで使用するには、最低でもバージョン440.33のNDIVIAドライバが必要になります。NVIDIAドライバのバージョンをそこまで上げられない場合は、使用しているNVIDIAドライバのバージョンでも使えるCUDA Toolkitをインストールしなければなりません。

Linux上で、現在自分がNVIDIAドライバを使用しているか、NVIDIAドライバのバージョンがいくつかは、lshwコマンドとmodinfoコマンドを使用して簡単に調べることができます。

$ lshw -c video
  *-display                 
       description: VGA compatible controller
       product: GP106 [GeForce GTX 1060 6GB]
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
       configuration: driver=nvidia latency=0
       resources: irq:130 memory:de000000-deffffff memory:c0000000-cfffffff memory:d0000000-d1ffffff ioport:e000(size=128) memory:c0000-dffff
$ modinfo nvidia
filename:       /lib/modules/4.15.0-72-generic/updates/dkms/nvidia.ko
alias:          char-major-195-*
version:        390.116
...

NDIVIAドライバを使用しているかどうかは、lshwの出力にあるconfigurationという項目のdriverの値から確認できます。値が’nvidia’であればNVIDIAドライバを使用しています。NVIDIAドライバのバージョンはmodinfoの出力のversionの項目で確認できます。ここでは390.116であり、先程の表に照らすと、使用できるCUDA Toolkitのバージョンは最大でもCUDA 9.1です。

PyTorchをインストールする

ここまでの確認の結果、利用可能な最新のCUDA Toolkitバージョンは9.1であることがわかりました。これを基に実際にGPU対応の構成でPyTorchをインストールしてみます。以下は本記事執筆時点でPyTorchの公式サイトに表示されるインストールガイドです。

現時点で最新のStableリリースのバージョンは1.3です。利用できるのがCUDA 9.1であるのに対し、PyTorch 1.3で指定できるCUDAのバージョンは9.2と10.1なので、PyTorch 1.3をインストールすることはできません。CUDA 9.1でPyTorchをインストールするには、古いバージョンを選択する必要があります。古いバージョンのPyTorchの一覧は以下のページで確認できます。

見たところ、CUDA 9.1の範囲でインストールできる最新のPyTorchは1.1.0です。Condaを使ってPyTorch 1.1.0をインストールします。手順は以下の通りです。Condaの仮想環境はすでに起動しているものとします。

$ conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch
Collecting package metadata (repodata.json): done
Solving environment: done

...

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
$ python
Python 3.7.5 (default, Oct 25 2019, 15:51:11) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
>>> quit()

PyTorchからCUDAが使用可能であるかどうかは、torch.cuda.is_available()を呼び出すことで確認できます。TrueであればCUDAが使用可能です。上記でもTrueが返ってきていることから、セットアップが正常に完了していることが窺えます。CUDA Toolkitのバージョン選択を誤ると、GPUを使用する構成でPyTorchをインストールしたにもかかわらず、torch.cuda.is_available()がFalseを返すといった状況に陥ります。試しに要件を満たしていないPyTorch 1.3をインストールして確認してみます。

$ conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
Collecting package metadata (repodata.json): done
Solving environment: done

...

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
$ python
Python 3.7.5 (default, Oct 25 2019, 15:51:11) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
False
>>> quit()

torch.cuda.is_available()がFalseを返しています。こういった状況に陥ってしまうので、CUDAのバージョン選択には気をつけましょう。TensorFlowといった他フレームワークでも同様です。GPU対応のパッケージのインストールは、途端に依存関係や要件が複雑になるので注意が必要です。

参考リンク

Share - この記事をシェアする