コンテンツにスキップ

Python 3.13 だと PyCUDA がインストールできなかった話

2024 年 12 月 19 日に Python 3.13 で PyCUDA をインストールしようとしたところ、エラーになりました。修正パッチの状況と、Python 3.12 以下へ切り替える回避策を紹介します。

PyCUDA とは

PyCUDAは、Python から Nvidia の CUDA 並列計算 API にアクセスするためのライブラリです。既存の CUDA API ラッパーと比較して、PyCUDA はいくつかの優れた特徴を持っています。

PyCUDA の主な特徴

主な特徴は次のとおりです。

  • 自動的なオブジェクトクリーンアップ (RAII): C++の RAII(Resource Acquisition Is Initialization)と同様の仕組みにより、メモリリークやクラッシュのない、より安全なコード記述を容易にする
    • オブジェクト間の依存関係も認識するため、たとえばコンテキスト内で割り当てたメモリが全て解放されるまで、PyCUDA はそのコンテキストを切り離さない
  • 簡便性: pycuda.driver.SourceModuleやpycuda.gpuarray.GPUArrayといった抽象化により、Nvidia の C ベースランタイムよりもさらに便利な CUDA プログラミングを実現
  • 完全性: 利用者が望めば CUDA ドライバ API の全機能を利用でき、OpenGL との相互運用機能も備えている
  • 自動エラーチェック: 全ての CUDA エラーが Python 例外として自動的に変換されるため、エラーの検出が容易
  • 高速性: C++で記述された基盤層により、上記の特徴がほとんどオーバーヘッドなしで実現される

要約すると、PyCUDA は安全で使いやすく、高速で完全な CUDA アクセスを提供する Python ライブラリといえます。

インストール時に発生したエラー

この記事を執筆している 2024/12/19 時点で、Python の安定版リリースの最新版は 3.13 です。3.13 の環境で PyCUDA のインストールを試みると、エラーが発生しました。Xpra の issue #4332で関連する問題が報告済みで、PyCUDA の開発元も 2024 年 10 月に修正パッチ(PyCUDA の PR #456)を取り込みましたが、まだリリースしていません。

回避策

次のリリースを待たずに PyCUDA を利用する場合は、Python のバージョンを 3.12 以下にして PyCUDA をインストールしてください。

uv を使ってインストールするには次のコマンドを実行します。

uv add pycuda

動作確認

インストール後に問題なく動作するか確認したい場合は、リポジトリ内のサンプルコードを使うとよいです。

まとめ

2024 年 12 月 19 日に試したところ、Python 3.13 の環境では PyCUDA をインストールできませんでした。修正パッチは取り込まれていましたが未リリースだったため、すぐに使うには Python 3.12 以下へ切り替える方法があります。バージョンが変われば状況も変わるため、この記事の結果は検証時点のものとして扱ってください。