CuPy
開発元 | Preferred Networks[1] |
---|---|
初版 | 2015年9月2日[2] |
最新版 | v13.4.1 / 2025年3月21日[3] |
リポジトリ | cupy - GitHub |
プログラミング 言語 | Python, Cython, C++ |
プラットフォーム | NVIDIA GPU, AMD GPU |
種別 | 数値計算 |
ライセンス | MITライセンス |
公式サイト | cupy |
CuPyは、PythonでのGPUを使用した数値計算のためのオープンソースライブラリである。多次元配列、疎行列、それらを基盤としたさまざまな数値計算アルゴリズムに対応している[4]。CuPyはNumPyおよびSciPyと同じAPIセットを共有しており、NumPyやSciPyのコードをGPU上で実行するために置き換えて使用できる。CuPyはNVIDIA CUDAとAMDのROCmに対応している[5][6]。
CuPyは当初、ディープラーニングフレームワークのChainerのバックエンドとして開発され、2017年に独立したプロジェクトとなった[7]。
例
[編集]配列作成
[編集]>>> import cupy as cp >>> x = cp.array([1, 2, 3]) >>> x array([1, 2, 3]) >>> y = cp.arange(10) >>> y array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
基本的操作
[編集]>>> import cupy as cp >>> x = cp.arange(12).reshape(3, 4).astype(cp.float32) >>> x array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], dtype=float32) >>> x.sum(axis=1) array([ 6., 22., 38.], dtype=float32)
生の CUDA C++ カーネル
[編集]import cupy as cp multiply_elementwise = cp.RawKernel(r''' extern "C" __global__ void multiply_elementwise(const float A[4][4], const float B[4][4], float C[4][4]) { int y = threadIdx.y + blockIdx.y * blockDim.y; int x = threadIdx.x + blockIdx.x * blockDim.x; C[y][x] = A[y][x] * B[y][x]; } ''', 'multiply_elementwise') A = cp.arange(4 * 4, dtype=cp.float32).reshape(4, 4) B = A C = cp.zeros(A.shape, dtype=cp.float32) multiply_elementwise((1, 1), A.shape, (A, B, C)) # ブロック数, ブロックあたりのスレッド数, 引数 print(C) # C = A * B
上記の例はCUDAカーネルのC++の部分をPythonで書くことも出来る。
from cupyx import jit @jit.rawkernel() def multiply_elementwise(A, B, C): y, x = jit.grid(2) C[y, x] = A[y, x] * B[y, x]
関連項目
[編集]出典
[編集]- ^ “cupy/LICENSE at main · cupy/cupy”. 2025年3月8日閲覧。
- ^ “Release v1.3.0 – chainer/chainer”. 2025年3月8日閲覧。
- ^ “Releases · cupy/cupy”. 2025年3月22日閲覧。
- ^ Okuta, Ryosuke; Unno, Yuya; Nishino, Daisuke; Hido, Shohei; Loomis, Crissman (2017). CuPy: A NumPy-Compatible Library for NVIDIA GPU Calculations (PDF). Proceedings of Workshop on Machine Learning Systems (LearningSys) in The Thirty-first Annual Conference on Neural Information Processing Systems (NIPS).
- ^ “CuPy 9.0 Brings AMD GPU Support To This Numpy-Compatible Library - Phoronix”. Phoronix (2021年4月29日). 2022年6月21日閲覧。
- ^ “AMD Leads High Performance Computing Towards Exascale and Beyond” (2021年6月28日). 2022年6月21日閲覧。 “Most recently, CuPy, an open-source array library with Python, has expanded its traditional GPU support with the introduction of version 9.0 that now offers support for the ROCm stack for GPU-accelerated computing.”
- ^ “Preferred Networks released Version 2 of Chainer, an Open Source framework for Deep Learning - Preferred Networks, Inc.” (2017年6月2日). 2022年6月18日閲覧。