VirtualGLでリモートのOpenGLアプリをぬるぬる動かす
- VirtualGLを使ってリモートのOpenGLアプリをぬるぬる動かす試み
目次
実行環境
サーバー
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)をインストール
- VNCでリモートデスクトップの2.1.1節を参照
- また、公式の https://cdn.rawgit.com/VirtualGL/virtualgl/2.6.1/doc/index.html#hd005001 も参照
クライアント側
- VirtualGL 2.6.1(VirtualGL-2.6.1.dmg)をインストール
実行
クライアント側(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
嗚呼!割とぬるぬる動く!-sオプションのせいで遅くなりすぎるのではと心配したが、意外となんとかなった。
さらに大きいものとして、EMD-6844とPDB-5yu8の組み合わせも描画してみた。
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
ログアウトしてログインし直すと、エラーは解消された。