0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

numpy高速化のためのcupyで、GPU関連エラーを解決したときのメモ(備忘録)

Last updated at Posted at 2021-06-19

環境

Ubuntu 20.04.1 LTS
GeForce RTX 2070 SUPER
Nvidia ドライバ 455.38
CUDA Version 10.1.243
python 3.7.3
anaconda-navigator 2.0.3
VS code 1.57.1
anaconda上で仮想環境を作り、その中でVS codeを使っています。

背景

受講中の講座の課題提出において、Kerasなどのライブラリを使わずにnumpy中心で画像認識のディープラーニングモデルを構築する必要がありました。データ水増する予定でしたがCPUのみでは時間がかかりすぎるので、cupyをインストールしてGPUによる高速化を図ることにしました。
デバッグ中、だいたい同じところで下記を含む謎のエラーが大量に出て止まりました。

cupy_backends.cuda.api.runtime.CUDARuntimeError: cudaErrorIllegalAddress: an illegal memory access was encountered

原因切り分けに時間がかかりましたが、一度、通ったはずのfowardが後の方でエラーとなることや、NVIDIA-SMIのGPUメモリ使用状況が上限になるとエラーとなっていることがわかり、cupyがGPUのメモリを使いきったことが原因とおおよその見当がつきました。
numpyを使ったプログラムをGPUで動かす方法 を参考に cuda.set_allocator を入れたところ、前よりはepocが進むようになりましたが、やはり途中で止まってしまいました。

import cupy as cp
# 以下を追加
# Declare at first
pool = cp.cuda.MemoryPool(cp.cuda.malloc_managed)
cp.cuda.set_allocator(pool.malloc)

結論

仮想環境構築時にインストールされているcupyではなく、https://cupy.dev/ を参考に、cupy 8.3 から cupy-cuda100 に入れ替えました。もしかしたら、単にバージョンの相性が悪かったただけでcupy 9.1 を普通に選んでインストールすれば良かっただけかもしれませんが、無事にnumpyをcupyに置き換えたプログラムが走るようになりました。

学習時は早くなったと実感できるのですが
Chainer Tutorials : 10_Introduction_to_CuPy.ipynb をローカルで実施した結果は、下記のようになっています。N:10000 の 1.09は微妙です。ちなみに、今にして思えば、cupy入れ替え前では、N:10000のみCPUに負けていたという謎の状況でしたので、それよりは改善しています。

    N    NumPyでの実行時間 (sec)    CuPy での実行時間 (sec)  高速化倍率
-----  -------------------------  -------------------------  ------------
   10                0.000138521                0.000464439  0.30 x
  100                0.00229764                 0.00128341   1.79 x
 1000                0.0522327                  0.0396926    1.32 x
10000               17.228                     15.8261       1.09 x

手順

anaconda上で普通にアンインストール、インストールするだけですが、cupy-cuda100 はcondaでは見つからないので、pipでのインストールになります。

conda uninstall cupy
(依存関係でダウングレードするファイルが多数あるようで、yes/noを聞いてくるまで結構、時間がかかりりました。)
pip install cupy-cuda100

conda listの結果(抜粋)

cudatoolkit               10.0.130                      0  
cudnn                     7.6.5                cuda10.0_0  
cupy-cuda100              9.1.0                    pypi_0    pypi
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?