私の研究室は最近、科学計算を行うために使用したい、頑丈なNVIDIAグラフィックカードを搭載したサーバーを追加しました。これはワークステーションではないため、ssh接続を介してリモートでジョブを実行する必要があります。私たちのアプリケーションのほとんどは、オフスクリーンバッファーに対してopenglレンダリングを実行してから、CUDAで結果に対して画像分析を実行する必要があります。
私の最初の調査では、X11フォワーディングは悪い考えであることを示唆しています。openglレンダリングはクライアントマシン(またはX11サーバー-混乱する命名規則!)で発生し、大規模なテクスチャを送信するときにネットワークのボトルネックに苦しむからです。出力を表示する必要はないので、X11転送は必要ないようですが、Openglでは$ DISPLAYを有効に設定する必要があります。そうしないと、アプリケーションが実行されません。これを行うレンダーファームが存在すると確信していますが、どのように達成されますか?これはおそらく単純なX11構成の問題だと思いますが、どこから始めればよいのかよくわかりません。
Gdm、gnomeなどがインストールされていないUbuntuサーバー10.04を実行しています。ただし、xserver-xorgパッケージがインストールされています。
この質問をしたのは久しぶりなので、最終的に使用したソリューションについて触れておきたいと思います。
ローカルX画面のハイジャック
最後に、私はサーバーのローカルX画面でリモートのopenglプログラムを実行しました。マシンはUbuntuサーバーエディションを実行しており、デフォルトではxserverを実行していなかったため、起動時にxserverを実行するように設定する必要がありました(Ubuntuのubuntu-desktopパッケージをインストールし、大ハンマーで蚊を殺しました)。ルートとしてこれらのコマンドを使用してX画面にアクセスできるようになりました: "export DISPLAY =:0.0; xhost + local:"。次に、マシンにsshでログインし、「export DISPLAY =:0.0」を呼び出して、通常どおりopenglプログラムを実行します。リモートマシンに座っている人は誰でもウィンドウポップアップが表示され、私のプログラムが実行されているのを見るでしょうが、モニターが接続されていないので、これは問題ではありませんでした。
ウィンドウが別のウィンドウによって隠された場合、オンスクリーンカラーバッファから直接ピクセルを読み取るとガベージデータが発生する可能性があるため、何らかの形式のオフスクリーンレンダリングを使用することが重要です。 X画面が見えないので、これが起こったかどうかを知るのは難しいです。オフスクリーンレンダリング(フレームバッファーオブジェクト(fbo)やpbuffersなど)にはこの問題はありません。
サーバーのローカルXscreenをハイジャックすることは理想的な解決策ではないので、途中で見つけたいくつかの代替策を以下に示します。
仮想フレームバッファー
Xvfbはオプションですが、OpenGLがハードウェアアクセラレーションの恩恵を受けておらず、OpenGLとのCUDAの相互運用に必要なフレームバッファオブジェクトがサポートされていなかったため、私には機能しませんでした。それでも、これは、ローカル画面のハイジャックが受け入れられない場合、またはユーザーがxhost特権を取得できない場合に実行可能なオプションである可能性があります。
VirtualGL
VirtualGL Webサイトから:
VirtualGLは、UnixまたはLinuxのリモートディスプレイソフトウェアに、完全な3DハードウェアアクセラレーションでOpenGLアプリケーションを実行する機能を提供するオープンソースパッケージです。
これはまさに私が望んでいることであり、非常に有望に見えますが、新しいライブラリの依存関係を処理する時間がなかったため、テストしていません。私の推測では、これはコンパイル、インストール、構成ができれば理想的なソリューションだと思います。これは、VirtualBoxと一部のVNCサーバーがハードウェアアクセラレーション3Dをサポートするために使用するものです。
マシン上でvfb-仮想フレームバッファーを実行できます。これは、ダミーのX11のようなものです。私たちは、見たことのないXwindowを開き、vfbをインストールして$ DISPLAYをエクスポートするために必要なアプリを実行していました-CLIのちょっとした画面のような画面