Pythonで機械学習プログラミングをしているとよく耳にするCuPy(クパイ)。CuPyは何ができるの?どうやって使うの?こんな疑問感じたことありますよね。
CuPyはGPU向けのPythonの汎用配列計算ライブラリです。機械学習プログラミングをしようとしたときに、簡単にGPUを使って計算を行えるようになります。GPUを使うことで、それまで時間がかかっていた機械学習を速く実行できるようになります。特に、深層学習(ディープラーニング)のプログラミングには非常に時間がかかるため、GPUの使用は必須となります。ぜひ、この記事でCuPyの使い方をマスターしましょう。
そこで今回は、CuPyでは何ができるのか、どうやって使えば良いかをできるだけわかりやすくご紹介します。それではまず、CuPyとは何かについての解説から始めましょう。
汎用配列計算ライブラリCuPyて何か
CuPyは、オープンソースの汎用配列計算ライブラリです。もともとPreferred Networks社が開発していた深層学習(ディープラーニング)向けのライブラリはChainer(チェイナー)が使用されていましたが、2017年にCuPy はChainerから分離して独立したライブラリとして開発が行われるようになりました。なお、Chainerは2019年に開発が終了して現在はメンテナンスのみされています。
ディープラーニングをはじめとした機械学習プログラミングでは、行列演算を実行することが多いです。CuPyの使い方を習得して、GPUマシンで高速実行できるようになりましょう。
何ができるのか
続いてCuPyでは何ができるのかを見ていきましょう。
CuPyは、数値計算ライブラリのNumpyと互換性のあるインターフェースを持っています。このため、Numpyで実行できることのほとんどはCuPyでも実行が可能です。Numpyでは多次元配列をndarrayというデータ構造で扱います。CuPyでも同様にndarrayを扱え、Numpyで実行可能な多次元配列の操作も同様に行えます。
CuPyを導入する前の準備
次に、実際にCuPyを使用するための準備を進めましょう。
CuPyはGPUを使った汎用配列計算ライブラリです。このため、GPUを搭載したマシンを用意する必要があります。特にCuPyはNVIDIA製のGPUをサポートしていますので、NVIDIAのGPUマシンを準備しましょう。
次に、GPUを使用できるようにNVIDIAドライバダウンロードサイトからNVIDIA Driverをダウンロードして、インストールをしましょう。ドライバはGPUマシンに搭載されているGPUの種類やOSに一致するものを選びます。インストール方法はOSによって異なるため、NVIDIAドライバダウンロードサイトのインストラクションを参照してください。
次に、GPUマシンにCUDA(クーダ)をインストールします。CUDAはNVIDIAが提供しているGPU向けの汎用並列コンピューティング用のツールです。CUDAはCUDAダウンロードサイトからダウンロードできるので、GPUにあったバージョンを選択してインストールしてください。インストール方法はOSやバージョンによって異なるため、CUDAダウンロードサイトのインストラクションを参照しましょう。
また、先ほど説明したcuBLAS、cuDNN、cuRand、cuSolver、cuSPARSE、cuFFTといったライブラリはCUDAを用いて動作をしています。
最後に、CuPyを実行するためのPythonの環境を構築しましょう。PythonのディストリビューションであるAnacondaなどをインストールすると良いでしょう。こちらもインストール方法はOSによって異なるため、Anaconda公式サイトのインストラクションを参照してください。
CuPyをインストールする
CuPyを導入する準備が整ったところで、CuPyのインストールに移りましょう。
CuPyをインストールするには、pipコマンドを使用します。Pythonのターミナルを起動してpipコマンドを実行しましょう。注意点として、インストールするCuPyのライブラリはCUDAのバージョンによって異なります。先ほどの事前準備でインストールしたCUDAのバージョンにあったCuPyのライブラリを選択してインストールするようにしましょう。
>> pip install cupy-cuda90
>> pip install cupy-cuda92
>> pip install cupy-cuda100
>> pip install cupy-cuda101
>> pip install cupy-cuda102
>> pip install cupy-cuda110
>> pip install cupy-cuda111
>> pip install cupy-cuda112
CuPyの使い方
CuPyをインストールしたところで、さっそくCuPyを使ってみましょう。
まず、CuPyをimportして3*3の行列を用意します。
>>> X = cp.arange(9).reshape(3, 3).astype(‘f’)
>>> X
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]], dtype=float32)
次に、Xのaxis=1を指定して和を計算してみましょう。
array([ 3., 12., 21], dtype=float32)
最後に、XとXの行列積を求めてましょう。
array([[ 15., 18., 21.],
[ 42., 54., 66.],
[ 69., 90., 111.]], dtype=float32)
プログラムを確認すると、いずれもNumpyと同じインターフェースであることが分かりますよね。プログラムの”import cupy as cp”の代わりに”import numpy as np”を実行し、”cp”を”np”に置き換えれば、Numpyでの実行に変えられます。
Numpyを使ったことがある人は簡単にCuPyも使いこなすことができるでしょう。
CuPyを利用する上での注意点
最後にCuPyを利用する上での注意点をお伝えします。
CuPyはNumpyと互換性のあるインターフェースを用意しています。しかし、CuPyで定義した行列をNumpyに直接代入したり、Numpyで定義した行列をCuPyに直接代入することはできません。これは、CuPyのデータはGPUが管理しているメモリ上にあり、NumpyのデータはCPUが管理しているメモリ上にあるためです。
このため、CuPyで定義した行列をNumpyで使用するには以下のような変換が必要になります。
>>> Y = cp.asnumpy(X)
同様にNumpyの行列をCuPyで使用するには以下のような変換を行います。
機械学習プログラムを作成する際に、CuPyとNumpyのデータが混在する場合はデータの変換を行うようにしましょう。
さて、今回はCuPyでは何ができるのか、どうやって使えば良いかをできるだけわかりやすくご紹介しました。CuPyについてお伝えした内容は以下です。
- CuPyはGPU向けのPythonの汎用配列計算ライブラリ
- CuPyはNumpyと互換性のあるインターフェースを持っている
- CuPyはNumpyと同じ演算をより高速に実行可能
- CuPyを使用するにはGPUマシンにNVIDIA DriverとCUDAのインストールが必要
- CuPyのライブラリはCUDAのバージョンによって異なる
- CuPyで定義した行列をNumpyで使用したり、Numpyで定義した行列をCuPyで使用するには変換が必要
CuPyはPythonで機械学習プログラミングをするには非常に便利なライブラリです。Numpyとインターフェースがほとんど同じため、Numpyを使ったことがある人は簡単に使うことができます。GPUマシンを持っている人はCuPyを使ってみましょう。
【お知らせ】
当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。
御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。