Chainer, CuPy のインストール(Ubuntu 上)
CuPy は,numpy 相当の機能を持つ数値演算ライブラリで,動作には NVIDIA CUDA が必要である.
Chainer は 2019 年 12 月に v7 を最終メジャーリリースとし,開発は PyTorch エコシステムへ移行した.現在の Chainer は保守フェーズにあり,最新版は 7.8.1 である.Chainer で GPU を使う場合は CuPy v7 が必要であり,CuPy の最新版とは組み合わせられない.新規にディープラーニングの開発環境を構築する場合は PyTorch の利用を検討するとよい.CuPy 単体は現在も開発が継続されており,最新版を利用できる.
【目次】
【関連する外部ページ】 https://docs.chainer.org/en/stable/install.html, https://docs.cupy.dev/en/stable/install.html
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now
C/C++ コンパイラと Make とビルドツールのインストール
ソフトウェアをソースコードからビルドするには、C/C++コンパイラ (通常はGCC) や make ユーティリティといった開発ツールが重要である。Ubuntuでは、これらのツールは build-essential パッケージにまとめられている。インストールするには,端末で,次のコマンドを実行する。
sudo apt -y install build-essential libtool texinfo dpkg-dev pkg-config
libtool, texinfo, dpkg-dev, pkg-config は、より複雑なビルドやパッケージ管理の際に役立つ開発関連ツールである。
NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール(Ubuntu 上)
Ubuntu での NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール: 別ページ »で説明
インストールする CUDA のバージョンは,使用するライブラリの対応状況に合わせる.CuPy の最新版は CUDA 11.x および 12.x に対応している.Chainer で GPU を使う場合は CuPy v7 が必要であり,CuPy v7 が対応する CUDA は 10.x 以前である.
Git, cmake, curl, p7zip-full のインストール(Ubuntu 上)
端末で,次のコマンドを実行する.
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install git cmake cmake-curses-gui cmake-gui curl p7zip-full
Python3 開発用ファイル,pip, setuptools, venv のインストール(Ubuntu 上)
Python のインストールは行わない(Ubuntu のシステム Python を用いる.)
Ubuntu のシステム Python を用いるとき, python, pip は,次のコマンドで起動できる.
- python3 (Ubuntu のシステム Python)
- pip3 (pip 3)
Ubuntu での Python 開発環境(JupyterLab, spyder, nteract)のインストール: 別ページ »で説明
Python3 開発用ファイル,pip, setuptools, venv のインストール
端末で,次のコマンドを実行する.
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential
Python 仮想環境の作成と Cython のインストール
Ubuntu 23.04 以降では,OS のパッケージ管理と競合しないよう,システム Python への pip による直接のインストールが既定で禁止されている(PEP 668,externally-managed-environment エラー).そのため,Python 仮想環境 (venv) を作成し,その中にインストールする.
端末で,次のコマンドを実行する.
python3 -m venv ~/venv/chainer
source ~/venv/chainer/bin/activate
pip install -U pip setuptools wheel
pip install cython
以降のコマンドは,この仮想環境を有効化した状態(プロンプトの先頭に (chainer) と表示される状態)で実行する.端末を開き直したときは,端末で,次のコマンドを実行して仮想環境を有効化する.
source ~/venv/chainer/bin/activate
CuPy のインストール
CuPy は,numpy 相当の機能を持つ数値演算ライブラリで,動作には NVIDIA CUDA が必要である.
CuPy には,CUDA のバージョンごとにビルド済みパッケージ (wheel) が用意されている.ソースコードからのビルドは時間がかかるため,通常はビルド済みパッケージを用いる.
- CuPy のインストール(ビルド済みパッケージを使用)
端末で,インストール済みの CUDA のバージョンに合わせて,次のいずれかのコマンドを実行する.
# CUDA 12.x のとき pip install cupy-cuda12x # CUDA 11.x のとき pip install cupy-cuda11xCUDA のバージョンは,端末で,次のコマンドを実行して確認する.
nvcc --version - CuPy のインストール(ソースコードを使用)
ビルド済みパッケージが提供されていない CUDA のバージョンを使う場合は,ソースコードからビルドする.端末で,次のコマンドを実行する.ビルドには時間がかかる.
CUDA_PATH="/usr/local/cuda" CFLAGS="-I/usr/local/cuda/include" LDFLAGS="-L/usr/local/cuda/lib64" pip install cupy --no-cache-dir -vvvv
- cupy がインストールできたことの確認
端末で,次のコマンドを実行する.
pip show cupy
- GPU が認識されていることの確認
端末で,次のコマンドを実行する.
python -c "import cupy; cupy.show_config()"
Chainer のインストール
Chainer は保守フェーズにあり,PyPI で公開されている 7.8.1 が最新版である.端末で,次のコマンドを実行する.
pip install chainer
cupy-cuda101)をインストールする.
- 開発版のソースコードからインストールする場合
端末で,次のコマンドを実行する.終了までしばらく待つ.
cd /tmp rm -rf chainer git clone https://github.com/chainer/chainer.git cd /tmp/chainer pip -v install .
- 終了の確認
エラーメッセージが出ていなければ OK.
- chainer がインストールできたことの確認
端末で,次のコマンドを実行する.
pip show chainer
CuPy の動作テストと numpy との速度比較(配列の掛け算による)
インストールできたかを確認する.
- Windows では python (Python ランチャーは py)
- Ubuntu では python3(仮想環境を有効化しているときは python)
Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.
Python のまとめ: 別ページ »にまとめ
端末で,次のコマンドを実行する.
python
- numpy での配列の掛け算
import numpy as np N = 10000 X = np.random.rand(N, N) Y = np.random.rand(N, N) import time start_time = time.time() Z = np.dot(X, Y) print(time.time() - start_time) exit()
- cupy での配列の掛け算
CuPy の演算は GPU 上で非同期に実行されるため,計測の前後で同期を取らないと実際の計算時間が得られない.次のプログラムでは
cp.cuda.Stream.null.synchronize()により同期を取る.import numpy as np import cupy as cp N = 10000 X = cp.asarray( np.random.rand(N, N) ) Y = cp.asarray( np.random.rand(N, N) ) import time cp.cuda.Stream.null.synchronize() start_time = time.time() Z = cp.dot(X, Y) cp.cuda.Stream.null.synchronize() print(time.time() - start_time) exit()