私の中心的な問題は、EC2 GPU インスタンスで複数の OpenGL 実行可能ファイルを同時に実行する必要があることです。これを行おうとすると、非決定論的なセグメンテーション違反を観察しています。私の Macbook Pro では、同じプログラムが (並行して) 正常に実行されます。
アプリケーションは次のように機能します。
- Python スクリプトは、複数のワーカー実行可能ファイルを起動します (つまり、スレッドプール
subprocess.call()
からの同時呼び出し)。multiprocessing.pool.ThreadPool
Python スクリプトはワーカー入力として JSON ファイルを提供し、ワーカーは JSON をファイルに書き込みます。 - 各ワーカーは、フラグメント シェーダーとレンダリングからテクスチャへのパイプラインを使用して、OpenGL でヘッドレス イメージ レンダリングを行う C++ プログラムです。Glut と GLX の両方のレンダリング コンテキストを使用してみました。
次の場合、アプリケーション全体が正常に動作するため、Python スクリプトにも C++ ワーカーにも重大なバグはないと確信しています。
- EC2 GPU インスタンスで単一のワーカーを実行する
- Macbook (OSX 10.7.4) で 1 つ以上のワーカーを実行しています
私が観察した特定のエラーは、数分の実行後に1 つ以上のワーカーが OpenGL 呼び出し (例: など) 内でセグメンテーション違反を起こすglTexSubImage2D
ことです。glDrawElements
ときどき、GLX コンテキストのセットアップ段階で失敗するのを見てきました (例:glXCreateNewContext
やglXChooseFBConfig
)。より多くのワーカーを開始すると (つまり、並行性が高くなると)、エラーがすぐに表示されます。より少ない数のワーカーを開始すると、クラッシュするまでに 15 ~ 30 分かかることがあります。
ある種の OpenGL コンテキストまたはドライバーの問題があると思います。GLUT と GLX の両方を使用してコンテキストを設定しようとしましたが、どちらも役に立たないようです。
EC2 インスタンスを作成する手順は、http: //hpc.nomad-labs.com/archives/139に記載されている手順に非常に近いものです。私がインストールする特定のパッケージは次のとおりです。
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libegl1-mesa libglu1-mesa-dev mesa-utils mesa-utils-extra llvm-dev imagemagick libboost-all-dev python2.6 python-imaging python-matplotlib python-numpy python-scipy firefox clang python-setuptools python-scipy libatlas-dev ccache libpng12-dev libmagick++-dev glew-utils xvfb x11-utils qiv xinit
OSX と Linux の両方で、C++ ワーカー リンク: GL GLU glut pthread m X11
.
以下を使用して xorg.conf を生成しました。
$ nvidia-xconfig -a --use-display-device=None --virtual=1280x1024
プログラムを実行する前に、次を実行します。
$ startx &; export DISPLAY=:0
nvidia 以外のドライバーをいくつか試しましたが、どちらも役に立たないようです。
OpenGL での並列処理に関する FAQ も参照しまし た。 :)しかし、マルチプロセスGLXは実現可能で安定しているようです。
誰にもアイデアはありますか
- OpenGL/GLX 呼び出しが失敗するのはなぜですか? 本当にドライバーの問題が発生していますか? Mac GPU ドライバーには、OpenGL の同時使用を支援するある種の「魔法の機能」があるようです。同じ機能を持つ Ubuntu/Linux ドライバーはありますか?
- EC2 GPU インスタンス (またはヘッドレス Ubuntu/Linux マシン) で複数の OpenGL 実行可能ファイルを同時に実行するためのベスト プラクティスはありますか? これを行うオープンソースソフトウェアを教えてくれる人はいますか?