| 原作者 | 徳井誠也 |
|---|---|
| 開発者 | 株式会社Preferred Networks コミュニティ |
| 初回リリース | 2015年9月2日. [1] |
| 安定版リリース | v13.3.0 [2]
/ 2024年8月22日[2] |
| リポジトリ | github.com/cupy/cupy |
| 書かれた | Python、Cython、CUDA |
| オペレーティング·システム | Linux、Windows |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 数値解析 |
| ライセンス | マサチューセッツ工科大学 |
| Webサイト | カップイ |
CuPyは、 Pythonプログラミング言語を使用したGPUアクセラレーションコンピューティング用のオープンソースライブラリであり、多次元配列、スパース行列、およびそれらの上に実装されたさまざまな数値アルゴリズムをサポートしています。[3] CuPyはNumPyおよびSciPy と同じAPIセットを共有しているため、NumPy / SciPyコードをGPUで実行するための代替品として使用できます。CuPyは、 Nvidia CUDA GPUプラットフォームと、 v9.0以降のAMD ROCm GPUプラットフォームをサポートしています。[4] [5]
CuPyは当初Chainerディープラーニングフレームワークのバックエンドとして開発され、その後2017年に独立したプロジェクトとして設立されました。[6]
CuPyはNumPyエコシステム配列ライブラリ[7]の一部であり、PythonでGPUを利用するために広く採用されており[8]、特にSummit、[9]、 Perlmutter、[10]、 EULER、[11]、ABCIなどの高性能コンピューティング環境で採用されています。[12]
CuPyはNumFOCUSがスポンサーとなっているプロジェクトです。[13]
特徴
CuPyはNumPy/SciPy互換のAPIを実装しているほか、ユーザー定義のGPUカーネルを記述したり低レベルAPIにアクセスしたりする機能も備えている。[14] [15]
NumPy互換API
NumPy パッケージ ( ) で定義されているものと同じ API セットが、パッケージnumpy.*で使用できますcupy.*。
SciPy互換API
SciPy パッケージ ( ) で定義されている同じ API セットが、パッケージscipy.*で使用できますcupyx.scipy.*。
cupyx.scipy.sparse.*_matrixCSR、COO、CSC、DIA形式の疎行列( )- 離散フーリエ変換
- 高度な線形代数
- 多次元画像処理
- スパース線形代数
- 特殊機能
- 信号処理
- 統計関数
ユーザー定義の GPU カーネル
- 要素ごとの演算と削減演算のためのカーネルテンプレート
- 生のカーネル (CUDA C/C++)
- ジャストインタイムトランスパイラ (JIT)
- カーネル融合
分散コンピューティング
- 分散通信パッケージ(
cupyx.distributed)は、集合的およびピアツーピアのプリミティブを提供します
低レベルCUDA機能
- ストリームとイベント
- メモリプール
- プロファイラー
- ホストAPIバインディング
- CUDA Pythonサポート[16]
相互運用性
- DLPack [17]
- CUDA配列インターフェース[18]
- NEP13(
__array_ufunc__)[19] - ネップ18(
__array_function__)[20] [21] - 配列API標準[22] [23]
例
配列の作成
>>> cupy をcpとしてインポートします >>> x = cp . array ([ 1 , 2 , 3 ]) >>> x配列([ 1 , 2 , 3 ]) >>> y = cp . arange ( 10 ) >>> y配列([ 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
配列([[ 0. , 1. , 2. , 3. ],
[ 4. , 5. , 6. , 7. ],
[ 8. , 9. , 10. , 11. ]], dtype = float32 )
>>> x . sum ( axis = 1 )
配列([ 6. , 22. , 38. ], dtype = float32 )
生のCUDA C/C++カーネル
>>> cupy をcpとしてインポートします >>> kern = cp . RawKernel ( r ''' ... extern "C" __global__ ... void multiply_elemwise(const float* in1, const float* in2, float* out) { ... int tid = blockDim.x * blockIdx.x + threadIdx.x; ... out[tid] = in1[tid] * in2[tid]; ... } ... ''' 、'multiply_elemwise' ) >>> in1 = cp . arange ( 16 、dtype = cp . float32 ) . reshape ( 4 、4 ) >>> in2 = cp . arange ( 16 、dtype = cp . float32 ) . reshape ( 4 、4 ) >>> out = cp . zeros (( 4 , 4 ), dtype = cp . float32 ) >>> kern (( 4 ,), ( 4 ,), ( in1 , in2 , out )) # グリッド、ブロック、引数>>> out array ([[ 0. , 1. , 4. , 9. ], [ 16. , 25. , 36. , 49. ], [ 64. , 81. , 100. , 121. ], [ 144. , 169. , 196. , 225. ]], dtype = float32 )
アプリケーション
- スパシー[24] [25]
- XGBoost [26]
- ターボSETI (バークレーSETI ) [27]
- NVIDIA ラピッド[28] [29] [30] [31]
- エイノプス[32] [33]
- サイキットラーン[34]
- モナイ
- チェイナー[35]
参照
参考文献
- ^ 「リリース v1.3.0 – chainer/chainer」 。 2022年6月25日閲覧– GitHub経由。
- ^ ab "リリース – cupy/cupy" 。2024年9月8日閲覧 – GitHub経由。
- ^ 奥田 良介; 海野 雄也; 西野 大輔; 檜戸 翔平; Loomis, Crissman (2017). CuPy: NVIDIA GPU 計算用の NumPy 互換ライブラリ(PDF)。第 31 回神経情報処理システム会議 (NIPS) における機械学習システム (LearningSys) ワークショップの議事録。
- ^ 「CuPy 9.0 で Numpy 互換ライブラリに AMD GPU サポートが追加 - Phoronix」。Phoronix 2021年 4 月 29 日。2022年6 月 21 日閲覧。
- ^ 「AMD、エクサスケールとその先へ向けて高性能コンピューティングをリード」。2021年6月28日。2022年6月21日閲覧。
最近では、Pythonを使用したオープンソースの配列ライブラリであるCuPyが、バージョン9.0の導入により従来のGPUサポートを拡張し、GPUアクセラレーションコンピューティング用のROCmスタックのサポートを提供するようになりました。
- ^ 「Preferred Networks、ディープラーニング向けオープンソースフレームワークChainerのバージョン2をリリース - Preferred Networks, Inc.」2017年6月2日。 2022年6月18日閲覧。
- ^ “NumPy”. numpy.org . 2022年6月21日閲覧。
- ^ Gorelick, Micha; Ozsvald, Ian (2020年4月)。High Performance Python: 人間のための実用的な高性能プログラミング(第2版)。O'Reilly Media, Inc. p. 190。ISBN 9781492055020。
- ^ Oak Ridge Leadership Computing Facility . 「CuPyのインストール」. OLCFユーザードキュメント. 2022年6月21日閲覧。
- ^ 国立エネルギー研究科学計算センター。「Perlmutter での Python の使用」。NERSC ドキュメント。2022年6 月 21 日閲覧。
- ^ ETH Zurich . 「CuPy」. ScientificComputing . 2022年6月21日閲覧。
- ^ 国立研究開発法人産業技術総合研究所. 「Chainer」. ABCI 2.0 ユーザーガイド. 2022年6月21日閲覧。
- ^ 「スポンサープロジェクト - NumFOCUS」 。 2024年9月8日閲覧。
- ^ 「概要」。CuPyドキュメント。2022年6 月 18 日閲覧。
- ^ 「比較表」。CuPyドキュメント。2022年6 月 18 日閲覧。
- ^ 「CUDA Python | NVIDIA Developer」 。 2022年6月21日閲覧。
- ^ 「DLPack のドキュメントへようこそ!」DLPack 0.6.0 ドキュメント. 2022 年6 月 21 日閲覧。
- ^ 「CUDA Array Interface (バージョン 3)」。Numba 0.55.2+0.g2298ad618.dirty-py3.7-linux-x86_64.egg ドキュメント。2022年6 月 21 日閲覧。
- ^ 「NEP 13 — Ufuncs をオーバーライドするためのメカニズム — NumPy 機能強化提案」. numpy.org . 2022 年6 月 21 日閲覧。
- ^ 「NEP 18 — NumPy の高レベル配列関数のディスパッチメカニズム — NumPy 機能強化提案」. numpy.org . 2022 年6 月 21 日閲覧。
- ^ Charles R Harris; K. Jarrod Millman; Stéfan J. van der Walt; et al. (2020年9月16日). 「NumPyによる配列プログラミング」(PDF) . Nature . 585 (7825): 357– 362. arXiv : 2006.10256 . doi :10.1038/S41586-020-2649-2. ISSN 1476-4687. PMC 7759461. PMID 32939066. Wikidata Q99413970 .
- ^ 「2021 レポート - Python Data APIs Consortium」(PDF) 。2022年6 月 21 日閲覧。
- ^ 「目的と範囲」。Python配列 API 標準 2021.12 ドキュメント。2022年6 月 21 日閲覧。
- ^ 「spaCyをインストールする」。spaCy使用方法ドキュメント。 2022年6月21日閲覧。
- ^ パテル、アンカー A.;アラサニパライ、アジェイ・ウピリ(2021年5月)。企業における応用自然言語処理(第 1 版)。オライリー・メディア社、p. 68.ISBN 9781492062578。
- ^ 「Python パッケージの紹介」。xgboost 1.6.1 ドキュメント。2022年6 月 21 日閲覧。
- ^ 「UCBerkeleySETI/turbo_seti: turboSETI -- python ベースの SETI 検索アルゴリズム」。GitHub。2022年6月 21 日閲覧。
- ^ 「Open GPU Data Science | RAPIDS」 。 2022年6月21日閲覧。
- ^ 「API Docs」。RAPIDS Docs 。 2022年6月21日閲覧。
- ^ 「CuPyとRAPIDS間の効率的なデータ共有」 。 2022年6月21日閲覧。
- ^ 「10 Minutes to cuDF and CuPy」 。 2022年6月21日閲覧。
- ^ Alex, Rogozhnikov (2022). Einops: アインシュタインのような表記法による明確で信頼性の高いテンソル操作。国際学習表現会議。
- ^ 「arogozhnikov/einops: ディープラーニング操作の再発明 (pytorch、tensorflow、jax など向け)」。GitHub。2022年6 月 21 日閲覧。
- ^ 「Array API サポート (実験的) — scikit-learn ドキュメント」 。2024年9 月 8 日閲覧。
- ^ 徳井誠也; 奥田良介; 秋葉拓也; 新谷雄介; 小川徹; 斉藤俊太; 鈴木修司; 上西孝太; フォーゲルブライアン; ヴィンセント山崎博之 (2019). Chainer: 研究サイクルを加速するディープラーニングフレームワーク。第25回ACM SIGKDD国際知識発見・データマイニング会議論文集。doi :10.1145 / 3292500.3330756.
外部リンク
- 公式サイト
- GitHubの cupy
