はじめに
Chainerを使う前にCuPyをGPUで動かすことが必要なのでその為の実験。
事前準備
環境を分けることを考えてpipenv
を用いる。
yamamo-to@jetson-nano:~$ sudo apt install python3-pip
yamamo-to@jetson-nano:~$ pip3 install pipenv --user
pipenv
が$HOME/.local/bin
にインストールされるが既にPATHは通っていた。~/.profileに同パスを読み込むようになっていた。.bash_profileを使う場合はPATHが通らないので、その場合は下記のコマンドで通す必要がある。
yamamo-to@jetson-nano:~$ export PATH=$HOME/.local/bin:$PATH
またインストール前に周波数を上げる。
yamamo-to@jetson-nano:~$ sudo jetson_clocks
さらにメモリが不足したとき用にスワップを用意する。
yamamo-to@jetson-nano:~$ sudo fallocate -l 4G /swapfile
yamamo-to@jetson-nano:~$ sudo chmod 600 /swapfile
yamamo-to@jetson-nano:~$ sudo mkswap /swapfile
yamamo-to@jetson-nano:~$ sudo swapon /swapfile
インストール
1時間近く時間がかかったがインストールはできたようだ。
yamamo-to@jetson-nano:~$ mkdir ~/Documents/Chainer
yamamo-to@jetson-nano:~$ cd ~/Documents/Chainer
yamamo-to@jetson-nano:~/Documents/Chainer$ pipenv --three
yamamo-to@jetson-nano:~/Documents/Chainer$ pipenv install cupy
動作確認
とりあえずpython3でCuPyが動く。
yamamo-to@jetson-nano:~/Documents/Chainer$ pipenv run python3 -c 'import cupy as cp; print(cp.__version__)'
6.0.0
サンプル1を参考に下記のようなcupy_test.pyを作成し動作確認を行う。
cupy_test.py
import cupy as cp
cp.cuda.Device(0).use()
x_gpu = cp.array([1, 2, 3])
l2_gpu = cp.linalg.norm(x_gpu)
print(l2_gpu)
このプログラムを実行すると
yamamo-to@jetson-nano:~/Documents/Chainer$ pipenv run python3 cupy_test.py
3.7416573867739413
なお存在しないGPUを指定すると確かにエラーとなる。
yamamo-to@jetson-nano:~/Documents/Chainer$ pipenv run python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cupy as cp
>>> cp.cuda.Device(1).use()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "cupy/cuda/device.pyx", line 135, in cupy.cuda.device.Device.use
File "cupy/cuda/device.pyx", line 141, in cupy.cuda.device.Device.use
File "cupy/cuda/runtime.pyx", line 193, in cupy.cuda.runtime.setDevice
File "cupy/cuda/runtime.pyx", line 145, in cupy.cuda.runtime.check_status
cupy.cuda.runtime.CUDARuntimeError: cudaErrorInvalidDevice: invalid device ordinal