| CuPy | |
|---|---|
| 原作者 | 徳井誠也 |
| 開発者 | 株式会社Preferred Networks コミュニティ |
| 初回リリース | 2015年9月2日[ 1 ] ( 2015-09-02 ) |
| 安定版リリース | |
| リポジトリ | github.com /cupy /cupy |
| で記述 | Python、Cython、CUDA |
| オペレーティングシステム | Linux、Windows |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 数値解析 |
| ライセンス | MIT |
| ウェブサイト | cupy.dev |
CuPyは、 Pythonプログラミング言語を使用したGPUアクセラレーションコンピューティング用のオープンソースライブラリです。多次元配列、疎行列、そしてそれらに基づいて実装された様々な数値アルゴリズムをサポートしています。[ 3 ] CuPyはNumPyおよびSciPy と同じAPIセットを共有しているため、GPU上でNumPy/SciPyコードを実行するための代替品として使用できます。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.*
ユーザー定義のGPUカーネル
- 要素単位およびリダクション演算用のカーネルテンプレート
- 生のカーネル (CUDA C/C++)
- ジャストインタイムトランスパイラ(JIT)
- カーネル融合
分散コンピューティング
- 分散通信パッケージ(
cupyx.distributed)は、集合的およびピアツーピアのプリミティブを提供します
低レベルCUDA機能
- ストリームとイベント
- メモリプール
- プロファイラー
- ホストAPIバインディング
- CUDA Pythonサポート[ 16 ]
相互運用性
- DLPack [ 17 ]
- CUDAアレイインターフェース[ 18 ]
- NEP13(
__array_ufunc__)[ 19 ] - NEP 18(
__array_function__)[ 20 ] [ 21 ] - 配列API標準[ 22 ] [ 23 ]
例
配列の作成
>>> 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配列([[ 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 )アプリケーション
- spaCy [ 24 ] [ 25 ]
- XGBoost [ 26 ]
- ターボSETI (バークレーSETI ) [ 27 ]
- NVIDIA RAPIDS [ 28 ] [ 29 ] [ 30 ] [ 31 ]
- エイノプス[ 32 ] [ 33 ]
- サイキットラーン[ 34 ]
- モナイ
- チェイナー[ 35 ]
参照
参考文献
- ^ 「リリース v1.3.0 – chainer/chainer」 . 2022年6月25日閲覧– GitHub経由。
- ^ a b「リリース – cupy/cupy」。2025年11月13日閲覧– GitHub経由。
- ^奥田 良介; 海野 雄也; 西野 大輔; 檜戸 翔平; ルーミス クリスマン (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日閲覧。
- ^ゴレリック、ミカ、オズヴァルド、イアン(2020年4月)。『ハイパフォーマンスPython:人間のための実践的高性能プログラミング』(第2版)。オライリー・メディア社、190ページ。ISBN 9781492055020。
- ^オークリッジ・リーダーシップ・コンピューティング・ファシリティ。「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アレイインターフェース(バージョン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: Deep learning operations reinvented (for pytorch, tensorflow, jax and others)" . GitHub . 2022年6月21日閲覧。
- ^ 「Array APIサポート(実験的)— scikit-learnドキュメント」 。 2024年9月8日閲覧。
- ^徳井誠也; 奥田良介; 秋葉拓也; 新谷雄介; 小川徹; 齋藤俊太; 鈴木修二; 上西幸太; ブライアン・フォーゲル; 山崎ヴィンセント博之 (2019). Chainer: 研究サイクルを加速するディープラーニングフレームワーク. 第25回ACM SIGKDD国際知識発見・データマイニング会議論文集. doi : 10.1145/3292500.3330756 .