「VirtualGLでリモートのOpenGLアプリをぬるぬる動かす」の版間の差分

提供: Eospedia
移動: 案内検索
(サーバー側)
 
(同じ利用者による、間の8版が非表示)
行1: 行1:
 
* VirtualGLを使ってリモートのOpenGLアプリをぬるぬる動かす試み
 
* VirtualGLを使ってリモートのOpenGLアプリをぬるぬる動かす試み
 
** https://virtualgl.org/About/Introduction
 
** https://virtualgl.org/About/Introduction
* <span style="color:red">現状成功していません。</span>
 
  
 
== 実行環境 ==
 
== 実行環境 ==
行25: 行24:
 
** [[VNCでリモートデスクトップ]]の2.1.1節を参照
 
** [[VNCでリモートデスクトップ]]の2.1.1節を参照
 
** また、公式の https://cdn.rawgit.com/VirtualGL/virtualgl/2.6.1/doc/index.html#hd005001 も参照
 
** また、公式の https://cdn.rawgit.com/VirtualGL/virtualgl/2.6.1/doc/index.html#hd005001 も参照
 +
* <b>セキュリティ云々の問題はさておき、インストール時のオプションでvglの使用をvglusersグループのみに限定するか?的なのをyesにすると、多分そのせいでdocker関係で色々辛いことが起こるので(追記参照)、noの方がいいかも。わかりませんが。</b>
  
 
=== クライアント側 ===
 
=== クライアント側 ===
行32: 行32:
 
== 実行 ==
 
== 実行 ==
 
クライアント側(Mac)で、新規ターミナルを起動。そこで、
 
クライアント側(Mac)で、新規ターミナルを起動。そこで、
  $ /opt/VirtualGL/bin/vglconnect <ユーザー名>@<サーバーipアドレス>
+
  (client)$ /opt/VirtualGL/bin/vglconnect -s <ユーザー名>@<サーバーipアドレス>
によりsshログイン。(.ssh/configにx forwarding可能な様に設定を記述済み)
+
により、サーバーへsshログインする。
  
普通にOpenGLアプリをx forwardingで飛ばした場合。
+
このとき<span style="color:red">-sオプションをつけないとVGLの通信が暗号化されない</span>ので注意。
$ glxgears
+
遅くてギアがほとんど動かない。
+
  
VirturlGLを使用してやってみる
+
今回はサーバーが研究室のLANの外にあるため、暗号化している。暗号化の代償として、描画速度が遅くなる。
$ vglrun glxgears
+
[VGL] NOTICE: Automatically setting VGL_CLIENT environment variable to
+
[VGL]    192.168.10.99, the IP address of your SSH client.
+
[VGL] ERROR: Could not connect to VGL client.  Make sure that vglclient is
+
[VGL]    running and that either the DISPLAY or VGL_CLIENT environment
+
[VGL]    variable points to the machine on which vglclient is running.
+
[VGL] ERROR: in connect--
+
[VGL]    283: Connection refused
+
はい、動かない
+
  
他にもごちゃごちゃ試してみたがうまくいかず、どうしたら良いか検討がつかないのでとりあえずpending
+
(試しに一瞬だけ-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
 +
 
 +
[[File:vnc-draw2.png|500px]]
 +
 
 +
嗚呼!割とぬるぬる動く!-sオプションのせいで遅くなりすぎるのではと心配したが、意外となんとかなった。
 +
 
 +
さらに大きいものとして、EMD-6844とPDB-5yu8の組み合わせも描画してみた。
 +
 
 +
[[File:vnc-draw.png|200px]]
 +
 
 +
transparencyを入れたままで動かすのは辛いところがあるが、transparencyを切ればこのサイズでもマップのダウンサンプリングなしでぐるぐる回せた。
 +
 
 +
さらに、以下によりvglrunでbashを起動すると、そのbashターミナルの中で起動したOpenGLアプリは全てVirtualGLが描画を手伝ってくれ、描画が高速になる。
 +
(server)$ /opt/VirtualGL/bin/vglrun bash
 +
(server)$ chimera
 +
vglrunをいちいち打たなくてよくなり、楽。
 +
 
 +
== 総括 ==
 +
研究室のLAN外にあるサーバーでも、VirtualGLを使えば、重めの3D描画アプリもぬるぬる動かせることがわかりました。
 +
 
 +
== 追記 ==
 +
=== <u>LD_PRELOAD関係のエラーが出る件への対処</u> ===
 +
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関係のエラーの様。以下リンクの方法に従って対処してみる。<br/>
 +
[https://www.linuxquestions.org/questions/linux-desktop-74/%27libdlfaker-so%27-from-ld_preload-cannot-be-preloaded-4175614572/ <nowiki>[SOLVED]</nowiki> '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
 +
 
 +
ログアウトしてログインし直すと、エラーは解消された。
 +
 
 +
 
 +
=== <u>VirtualGL入れたらNVIDIA Dockerが動かなくなったとき</u> ===
 +
2019/5/14
 +
* VirtualGLを入れると/dev/nvidia-*の一部のファイルの所有者がroot:rootからroot:vglusersに書き換わるようです。
 +
* 対処策 : [[NVIDIA Dockerのインストール]] ページの下の方に書きました。
 +
 
 +
 
 +
=== <u>VirtualGL入れたらDockerコンテナ内でnon-rootユーザーがGPU使えなくなりました</u>===
 +
2019/5/18
 +
* NVIDIA Dockerが動かなくなるのと同じ理由で動かなくなりました
 +
* 対処策:[[Dockerトラブルシューティング]]のどこか

2019年5月18日 (土) 10:21時点における最新版

実行環境

サーバー

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