PyCUDAのインストール【Python on Windows】

PyCUDAのインストール【Python on Windows】 プログラミング

プログラマーのみなさん、GPUを有効活用していますか?
ゲームするだけで、普段はGPUを遊ばしていませんか?

実は、私はGPUを無駄に遊ばしていました。
その反省から、機械学習でGPUを利用するようにはなりました。
具体的には、TensorFlowをGPUで動かすということです。

しかし、毎回機械学習をするわけではありません。
それ以外のプログラミングも行います。

そのような場合にもGPUを使ってやろうと思いませんか?
是非、使いましょう。

PythonでGPUを利用するには、PyCUDAが必要となります。
この記事では、PyCUDAに関して解説していきます。

本記事の内容

  • PyCUDAとは?
  • PyCUDAのシステム要件
  • PyCUDAのインストール
  • PyCUDAの動作確認

それでは、上記に沿って解説していきます。

PyCUDAとは?

PyCUDAは、CUDAのPythonバインディングです。

と言われても、「CUDAとはなに?」ということでしょう。

CUDAは、NVIDIA製GPU向けの統合開発環境のことです。
CUDAには、NVIDIA製GPUを利用するためのAPIが用意されています。

そして、このCUDAはC/C++での利用が基本となっています。
そのため、Pythonは直接にCUDAを利用できません。

そこで、PyCUDAの出番です。
PyCUDAは、PythonとCUDAの間に入って、PythonからCUDAを利用でるようにしてくれています。

ただし、間接的にですけどね。
そうは言っても、CUDAを利用するメリットは計り知れません。

それに、PythonからPyCUDAによりCUDAを利用する方が便利です。
PyCUDAがしっかりと作りこまれているということなのでしょう。

PyCUDAに関して、おおよその理解ができました。
次は、PyCUDAのシステム要件を確認しましょう。

PyCUDAのシステム要件

現在公開されている最新バージョンは、2020.1となります。
2020年の10月にリリースされています。

PyCUDAのシステム要件は、以下。

  • GPU
  • CUDA
  • Microsoft Visual C++
  • Sixライブラリ

Pythonのバージョンに関しては、厳密にはないようです。
基本的には、上記を満たせばOKなのでしょう。

それぞれ説明していきます。

GPU

何よりも、まずはGPUを搭載していることです。
手っ取り早い確認方法を説明します。

ここに「dxdiag」と入力して、Enterを押します。
すると、DirectX 診断ツールが立ち上がります。

「ディスプレイ」タブを選択します。

デバイスの「名前」を確認します。
「NVIDIA GeForce」と記載されていれば、まずGPUが搭載されています。
それ以外では、「NVIDIA Quadro」と記載されていれば、GPUであることは間違いないでしょう。

CUDA

さて、本来であればシステム要件がさらに詳細があります。
しかし、それを一つづつ確認することにそれほど意味がありません。

一つのコマンドが動けば、すべて解決です。
その前提として、CUDAはインストールしておいてください。

CUDAのインストールに関しては、この記事では取り上げません。
利用しているGPUや各自の環境によって、インストールするモノが異なります。

では、一つのコマンドに話を戻しましょう。
それは以下。

>nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:12:52_Pacific_Daylight_Time_2019
Cuda compilation tools, release 10.1, V10.1.243

コマンドプロンプトで上記コマンドを実行してください。
上記のように表記されれば、CUDAがインストール済みであることが保証されています。

Microsoft Visual C++

PyCUDAは、内部でCUDAを利用しています。
そして、PyCUDAではCUDAのAPIにアクセスするためにC++を利用しています。

そうすると、PyCUDAのインストールの際にC++をコンパイルする必要が出てきます。
そのために、Microsoft Visual C++が必須となっています。

Microsoft Visual C++に関しては、以下の記事で解説しています。
インストール方法の記載もあります。

インストールがまだの方は、上記の記事を参考にしてください。

Sixライブラリ

PyCUDAでは、 Python 2と3の互換性が必要となっています。
そのため、Python 2とPython 3の間の違いを吸収するSixが必須です。

インストールしていないなら、Sixライブラリのインストールが必要です。

pip install six

PyCUDAのインストール

最初に、現状のインストール済みパッケージを確認しておきます。

>pip list
Package    Version
---------- -------
pip        20.3.3
setuptools 51.1.1
six        1.15.0

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip

では、PyCUDAのインストールです。
PyCUDAのインストールは、以下のコマンドで行います。

pip install pycuda

上記コマンドを実行して、以下のエラーが出るかもしれません。

error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

この場合は、Microsoft Visual C++の最新バージョンをインストールしてください。
インストールは上記で案内した記事が、参考になります。

インストールが完了したら、パッケージの確認をしましょう。

>pip list
Package    Version
---------- --------
appdirs    1.4.4
decorator  4.4.2
Mako       1.1.3
MarkupSafe 1.1.1
numpy      1.19.5
pip        20.3.3
pycuda     2020.1
pytools    2020.4.4
six        1.15.0

結構いろんなモノに依存していることがわかります。
最後に、PyCUDAの動作確認をしておきましょう。

PyCUDAの動作確認

以下のプログラムで動作を確認できます。

# GPUにデータを転送するプログラム

# PyCudaのインポート
import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule
# numpy配列用
import numpy

# 4x4の乱数のnumpy配列を作成
a = numpy.random.randn(4,4)

# nVidiaデバイス(GPU)は単精度のみサポート→変換
a = a.astype(numpy.float32)

# GPU上に送信データ用のメモリを割り当てる
a_gpu = cuda.mem_alloc(a.nbytes)

# GPUにデータを転送
cuda.memcpy_htod(a_gpu, a)

プログラムの詳細は、コメントを見てください。
上記コードを実行してエラーがなければ、動作確認は成功と言えます。

しかし、これだけでは本当にGPUにデータを転送したのかどうかわかりません。
そこで、とても原始的な確認方法を記しておきます。

まず、タスクマネージャーを起動します。
そして、「パフォーマンス」タブを選択。

各デバイスの中から、「GPU」を選択します。
この状態でプログラムの下記を変更します。

#a = numpy.random.randn(4,4)
a = numpy.random.randn(10000,10000)

GPUに渡すデータ量を増やします。
コードを変更して、プログラムを実行すると使用率が大きく変動します。

私の環境では一瞬だけ100%になりました。

プログラムを2回実行した結果が、グラフに表れていますね。
なお、配列を大きくする際は、各自で調整(1000→5000と段階を踏むなど)してください。
負荷を与えすぎて、PCがおかしくなる可能性もありますので。

タイトルとURLをコピーしました