CuPy

CuPy
原作者徳井誠也
開発者株式会社Preferred Networks コミュニティ
初回リリース2015年9月2日[ 1 ] ( 2015-09-02 )
安定版リリース
v13.6.0 [ 2 ] / 2025年8月18日[ 2 ] ( 2025-08-18 )
リポジトリgithub.com /cupy /cupy
で記述PythonCythonCUDA
オペレーティングシステム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 ]

相互運用性

配列の作成

>>> 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 )

アプリケーション

参照

参考文献

  1. ^ 「リリース v1.3.0 – chainer/chainer」 . 2022年6月25日閲覧GitHub経由。
  2. ^ a b「リリース – cupy/cupy」2025年11月13日閲覧– GitHub経由。
  3. ^奥田 良介; 海野 雄也; 西野 大輔; 檜戸 翔平; ルーミス クリスマン (2017). CuPy: NVIDIA GPU 計算のための NumPy 互換ライブラリ(PDF) . 第31回神経情報処理システム会議 (NIPS) における機械学習システムワークショップ (LearningSys) の議事録.
  4. ^ 「CuPy 9.0、Numpy互換ライブラリにAMD GPUサポートを追加 - Phoronix」 . Phoronix . 2021年4月29日. 2022年6月21日閲覧
  5. ^ 「AMD、エクサスケールとその先へ高性能コンピューティングをリード」。2021年6月28日2022年6月21日閲覧。最近では、Pythonを使用したオープンソースのアレイライブラリであるCuPyが、バージョン9.0の導入により従来のGPUサポートを拡張し、GPUアクセラレーションコンピューティング用のROCmスタックをサポートするようになりました。
  6. ^ 「Preferred Networks、ディープラーニング向けオープンソースフレームワークChainerのバージョン2をリリース - Preferred Networks, Inc.」 2017年6月2日. 2022年6月18日閲覧
  7. ^ "NumPy" . numpy.org . 2022年6月21日閲覧
  8. ^ゴレリック、ミカ、オズヴァルド、イアン(2020年4月)。『ハイパフォーマンスPython:人間のための実践的高性能プログラミング』(第2版)。オライリー・メディア社、190ページ。ISBN 9781492055020
  9. ^オークリッジ・リーダーシップ・コンピューティング・ファシリティ「CuPyのインストール」。OLCFユーザ​​ードキュメント。 2022年6月21日閲覧
  10. ^国立エネルギー研究科学計算センター. 「PerlmutterでのPythonの使用」 . NERSCドキュメント. 2022年6月21日閲覧
  11. ^ ETH Zurich . 「CuPy」 . ScientificComputing . 2022年6月21日閲覧
  12. ^国立研究開発法人産業技術総合研究所. 「Chainer」 . ABCI 2.0 ユーザーガイド. 2022年6月21日閲覧
  13. ^ 「スポンサープロジェクト - NumFOCUS」 。 2024年9月8日閲覧
  14. ^ 「概要」 . CuPyドキュメント. 2022年6月18日閲覧
  15. ^ 「比較表」 . CuPyドキュメント. 2022年6月18日閲覧
  16. ^ 「CUDA Python | NVIDIA Developer」 。 2022年6月21日閲覧
  17. ^ 「DLPackのドキュメントへようこそ!」 DLPack 0.6.0ドキュメント。 2022年6月21日閲覧
  18. ^ 「CUDAアレイインターフェース(バージョン3)」Numba 0.55.2+0.g2298ad618.dirty-py3.7-linux-x86_64.eggドキュメント2022年6月21日閲覧。
  19. ^ 「NEP 13 — Ufuncsをオーバーライドするためのメカニズム — NumPy機能強化提案」 . numpy.org . 2022年6月21日閲覧
  20. ^ 「NEP 18 — NumPyの高レベル配列関数のディスパッチメカニズム — NumPy機能強化提案」 . numpy.org . 2022年6月21日閲覧
  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 .    
  22. ^ 「2021 レポート - Python Data APIs Consortium」(PDF) . 2022年6月21日閲覧
  23. ^ 「目的と範囲」。Python配列API標準2021.12ドキュメント。 2022年6月21日閲覧
  24. ^ 「spaCyをインストールする」 . spaCy使用方法ドキュメント. 2022年6月21日閲覧。
  25. ^パテル、アンカー A.;アラサニパライ、アジェイ・ウピリ(2021年5月)。企業における応用自然言語処理(第 1 版)。オライリー・メディア社、p. 68.ISBN 9781492062578
  26. ^ 「Pythonパッケージの紹介」。xgboost 1.6.1ドキュメント2022年6月21日閲覧
  27. ^ 「UCBerkeleySETI/turbo_seti: turboSETI -- PythonベースのSETI検索アルゴリズム」 . GitHub . 2022年6月21日閲覧
  28. ^ 「Open GPU Data Science | RAPIDS」 。 2022年6月21日閲覧
  29. ^ 「API Docs」 . RAPIDS Docs . 2022年6月21日閲覧
  30. ^ 「CuPyとRAPIDS間の効率的なデータ共有」 。 2022年6月21日閲覧
  31. ^ 「10 Minutes to cuDF and CuPy」 。 2022年6月21日閲覧
  32. ^ Alex, Rogozhnikov (2022). Einops: アインシュタインのような表記法による明確で信頼性の高いテンソル操作. 国際表現学習会議.
  33. ^ "arogozhnikov/einops: Deep learning operations reinvented (for pytorch, tensorflow, jax and others)" . GitHub . 2022年6月21日閲覧
  34. ^ 「Array APIサポート(実験的)— scikit-learnドキュメント」 。 2024年9月8日閲覧
  35. ^徳井誠也; 奥田良介; 秋葉拓也; 新谷雄介; 小川徹; 齋藤俊太; 鈴木修二; 上西幸太; ブライアン・フォーゲル; 山崎ヴィンセント博之 (2019). Chainer: 研究サイクルを加速するディープラーニングフレームワーク. 第25回ACM SIGKDD国際知識発見・データマイニング会議論文集. doi : 10.1145/3292500.3330756 .