NVIDIA、ついにCUDAにネイティブPythonサポートを追加
(thenewstack.io)- 長年にわたりC/C++中心だったNVIDIAのCUDAツールキットに、2024年のGTCでネイティブPythonサポートが正式に追加された
- これにより、PythonだけでGPU上で直接、アルゴリズム中心の高速演算を実行できるようになった
- CUDAアーキテクトのStephen Jones氏は、「Python CUDAは単にCコードをPython構文に移したものではなく、
Python開発者にとって自然な形で新たに設計されたものだ」と説明した
ネイティブPythonサポートが開く新たな可能性
- 従来のCUDA利用者はC++やFortranを知っている必要があったが、今ではPythonだけでも高性能なGPU演算が可能
- 2024年のGitHubオープンソース調査によると、PythonはJavaScriptを抜いて最も人気のある言語に浮上
- CUDA利用者数は2020年の200万人から2023年には400万人へ増加した一方、
Python開発者は数千万人規模であり、特にインドやブラジルなどの新興国の開発者にとって大きな追い風 - これにより、グローバルGPUインフラの拡大にも好影響が期待される
Pythonic CUDAの構成
- CUDAはライブラリ、SDK、コンパイラ、ランタイム、ツール、アルゴリズムなどで構成される
- Python統合は単にカーネルを提供するだけでなく、スタック全体をPythonフレンドリーに構成
- 中核となる方式は、JIT(Just-In-Time)コンパイルベースで、コンパイラ依存を最小化
主な構成要素
- cuPyNumeric: NumPyと同じAPIを提供しつつ、GPUアクセラレーションをサポートするPythonライブラリ
- CUDA Core: CUDAランタイムをPython流に再設計した実行フローベースのシステム
- NVMath Python: ホスト/デバイスライブラリ呼び出しのための統合インターフェースを提供
- 高性能C++ライブラリと直接連携できるPython APIを構成
- パフォーマンス分析およびコード解析ツールも併せて提供
「既存の高性能C++コードと直接つながっているため、性能低下はほとんどない」 — Stephen Jones
新しいプログラミングモデル: CuTile
- Python開発者向けに設計された高水準の配列中心モデル
- 従来のCUDAがスレッドベースの細かな制御を要求していたのに対し、CuTileはタイル単位の抽象化によって簡潔で理解しやすい構造を提供
- CuTileは配列をGPUタイル単位にマッピングすることで、デバッグや最適化を容易にしつつ、性能はそのまま維持
- 今後はC++ CUDAにも拡張予定
「コンパイラはGPU構造をよりよく理解できるため、性能最適化も自動的にうまく行われる」
まとめ
- CUDAのネイティブPython統合は、GPUプログラミングの参入障壁を大きく下げる変化
- 従来のような複雑な言語知識がなくても、PythonだけでGPU上のAI/科学計算が可能になる
- Python中心のAIエコシステム拡大とNVIDIA GPU活用に向けた新時代を開く決定的な転換点
3件のコメント
Cupy や pytorch のような既存の Cuda ラッパーより、さらに速いんでしょうか。Cupy や torch の利点は、numpy と API がほぼまったく同じなので、numpy で書いていたテストコードをあまり手間をかけずに移せたことでしたが、これはどうなのか使ってみないとですね。
Hacker Newsの意見
自分はGPUプログラマではないが、自分のような人でも簡単に使えそうだ。GPUとCPUを使う簡単なデモを作ってみた。結果は以下のとおり
なぜPythonがこうしたものの対象になるのか気になる。多くのプロジェクトがPythonサポートを追加しているのを見てきた。Pythonのコードベースは、他のものよりもさまざまなターゲット向けにコンパイルしやすいのだろうか
Pytorchがこれより前に大きな勢いを得ていてよかった。これで並列計算のための、真にプラットフォーム非依存な半標準が手に入った。NVIDIAに限定されない
CuTileは多くの点で、OpenAIのTritonの後継のように感じられる。タイル/ブロックレベルのプリミティブ機能やTileIRだけでなく、CuPyにおいて適切なSIMTプログラミングモデルも得られている。今年のGTCでも多くの人は注目していなかったようだ。とてもクールだ
JAXとどう比較されるのかとても気になる
これはすごい。AI分野でNVIDIAの代替としてAMD + ROCmを検討していた人は、もういなくなるだろう
Rustサポートが次だろうか? 現在、自分はデータ構造をカーネルとの間でバイト配列に手動で[デ]シリアライズしている。CUDAがC++で提供しているような、本当に共有されたデータ構造があるといいのだが
Pythonは本当にプログラミング言語のリングワ・フランカとして定着しつつある。FOSSルネサンスの中で採用が急増しており、私たちが持つ中で最も近い万能ツールだと思う
これはおそらく、より多くのものをより速く試し、その後より高速な言語に残すという、Pythonがこれまで一般に牽引してきた流れをさらに後押しするだろう。全体として素晴らしい動きだ。ぜひこれで遊んでみたい
CUDAはCとC++で生まれた。C++を拡張してCUDA Cと呼ぶ代わりに、実際にCUDAのC方言を実装してくれていたらよかったのに
最初の速度は本当ですか? あまりにも遅いのですが…