Chainer 7.7.0 のインストールでハマった話
先日Chainer 7.7.0(+CuPy)のインストールしようとしてハマった際の記録です。結論から言うとCuPyのバージョンが新しすぎたのが原因でした。
環境
Ubuntu 20はChainerのドキュメントでは推奨環境になっていませんが、Chainerの開発者に聞いたところ問題ないとのことでした。
準備
GPUを使うために以下をインストールしました。探せば多くの記事が見つかるはずなので手順は省略します。
nvccで確認します。
$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2020 NVIDIA Corporation Built on Thu_Jun_11_22:26:38_PDT_2020 Cuda compilation tools, release 11.0, V11.0.194
cudnn_samples_v8のmnistCUDNNで動作確認します。なおCUDAをデフォルトとは違うディレクトリに配置したのでMakefileのCUDA_PATHを適切に書き換えて実行しました。
$ make clean && make ︙ $ ./mnistCUDNN ︙ Test passed!
CuPyとChainerのインストール
ChainerでGPUを使うためにはCuPyが必要です。CuPyのドキュメントを見ると
$ pip install cupy-cuda110
とCUDAのバージョンを指定する必要があることが分かります(このコマンドは間違っています)。
続いてChainer
$ pip install chainer
で最新版が入ります。
よし出来た!ということでChainerの実行環境を見てみます。
$ python -c 'import chainer; chainer.print_runtime_info()' Platform: Linux-5.4.0-54-generic-x86_64-with-debian-bullseye-sid Chainer: 7.7.0 ChainerX: Not Available NumPy: 1.15.1 CuPy: Not Available iDeep: Not Available
CuPy: Not Available←???
なぜかCuPyが使えないと言われてしまいました。
原因究明
最初はCUDAやcuDNNを疑いましたが、正常にインストールされているようでした。色々調べた結果、Chainerでcupy.utilがimportできていないことが分かりました。
CuPyのGithubを見ると_util.pyxというファイルがあります。しかしインストールしたCuPyにも_util.cpython-37m-x86_64-linux-gnu.soというそれらしきものが存在したので、なぜcupy.utilがimportできないのか、最初はさっぱり分かりませんでした。
分からん~と言いながら適当にCuPyのReleasesを眺めていたらv8.0.0のCode Fixesでこんなものがありました。
- Rename cupy.util submodule to cupy._util (#3938)
ん?utilから_utilに変わっている!?なぜ気づけなかったorz
ファイル名が変わってChainerでcupy.utilをimportできないのが根本的な原因と分かりました。
解決
結局CuPyの最新版ではなく、8.0.0より前のものを入れればよいです。
まずは先ほど入れたCuPyとChainerをアンインストール。
$ pip uninstall chainer $ pip uninstall cupy-cuda110
次にバージョンを指定してCuPyをインストール。
$ pip install 'cupy-cuda110>=7.7.0,<8.0.0'
最後にChainerをインストール。
$ pip install chainer
Chainerの実行環境を出力してみます。
$ python -c 'import chainer; chainer.print_runtime_info()' Platform: Linux-5.4.0-54-generic-x86_64-with-debian-bullseye-sid Chainer: 7.7.0 ChainerX: Not Available NumPy: 1.15.1 CuPy: CuPy Version : 7.8.0 CUDA Root : /.../cuda-11.0 CUDA Build Version : 11000 CUDA Driver Version : 11000 CUDA Runtime Version : 11000 cuBLAS Version : 11100 cuFFT Version : 10200 cuRAND Version : 10201 cuSOLVER Version : (10, 5, 0) cuSPARSE Version : 11100 NVRTC Version : (11, 0) cuDNN Build Version : 8002 cuDNN Version : 8005 NCCL Build Version : 2708 NCCL Runtime Version : 2708 CUB Version : Enabled cuTENSOR Version : None iDeep: Not Available
無事にGPUを使えるようになりました!