GitにあるPytorchのソースをコンパイルするとCUDA9.0とcuDNN7.0で動かすことができるようなので試してみました。
普段はAnacondaやpytorch.orgから入手できるcuda80/cudnn6.0.21/cudatoolkit8.0を使っていますが(CUDA9.0+cuDNN7.0をインストールしているにもかかわらず)、最新CUDA9.0とcuDNN7.0の組み合わせではどのくらい速くなるのか気になります。CUDA9.0は新型GPUであるVoltaのために開発されたらしく、現在使っているPascal(GTX1060)だとあまり効果はでないかもしれません。2〜5倍速くなるとは書いてありますが、おそらく条件が揃わないことにはそこまで速くならないのではないでしょうか。
コンパイルしたGitソース版Pytorch(master)には、CUDAとcuDNNのバージョン確認ができるコマンドがあります。
「torch.version.cuda」でCUDAのバージョン「'9.0.176'」と出ています。このコマンドは現在のソース版からのようです。
「torch.backends.cudnn.version()」でcuDNNバージョン「7004」と出てきます。CUDA8.0の環境だと「6021」と出てきます。
いつもベンチマーク的につかっているサンプル:dcgan/cifar10を1iteration(782回)動かしてみると、
CUDA8.0+cuDNN6.0
CUDA9.0+cuDNN7.0
数回試してみましたが、わずかな差(77.91秒:77.59秒)でしかありませんでした。一応毎回CUDA9.0のほうが0.5秒前後速いのですが、誤差も含まれているかもしれないので、このサンプルでは当てにならない。やはりVoltaじゃないと効果発揮しないのでしょうか。
いずれにしても、圧倒的な差が出るという感じでもなさそうなので、Voltaにしない限りは無理して(コンパイルまでして)使う必要もなさそうです。
ソースからのコンパイル/インストール方法(memo):
現状:Ubuntu16.10/GTX1060/CUDA9.0/cuDNN7.0/gcc6.2/python3.6
Anacondaの仮想環境にpy359(名前は任意ですがpython3.5)をつくり、その中にインストールしてします。ちなみに、pyenvの仮想環境内にAnacondaの仮想環境をつくり、二重の仮想環境にしています。
ソースからのコンパイル方法はGitにも載っていますが、gccのバージョンでエラーがでたので、gccを別途仮想環境内py359にインストールしています(gcc6.2から5.4へダウングレード)。Ubuntu16.10の場合、gcc5.5が適していると画面に出ましたが、Anacondaから入手できるgcc5.4でなんとかコンパイルできました(多少Warningがでましたが)。
最初にインストールしたい仮想環境に入ってから以下の手順ですすめてみました(ディレクトリはhome直下で、gitに掲載されている方法を参考に)
インストール完了後、
それからtorchvision(0.1.9)モジュールも別途必要となりますが、Anacondaからそのままインストールするとpytorch(通常版)も依存的にインストールされてしまうので(コンフリクト起こすかもしれない)、
すれば単体でインストールできると思います。
TensorflowもソースをコンパイルすればCUDA9.0に対応するようですが、面倒なのでやめてしまいました。まだしばらくはCUDA8.0でも間に合いそうです。
普段はAnacondaやpytorch.orgから入手できるcuda80/cudnn6.0.21/cudatoolkit8.0を使っていますが(CUDA9.0+cuDNN7.0をインストールしているにもかかわらず)、最新CUDA9.0とcuDNN7.0の組み合わせではどのくらい速くなるのか気になります。CUDA9.0は新型GPUであるVoltaのために開発されたらしく、現在使っているPascal(GTX1060)だとあまり効果はでないかもしれません。2〜5倍速くなるとは書いてありますが、おそらく条件が揃わないことにはそこまで速くならないのではないでしょうか。
コンパイルしたGitソース版Pytorch(master)には、CUDAとcuDNNのバージョン確認ができるコマンドがあります。
「torch.version.cuda」でCUDAのバージョン「'9.0.176'」と出ています。このコマンドは現在のソース版からのようです。
「torch.backends.cudnn.version()」でcuDNNバージョン「7004」と出てきます。CUDA8.0の環境だと「6021」と出てきます。
いつもベンチマーク的につかっているサンプル:dcgan/cifar10を1iteration(782回)動かしてみると、
CUDA8.0+cuDNN6.0
CUDA9.0+cuDNN7.0
数回試してみましたが、わずかな差(77.91秒:77.59秒)でしかありませんでした。一応毎回CUDA9.0のほうが0.5秒前後速いのですが、誤差も含まれているかもしれないので、このサンプルでは当てにならない。やはりVoltaじゃないと効果発揮しないのでしょうか。
いずれにしても、圧倒的な差が出るという感じでもなさそうなので、Voltaにしない限りは無理して(コンパイルまでして)使う必要もなさそうです。
ソースからのコンパイル/インストール方法(memo):
現状:Ubuntu16.10/GTX1060/CUDA9.0/cuDNN7.0/gcc6.2/python3.6
Anacondaの仮想環境にpy359(名前は任意ですがpython3.5)をつくり、その中にインストールしてします。ちなみに、pyenvの仮想環境内にAnacondaの仮想環境をつくり、二重の仮想環境にしています。
ソースからのコンパイル方法はGitにも載っていますが、gccのバージョンでエラーがでたので、gccを別途仮想環境内py359にインストールしています(gcc6.2から5.4へダウングレード)。Ubuntu16.10の場合、gcc5.5が適していると画面に出ましたが、Anacondaから入手できるgcc5.4でなんとかコンパイルできました(多少Warningがでましたが)。
最初にインストールしたい仮想環境に入ってから以下の手順ですすめてみました(ディレクトリはhome直下で、gitに掲載されている方法を参考に)
export CMAKE_PREFIX_PATH="$(dirname $(which conda))/../"
conda install numpy pyyaml mkl setuptools cmake cffi
#conda install -c soumith magma-cuda90 #(これはなくても動きました)
conda install -c salford_systems gcc-5 # gcc-5.4を仮想環境内へインストール
git clone --recursive https://github.com/pytorch/pytorch
cd ~/pytorch # homeにgit cloneしたpytorchフォルダ内へ移動
#念のためgccとg++(先程インストールしたgcc5.4)のパスを通しておきます
export CC=/home/mirrornerror/.pyenv/versions/anaconda3-5.0.1/envs/py359/bin/gcc
export CXX=/home/mirrornerror/.pyenv/versions/anaconda3-5.0.1/envs/py359/bin/g++
python setup.py install #git cloneしたpytorchフォルダ内でインストール実行
#もしコンパイルが失敗したらクリーンしてから再挑戦
python setup.py clean
conda clean --all
コンパイルには5〜10分くらいかかるかもしれません。インストール完了後、
conda listで確認すると、
torch 0.4.0a0+ed64001
というモジュールとして入っています。それからtorchvision(0.1.9)モジュールも別途必要となりますが、Anacondaからそのままインストールするとpytorch(通常版)も依存的にインストールされてしまうので(コンフリクト起こすかもしれない)、
conda install torchvision --no-deps #依存関係無視で単体インストール
または、pip install torchvision
TensorflowもソースをコンパイルすればCUDA9.0に対応するようですが、面倒なのでやめてしまいました。まだしばらくはCUDA8.0でも間に合いそうです。