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 公式の最新版が利用したい場合は、こちらの記事の「手順②」を参照です。
WSL – CUDA 開発環境をインストールする | がりテック
Windows 11 の WSL に CUDA 開発環境をインストールする手順です。Ubuntu-22.04 のディストリビューションで試行した例です。 事前準備 Windows ご利用の GPU に応じて Win…
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.]
コメント