Cupy 4.2.0のUbuntu 16.04 LTSへのインストールについて

377 views
Skip to first unread message

Yokokawa Hideaki

unread,
Jun 26, 2018, 10:02:08 PM6/26/18
to CuPy Japanese User Group
グループ各位

お世話になっております
横川と申します
メーカー勤務で、chainerを使用しております。
cupy 4.2.0をインストール中ですが

pip3 intall cupy-4.2.0.zip -vvvv

で行っていますが、

特定の箇所で、必ずPermission Deniedで止まります

    building 'cupy.cuda.thrust' extension
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-protot$
    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/$ 
 error: [Errno 13] Permission denied 
 error Cleaning up...

基本super user(root)でpipを行っているため、
このようなことは基本なさそうに思いました。

nvccは正常に動いており、nViDIAの例題ソフトは
コンパイルができ、動くことを確認しております。

CUDAのヴァージョンについては
/usr/local/cuda/version.txtで
CUDA Version 9.2.88
と示されております。

少し気になったのは
setup.pyの中を見せていただいたところ、

package_data = {
    'cupy': [
        'core/include/cupy/complex/arithmetic.h',
        'core/include/cupy/complex/catrig.h',
        'core/include/cupy/complex/catrigf.h',
        'core/include/cupy/complex/ccosh.h',
        'core/include/cupy/complex/ccoshf.h',
        'core/include/cupy/complex/cexp.h',
        'core/include/cupy/complex/cexpf.h',
        'core/include/cupy/complex/clog.h',
        'core/include/cupy/complex/clogf.h',
        'core/include/cupy/complex/complex.h',
        'core/include/cupy/complex/complex_inl.h',
        'core/include/cupy/complex/cpow.h',
        'core/include/cupy/complex/cproj.h',
        'core/include/cupy/complex/csinh.h',
        'core/include/cupy/complex/csinhf.h',
        'core/include/cupy/complex/csqrt.h',
        'core/include/cupy/complex/csqrtf.h',
        'core/include/cupy/complex/ctanh.h',
        'core/include/cupy/complex/ctanhf.h',
        'core/include/cupy/complex/math_private.h',
        'core/include/cupy/carray.cuh',
        'core/include/cupy/complex.cuh',
        'core/include/cupy/atomics.cuh',
        'cuda/cupy_thrust.cu',
    ],
}

エラーが出ている、'cupy.cuda.thrust' のところと同じワードで、
最後の「thrust」だけ、ヘッダーファイルを示しておらず、
.cu(CUDAのバイナリ?)になっていることでした。

それと、パーミッションが付与されずにコンパイルできないことと
どういう関係があるのかは、不明ですが、気になった点です。

他に、必要な情報があれば、教えていただければ、さらに開示させていただきます

宜しくお願いいたします。

Kenichi Maehashi

unread,
Jun 27, 2018, 12:39:08 AM6/27/18
to CuPy Japanese User Group
前橋です。

まず、現在 CuPy ではビルド済みの wheel を提供していますので、こちらの利用をお勧めします。


また、https://github.com/cupy/cupy/issues/1411 でご報告いただいた、
wheel をインストールしたにも関わらず以下ののメッセージが出る問題ですが、

> chainer 4.2.0 requires cupy<5.0.0,>=4.2.0, which is not installed.

CuPy のインストールに使用するパッケージを切り替える(*)場合は、
CuPy (`cupy` および `cupy-cudaXX` すべて) と Chainer を一度アンインストールし、
再度インストールしてください。
(Chainer は、インストール時に存在していた CuPy パッケージ (`cupy` または `cupy-cudaXX`)
に対して依存関係を設定します。
この設定は CuPy のインストールに使用するパッケージを切り替えた後も残ってしまうため、
このようなメッセージが表示されます。)

(*) 例えば以下のようなケースです。
- ソース/wheel間の移行 (例: `cupy` から `cupy-cuda92` に切り替える)
- CUDA のアップグレード (例: `cupy-cuda91` から `cupy-cuda92` に切り替える)

よろしくお願いいたします。

Yokokawa Hideaki

unread,
Jun 27, 2018, 8:20:16 PM6/27/18
to CuPy Japanese User Group
前橋さま
グループ各位

お世話になります

ご指示ありがとうございました
一通り、cupy ,chainerをuninstallした後、

pip install cupy --no-cache-dir
pip install chainer --no-cache-dir

を行い、とりあえずはcupyのインストールが出来たようです。

次なる問題ですが..(スレッドを変えたほうが良いならば、変更いたします)
mnistのサンプルを試しに動かしたところ以下のように、重み行列Wの初期化
(正規乱数を代入する部分?)で止まります。

python3 train_mnist.py -g 0

GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Exception in main training loop: CURAND_STATUS_LAUNCH_FAILURE
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py", line 309, in run
    entry.extension(self)
  File "/usr/lib/python3.5/contextlib.py", line 77, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/local/lib/python3.5/dist-packages/chainer/reporter.py", line 101, in scope
    yield
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py", line 306, in run
    update()
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py", line 149, in update
    self.update_core()
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py", line 160, in update_core
    optimizer.update(loss_func, *in_arrays)
  File "/usr/local/lib/python3.5/dist-packages/chainer/optimizer.py", line 650, in update
    loss = lossfun(*args, **kwds)
  File "/usr/local/lib/python3.5/dist-packages/chainer/links/model/classifier.py", line 134, in __call__
    self.y = self.predictor(*args, **kwargs)
  File "train_mnist.py", line 23, in __call__
    h1 = F.relu(self.l1(x))
  File "/usr/local/lib/python3.5/dist-packages/chainer/links/connection/linear.py", line 128, in __call__
    self._initialize_params(in_size)
  File "/usr/local/lib/python3.5/dist-packages/chainer/links/connection/linear.py", line 114, in _initialize_params
    self.W.initialize((self.out_size, in_size))
  File "/usr/local/lib/python3.5/dist-packages/chainer/variable.py", line 1411, in initialize
    data = initializers.generate_array(self.initializer, shape, xp)
  File "/usr/local/lib/python3.5/dist-packages/chainer/initializers/__init__.py", line 46, in generate_array
    initializer(array)
  File "/usr/local/lib/python3.5/dist-packages/chainer/initializers/normal.py", line 68, in __call__
    Normal(s)(array)
  File "/usr/local/lib/python3.5/dist-packages/chainer/initializers/normal.py", line 36, in __call__
    array[...] = xp.random.normal(**args)
  File "/usr/local/lib/python3.5/dist-packages/cupy/random/distributions.py", line 93, in normal
    x = rs.normal(0, 1, size, dtype)
  File "/usr/local/lib/python3.5/dist-packages/cupy/random/generator.py", line 116, in normal
    return self._generate_normal(func, size, dtype, loc, scale)
  File "/usr/local/lib/python3.5/dist-packages/cupy/random/generator.py", line 79, in _generate_normal
    func(self._generator, out.data.ptr, out.size, *args)
  File "cupy/cuda/curand.pyx", line 174, in cupy.cuda.curand.generateNormalDouble
  File "cupy/cuda/curand.pyx", line 183, in cupy.cuda.curand.generateNormalDouble
  File "cupy/cuda/curand.pyx", line 83, in cupy.cuda.curand.check_status
Will finalize trainer extensions and updater before reraising the exception.
Traceback (most recent call last):
  File "train_mnist.py", line 124, in <module>
    main()
  File "train_mnist.py", line 120, in main
    trainer.run()
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py", line 320, in run
    six.reraise(*sys.exc_info())
  File "/usr/lib/python3/dist-packages/six.py", line 686, in reraise
    raise value
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py", line 309, in run
    entry.extension(self)
  File "/usr/lib/python3.5/contextlib.py", line 77, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/local/lib/python3.5/dist-packages/chainer/reporter.py", line 101, in scope
    yield
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/trainer.py", line 306, in run
    update()
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py", line 149, in update
    self.update_core()
  File "/usr/local/lib/python3.5/dist-packages/chainer/training/updaters/standard_updater.py", line 160, in update_core
    optimizer.update(loss_func, *in_arrays)
  File "/usr/local/lib/python3.5/dist-packages/chainer/optimizer.py", line 650, in update
    loss = lossfun(*args, **kwds)
  File "/usr/local/lib/python3.5/dist-packages/chainer/links/model/classifier.py", line 134, in __call__
    self.y = self.predictor(*args, **kwargs)
  File "train_mnist.py", line 23, in __call__
    h1 = F.relu(self.l1(x))
  File "/usr/local/lib/python3.5/dist-packages/chainer/links/connection/linear.py", line 128, in __call__
    self._initialize_params(in_size)
  File "/usr/local/lib/python3.5/dist-packages/chainer/links/connection/linear.py", line 114, in _initialize_params
    self.W.initialize((self.out_size, in_size))
  File "/usr/local/lib/python3.5/dist-packages/chainer/variable.py", line 1411, in initialize
    data = initializers.generate_array(self.initializer, shape, xp)
  File "/usr/local/lib/python3.5/dist-packages/chainer/initializers/__init__.py", line 46, in generate_array
    initializer(array)
  File "/usr/local/lib/python3.5/dist-packages/chainer/initializers/normal.py", line 68, in __call__
    Normal(s)(array)
  File "/usr/local/lib/python3.5/dist-packages/chainer/initializers/normal.py", line 36, in __call__
    array[...] = xp.random.normal(**args)
  File "/usr/local/lib/python3.5/dist-packages/cupy/random/distributions.py", line 93, in normal
    x = rs.normal(0, 1, size, dtype)
  File "/usr/local/lib/python3.5/dist-packages/cupy/random/generator.py", line 116, in normal
    return self._generate_normal(func, size, dtype, loc, scale)
  File "/usr/local/lib/python3.5/dist-packages/cupy/random/generator.py", line 79, in _generate_normal
    func(self._generator, out.data.ptr, out.size, *args)
  File "cupy/cuda/curand.pyx", line 174, in cupy.cuda.curand.generateNormalDouble
  File "cupy/cuda/curand.pyx", line 183, in cupy.cuda.curand.generateNormalDouble
  File "cupy/cuda/curand.pyx", line 83, in cupy.cuda.curand.check_status
cupy.cuda.curand.CURANDError: CURAND_STATUS_LAUNCH_FAILURE

こちらでは、cuda-9.2を使用しております。
/usr/local/cuda/lib64/
の中には、
libcurand.so (libcurand.so.9.2 へ、シンボリックリンク)
libcurand.so.7.5
libcurand.so.7.5.18
libcurand.so.9.2(libcurand.so.9.2.88 へ、シンボリックリンク)
libcurand.so.9.2.88
libcurand_static.a

これらのファイルが存在します。
依存関係の問題でしょうか?

追問となってしまい恐縮ですが、
このエラーを解消する方法をご教授お願いいたします。

Yokokawa Hideaki

unread,
Jun 27, 2018, 8:21:34 PM6/27/18
to CuPy Japanese User Group
自己レスです

installの際、pipと書きましたが
pip3です
また、root権限でインストールしております。

よろしくお願いいたします

Yokokawa Hideaki

unread,
Jun 27, 2018, 8:51:09 PM6/27/18
to CuPy Japanese User Group

さらに自己レスですが

ご指摘の cupy-cudaxxについてやってみますと、

pip3 install cupy-cuda92 --no-cache-dir
でインストールしたうえでmnistを動かすと

python3 train_mnist.py  -g 0

以下のようなエラーを吐きます。

GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Traceback (most recent call last):
  File "train_mnist.py", line 124, in <module>
    main()
  File "train_mnist.py", line 60, in main
    chainer.backends.cuda.get_device_from_id(args.gpu).use()
  File "/usr/local/lib/python3.5/dist-packages/chainer/backends/cuda.py", line 160, in get_device_from_id
    check_cuda_available()
  File "/usr/local/lib/python3.5/dist-packages/chainer/backends/cuda.py", line 90, in check_cuda_available
    raise RuntimeError(msg)
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/chainer/chainer#installation).CuPy is not correctly installed.
If you are using wheel distribution (cupy-cudaXX), make sure that the version of CuPy you installed matches with the version of CUDA on your host.
Also, confirm that only one CuPy package is installed:
  $ pip freeze
If you are building CuPy from source, please check your environment, uninstall CuPy and reinstall it with:
  $ pip install cupy --no-cache-dir -vvvv
Check the Installation Guide for details:
  https://docs-cupy.chainer.org/en/latest/install.html
original error: libcudart.so.9.2: cannot open shared object file: No such file or directory


このライブラリ.soの存在を調べると
やはり、
/usr/local/cuda/lib64/
の直下に

libcudart.so ( libcudart.so.9.2へシンボリックリンク)
libcudart.so.7.5
libcudart.so.7.5.18
libcudart.so.9.2 (libcudart.so.9.2.88へシンボリックリンク)
libcudart.so.9.2.88
libcudart_static.a

が存在します。

一つ一つで結構ですので、ご教授いただければ幸いです
当方では、cpuでもある程度の速度がでる環境ですので、一気に解決する必要はありません。
GPUでのベクトル計算については必要な環境ではあります。

依存関係等複雑と思います。紐をほどいて解決していただければ幸いです。

Kenichi Maehashi

unread,
Jun 29, 2018, 12:53:11 AM6/29/18
to CuPy Japanese User Group
wheel をインストールした状態で、以下の環境変数を設定してみていただけますか?

export LD_LIBRARY_PATH=/usr/local/cuda/lib64/

よろしくお願いいたします。

Yokokawa Hideaki

unread,
Jul 2, 2018, 11:12:01 PM7/2/18
to CuPy Japanese User Group
前橋様

グループ各位
お世話になっております

スレッドの件、一応解決しました。

どうも、デバイスドライバがうまく動いていないこと、
cudaがうまく動いていなかったこと、
の2つが原因だったようです。

改めて、見直しをかけ、
nVIDIAのcuDNNのmnistサンプルが動いていないことに気が付き、
デバイスドライバと、cudaを入れなおし、
cupy-cuda92を最初にインストールし
chainerを後にインストールしたら動き始めました。

#最終的には、別のいろんな不都合があって、osからの再インストールを行いました

chainerのmnistサンプルを -g 0の引数を渡して
実行させたところ、動きました。

別の現象が現れましたので、別スレッドで質問させていただきます

ありがとうございました。
Reply all
Reply to author
Forward
0 new messages