公式ページにも告知されてましたが、気づかずに結構はまったので、書いた。
ハマったところ
cudaでGPU環境作ったあと、
pip install --user --upgrade chainer
pip install --user --upgrade chainer-cuda-deps
で最新のversion1.3のchainerをインストールした。
その後に、以前のバージョン(v1.1.2)のmnintで確認しようとしたところ、
こんなエラーがでてきて困った
Traceback (most recent call last):
File "./train_mnist.py", line 48, in <module>
cuda.init(args.gpu)
AttributeError: 'module' object has no attribute 'init'
気づくまでに試したこと
毎回pycudaのインストールが鬼門だったので、またそのあたりかと思って、pycudaのテストをしてみたが
$ python test_driver.py
================= test session starts ================
platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2
rootdir: /home/hogehoge/work/pycuda-2015.1.2, inifile:
collected 23 items
test_driver.py ................x......
============= 22 passed, 1 xfailed in 26.31 seconds =========
$ python test_gpuarray.py
========================= test session starts =======================
platform linux2 -- Python 2.7.6 -- py-1.4.30 -- pytest-2.7.2
rootdir: /home/ほげほげ/work/pycuda-2015.1.3, inifile:
collected 58 items
test_gpuarray.py ..........................................................
====================== 58 passed in 21.84 seconds ====================
pycudaのテストをしても、ちゃんと通ってるし
各種アンインストール→再インストールもしたが
pip uninstall chainer
pip uninstall chainer-cuda-deps
pip install --user --upgrade chainer
pip install --user --upgrade chainer-cuda-deps
ダメ・・・・
前作った環境ではこういうエラーは出なかったし、ググっても同じエラーになってる人がいなくて困った。
原因
もうタイトルで書いているでのすが、ソースコードのバージョンが古かっただけでした。
公式のこれが全てです。
CuPy does not require explicit initialization, so cuda.init() function is removed as of v1.3.0.
v1.3.0以前のバージョンでは、gpuを使うとき、
cuda.init(0)
とかしていたのですが、version1.3.0から
cuda.check_cuda_available()
となっていました。
そりゃ、削除されたんですから、initなんてないって言われるの当たり前でしたね。
こちらの記事をよく参考にさせていただいて環境構築をしていたのですが、2週間ほど前にやったときは、これでうまくいきました。こんな簡単にいくのか、と感心していたのですが、chainerの動きは早く、ちょっと前にうまくいった方法でもすぐ変わってしまうようです。著者さんも、2週間おきにアップグレードがかかるのでAMIのメンテが難しいといっていたのがよくわかりました。
ちゃんと最新の情報に従って、インストールする必要があるみたいですね・・・
chainerをやる人は気をつけてください