WSL Python – PyCUDA で GPU プログラミング

WSL Ubuntu 22.04 にて、PyCUDA を利用して GPGPU のプログラミングを始めるための手順です。

目次

動作環境

  • Windows 11
  • WSL Ubuntu-22.04
  • GeForce RTX 2080
  • CUDA Toolkit 11.5
  • python 3.10.6

事前準備

事前にいくつかインストールが必要なものがあります。

パッケージのアップデート

最初に各種パッケージをアップデートしておきましょう。

$ sudo apt update
$ sudo apt upgrade

CUDA Toolkit

次に CUDA の Toolkit をインストールします。
これを入れておかないと、PyCUDA のインストール時に cuda.h が見つからない旨のエラーが発生します。

$ sudo apt install nvidia-cuda-toolkit

Ubuntu リポジトリではなく NVIDIA 公式の最新版が利用したい場合は、こちらの記事の「手順②」を参照です。

Python パッケージ

Python パッケージをインストールするために python3-pip をインストールします。
WSL Ubuntu には python3 は標準でインストールされていますが、pip は初期状態では含まれていません。

$ sudo apt install python3-pip

pip3 のインストールができたら PyCUDA をインストールします。

$ pip install PyCUDA

ホスト ⇔ デバイスの値やり取りで numpy を利用しますので、これもインストールします。

$ pip install numpy

サンプルコードの実行

準備できたらサンプルコードを実行します。

まず長さ 10 の配列を生成し、これを変数 a に代入します。
a の各要素を GPU 上で2倍して結果を変数 dest に還元します。

import numpy
import pycuda.autoinit
import pycuda.compiler
import pycuda.driver

cuda_code = """\
__global__ void double_vector(float *dest, float *a)
{
    const size_t i = threadIdx.x;
    dest[i] = 2.0 * a[i];
}
"""

module = pycuda.compiler.SourceModule(cuda_code)
double_vector = module.get_function("double_vector")

a = numpy.random.randn(10).astype(numpy.float32)
dest = numpy.zeros_like(a)

double_vector(
    pycuda.driver.Out(dest),
    pycuda.driver.In(a),
    block=(10, 1, 1),
    grid=(1, 1),
)

print(a)
print(dest)
print(dest - 2 * a)
$ python3 main.py
[-1.5093826   0.52391213  0.9156451  -0.00940417 -0.329973    0.0300478
 -0.09845538 -1.6441196  -0.17152502  0.34115353]
[-3.0187652   1.0478243   1.8312902  -0.01880833 -0.659946    0.0600956
 -0.19691077 -3.2882392  -0.34305003  0.68230706]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次