テクノロジー

汎用配列計算ライブラリCuPyのインストールから使い方まで【入門編】

汎用配列計算ライブラリCuPyのインストールから使い方まで【入門編】

Pythonで機械学習プログラミングをしているとよく耳にするCuPy(クパイ)。CuPyは何ができるの?どうやって使うの?こんな疑問感じたことありますよね。

CuPyはGPU向けのPythonの汎用配列計算ライブラリです。機械学習プログラミングをしようとしたときに、簡単にGPUを使って計算を行えるようになります。GPUを使うことで、それまで時間がかかっていた機械学習を速く実行できるようになります。特に、深層学習(ディープラーニング)のプログラミングには非常に時間がかかるため、GPUの使用は必須となります。ぜひ、この記事でCuPyの使い方をマスターしましょう。

そこで今回は、CuPyでは何ができるのか、どうやって使えば良いかをできるだけわかりやすくご紹介します。それではまず、CuPyとは何かについての解説から始めましょう。

汎用配列計算ライブラリCuPyて何か

CuPyのイメージ
CuPyは、オープンソースの汎用配列計算ライブラリです。もともとPreferred Networks社が開発していた深層学習(ディープラーニング)向けのライブラリはChainer(チェイナー)が使用されていましたが、2017年にCuPy はChainerから分離して独立したライブラリとして開発が行われるようになりました。なお、Chainerは2019年に開発が終了して現在はメンテナンスのみされています。

CuPyはPythonの数値計算ライブラリであるNumpyと互換性のあるインターフェースを持っています。Pythonを使って行列計算などを行う場合、Numpyを使用してCPUで行列の演算処理が行われます。一方、CuPyを使用するとGPUを使用して行列演算処理が行わるので、CPUだけを使用するNumpyに比べて高速に実行できます。

ディープラーニングをはじめとした機械学習プログラミングでは、行列演算を実行することが多いです。CuPyの使い方を習得して、GPUマシンで高速実行できるようになりましょう。

何ができるのか

CuPyでできることのイメージ
続いてCuPyでは何ができるのかを見ていきましょう。

CuPyは、数値計算ライブラリのNumpyと互換性のあるインターフェースを持っています。このため、Numpyで実行できることのほとんどはCuPyでも実行が可能です。Numpyでは多次元配列をndarrayというデータ構造で扱います。CuPyでも同様にndarrayを扱え、Numpyで実行可能な多次元配列の操作も同様に行えます。

CuPyは、cuBLAS(GPUを使用した行列演算用ライブラリ)、 cuDNN(GPUを使用した深層学習ライブラリ)、 cuRand(GPUを使用した乱数生成ライブラリ)、 cuSolver(GPUを使用した線形代数演算ライブラリ)、 cuSPARSE(GPUを使用した疎行列計算ライブラリ)、cuFFT(GPUを使用したフーリエ変換ライブラリ)といったGPUを使用した演算ライブラリを使用して多次元配列の操作を行います。多次元配列とは配列そのものを要素に持つ配列のこと。また、CuPyは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ダウンロードサイトのインストラクションを参照しましょう。

なお、CuPyを使う場合、CUDAのバージョンは9.2以上が必要です。

また、先ほど説明したcuBLAS、cuDNN、cuRand、cuSolver、cuSPARSE、cuFFTといったライブラリはCUDAを用いて動作をしています。

最後に、CuPyを実行するためのPythonの環境を構築しましょう。PythonのディストリビューションであるAnacondaなどをインストールすると良いでしょう。こちらもインストール方法はOSによって異なるため、Anaconda公式サイトのインストラクションを参照してください。

CuPyをインストールする

インストールのイメージ
CuPyを導入する準備が整ったところで、CuPyのインストールに移りましょう。

CuPyをインストールするには、pipコマンドを使用します。Pythonのターミナルを起動してpipコマンドを実行しましょう。注意点として、インストールするCuPyのライブラリはCUDAのバージョンによって異なります。先ほどの事前準備でインストールしたCUDAのバージョンにあったCuPyのライブラリを選択してインストールするようにしましょう。

# For CUDA 9.0
>> pip install cupy-cuda90
# For CUDA 9.2
>> pip install cupy-cuda92
# For CUDA 10.0
>> pip install cupy-cuda100
# For CUDA 10.1
>> pip install cupy-cuda101
# For CUDA 10.2
>> pip install cupy-cuda102
# For CUDA 11.0
>> pip install cupy-cuda110
# For CUDA 11.1
>> pip install cupy-cuda111
# For CUDA 11.2
>> pip install cupy-cuda112

CuPyの使い方

使い方のイメージ
CuPyをインストールしたところで、さっそくCuPyを使ってみましょう。

まず、CuPyをimportして3*3の行列を用意します。

>>> import cupy as cp
>>> 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を指定して和を計算してみましょう。

>>> X.sum(axis=1)
array([ 3., 12., 21], dtype=float32)

最後に、XとXの行列積を求めてましょう。

>>> cp.dot(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で使用するには以下のような変換が必要になります。

>>> X = cp.arange(9).reshape(3, 3).astype(‘f’)
>>> Y = cp.asnumpy(X)

同様にNumpyの行列をCuPyで使用するには以下のような変換を行います。

>>> Z = cp.asarray(Y)

機械学習プログラムを作成する際に、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(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました