VirtualGLでリモートのOpenGLアプリをぬるぬる動かす

提供: Eospedia
2019年5月18日 (土) 10:21時点におけるKttn (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

実行環境

サーバー

Ubuntu 16.04.6 LTS

  • 3.6 GHz Intel Xeon E5-1650
  • 64 GB 2133 MHz DDR4
  • NVIDIA GeForce GTX 1080 8 GB x 4台
    • Driverバージョン 418.74
    • CUDAバージョン 10.1

クライアント

macOS Mojave 10.14.4

  • Mac mini (Late 2012)
    • 2.3 GHz Intel Core i7
    • 16 GB 1600 MHz DDR3
    • Intel HD Graphics 4000 1536 MB
  • XQuartx 2.7.11

インストール

サーバー側

  • VirtualGL 2.6.1(virtualgl_2.6.1_amd64.deb)をインストール
  • セキュリティ云々の問題はさておき、インストール時のオプションでvglの使用をvglusersグループのみに限定するか?的なのをyesにすると、多分そのせいでdocker関係で色々辛いことが起こるので(追記参照)、noの方がいいかも。わかりませんが。

クライアント側

実行

クライアント側(Mac)で、新規ターミナルを起動。そこで、

(client)$ /opt/VirtualGL/bin/vglconnect -s <ユーザー名>@<サーバーipアドレス>

により、サーバーへsshログインする。

このとき-sオプションをつけないとVGLの通信が暗号化されないので注意。

今回はサーバーが研究室のLANの外にあるため、暗号化している。暗号化の代償として、描画速度が遅くなる。

(試しに一瞬だけ-sオプションを外して暗号化をなくして以下を実行すると、glxgearsの動きが目に見えて速くなった)

実験としてglxgearsを動かしてみる。

(server)$ /opt/VirtualGL/bin/vglrun glxgears

-sによる暗号化の代償で、期待したほど速く動いてくれない。それでもvirtualglを使わない場合と比べればマシではある。

重めの3D OpenGLアプリ UCSF Chimeraを動かしてみた。

(server)$ /opt/VirtualGL/bin/vglrun chimera

chimeraのコマンドラインで適当にpdbをfetchして描画してみる。

(chimera)$ open 2zwh

vnc-draw2.png

嗚呼!割とぬるぬる動く!-sオプションのせいで遅くなりすぎるのではと心配したが、意外となんとかなった。

さらに大きいものとして、EMD-6844とPDB-5yu8の組み合わせも描画してみた。

vnc-draw.png

transparencyを入れたままで動かすのは辛いところがあるが、transparencyを切ればこのサイズでもマップのダウンサンプリングなしでぐるぐる回せた。

さらに、以下によりvglrunでbashを起動すると、そのbashターミナルの中で起動したOpenGLアプリは全てVirtualGLが描画を手伝ってくれ、描画が高速になる。

(server)$ /opt/VirtualGL/bin/vglrun bash
(server)$ chimera

vglrunをいちいち打たなくてよくなり、楽。

総括

研究室のLAN外にあるサーバーでも、VirtualGLを使えば、重めの3D描画アプリもぬるぬる動かせることがわかりました。

追記

LD_PRELOAD関係のエラーが出る件への対処

2019/5/14

sudoを使うとこんなエラーが出る様になった。

ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object 'libvglfaker.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

VirtualGL関係のエラーの様。以下リンクの方法に従って対処してみる。
[SOLVED] 'libdlfaker.so' from LD_PRELOAD cannot be preloaded

現状のLD_PRELOAD環境変数は以下のようになっている。

$ echo $LD_PRELOAD
libdlfaker.so:libvglfaker.so

これをフルパス指定に変更する。libdlfaker.soおよびlibvglfaker.soは/usr/lib/以下に見つかった(それっぽい場所をlsで探し回った)ので、$HOME/.profileに下記行を追加。

# For VirtualGL
export LD_PRELOAD=/usr/lib/libdlfaker.so:/usr/lib/libvglfaker.so:$LD_PRELOAD

ログアウトしてログインし直すと、エラーは解消された。


VirtualGL入れたらNVIDIA Dockerが動かなくなったとき

2019/5/14

  • VirtualGLを入れると/dev/nvidia-*の一部のファイルの所有者がroot:rootからroot:vglusersに書き換わるようです。
  • 対処策 : NVIDIA Dockerのインストール ページの下の方に書きました。


VirtualGL入れたらDockerコンテナ内でnon-rootユーザーがGPU使えなくなりました

2019/5/18