web-dev-qa-db-ja.com

Python GPUプログラミング

現在、私はpythonでプロジェクトに取り組んでおり、いくつかの計算にGPUを使用したいと考えています。

一見すると、多くのツールが利用できるようです。一見すると、何かが欠けているように感じます。

カッパーヘッドは素晴らしいように見えますが、まだリリースされていません。低レベルのCUDAまたはopenCLカーネルの作成に限定されているように見えます。推力なし、cudppなし。 idで何かをソートしたい場合は、自分でそれを行う必要があります。

それは私にはまったく正しくないようです。私は確かに何かが欠けていますか?それとも、このGPUスクリプトはまだ誇大広告に対応していませんか?

編集:GPULIBは、私が必要としているもののようです。ドキュメンテーションは初歩的で、pythonバインディングはパスでのみ言及されていますが、今すぐダウンロードリンクを申し込んでいます。 GPUライブラリ?再編集:OK、pythonバインディングは実際には存在しません。

編集2:だから私の最善の策はC/CUDAで何かを書いてPythonから呼び出すことだと思いますか?

52

PyCUDA はCUDAとの非常に優れた統合を提供し、ストレートC APIよりもCUDAコードの記述を容易にするいくつかのヘルパーインターフェイスを備えています。 ここ は、Cコードをまったく必要とせずに2D FFTを実行するWikiの例です。

28
Joseph Lisee

Redditで読んだ情報をここに公開します。さまざまなパッケージが何をするのか、そしてcudaをPythonにどのように接続するのかについて明確な考えを持たずに来ている人々にとって有用です。


From: Reddit

このスレッドには、さまざまなプロジェクトが何を目指しているのか、どのように準備が整っているのかについて多くの混乱があります。 「NumPyのGPUバックエンド」はありません(SciPyの機能のどれよりもはるかに少ないです)。 Pythonと、NumPyのndarrayメソッドのサブセットをサポートするGPU配列のようなオブジェクト(ただし、linalg、fftなどの残りのNumPyを除く)内にCUDAコードを記述する方法はいくつかあります。 )

  • PyCUDAおよびPyOpenCLが最も近くなります。 GPUカーネルの起動を取り巻く配管の多くを排除します(単純化されたアレイ作成とメモリ転送、手動での割り当て解除の必要性など)。ただし、ほとんどの場合、CUDAカーネルを手動で記述するのはまだ困難です。それらはたまたまPythonファイルを三重引用符で囲んでいます。PyCUDAのGPUアレイには、限られたNumPy-機能が好きなので、非常に単純なことをしている場合は、カーネルを自分で作成せずに逃げることができます。

  • NumbaProには、Python構文を使用してCUDAカーネルを記述できる「cuda.jit」デコレータが含まれています。 PyCUDAの機能(引用されたカーネルソース)の進歩のおかげで、コードはPython的に見えるようになりましたが、GPU上で既存のNumPyコードを自動的に実行することはありません。

  • Theanoシンボリック式ツリーを構築し、GPUで実行するようにコンパイルします。 NumPyではなく、NumPyの機能の小さなサブセットに相当するものしかありません。

  • gnumpyは、CudaMatの薄い文書化されたラッパーです。サポートされている要素タイプはfloat32のみで、NumPyの小さなサブセットのみが実装されています。


10
Ramon Martinez

私はこのスレッドが古いことを知っていますが、質問に答える関連情報を持ってくることができると思います。

Continuum Analyticsには、CUDAコンピューティングを解決するライブラリを含むパッケージがあります。基本的に、デコレータを使用して(関数内で)並列化する必要があるコードをインスツルメントし、ライブラリをインポートする必要があります。したがって、CUDA命令に関する知識は必要ありません。

情報はNVIDIAのページで見つけることができます

https://developer.nvidia.com/anaconda-accelerate

または、Continuum Analytics 'ページに直接アクセスできます

https://store.continuum.io/cshop/anaconda/

30日間の試用期間と学者向けの無料ライセンスがあります。

これを広範囲に使用し、コードを10〜50倍高速化します。

7
Bogdan

Theano は、あなたが探しているものかもしれません。私が理解していることから、それはGPUでいくつかの重い数学的なリフティングを行うことができ、積極的に維持されているようです。

がんばろう!

5
katzenklavier

Anacondaで配布されているオープンソースライブラリについては、このページを確認してください https://www.anaconda.com/blog/developer-blog/open-sourcing-anaconda-accelerate/

「今日、NVIDIA GPUライブラリを含むpyculibとpyculib_sortingという2つの新しいNumbaサブプロジェクトをリリースします。PythonラッパーとAccelerateのソート関数。これらのラッパーはNumPy配列とNumba GPUで動作します加速関数へのアクセスを提供するデバイス配列:cuBLAS:線形代数cuFFT:高速フーリエ変換cuSparse:スパース行列演算cuRand:乱数生成(ホスト関数のみ)並べ替え:CUBおよびModernGPUから移植された高速並べ替えアルゴリズムNumbaプロジェクトpyculibとpyculib_sortingを管理し、新しいNumbaリリースがリリースされたときに必要に応じて更新をリリースします。これらのプロジェクトは、Numbaと同様にBSDライセンスです

2
1
onteria_

scikits.cuda をお勧めします。ただし、そのためには [〜#〜] cula [〜#〜] フルバージョン(学生は無料)をダウンロードする必要があります。もう1つは [〜#〜] cuv [〜#〜] です。より良いものを探して、それを支払う準備ができているなら、 array fire 。も見ることができます。今すぐ書いてください。

0
Moj