Render offscreen jarak jauh

10

Laboratorium penelitian saya baru-baru ini menambahkan server yang memiliki kartu grafis NVIDIA, yang ingin kami gunakan untuk melakukan perhitungan ilmiah. Karena ini bukan workstation, kita harus menjalankan pekerjaan kita dari jarak jauh, melalui koneksi ssh. Sebagian besar aplikasi kami perlu melakukan rendering opengl ke buffer offscreen, kemudian melakukan analisis gambar pada hasilnya di CUDA.

Investigasi awal saya menunjukkan bahwa penerusan X11 adalah ide yang buruk, karena rendering opengl akan terjadi pada mesin klien (atau lebih tepatnya server X11 - konvensi penamaan yang membingungkan!) Dan akan mengalami kemacetan jaringan ketika mengirim tekstur besar kami. Kita tidak perlu menampilkan output, jadi sepertinya penerusan X11 tidak perlu, tetapi Opengl membutuhkan $ DISPLAY untuk disetel ke sesuatu yang valid atau aplikasi kita tidak akan berjalan. Saya yakin ada render farm yang melakukan ini, tetapi bagaimana hal itu dilakukan? Saya pikir ini mungkin masalah konfigurasi X11 sederhana, tapi saya terlalu tidak terbiasa untuk tahu harus mulai dari mana.

Kami menjalankan server Ubuntu 10,04, tanpa gdm, gnome, dll yang diinstal. Namun, paket xserver-xorg diinstal.

redmoskito
sumber
Saya akan mencoba <code> x11vnc </code>, tetapi agaknya tidak berhasil
Hubert Kario

Jawaban:

6

Sudah lama sejak saya mengajukan pertanyaan ini, jadi saya pikir saya akan menyebutkan solusi yang akhirnya kami gunakan.

Membajak layar X lokal

Pada akhirnya, saya hanya menjalankan program opengl jarak jauh pada layar X lokal server. Mesin itu menjalankan edisi server Ubuntu dan tidak menjalankan xserver sebagai default, jadi saya harus mengatur xserver untuk dijalankan saat startup (saya baru saja menginstal paket ubuntu-desktop Ubuntu, membunuh nyamuk dengan godam palu), dan kemudian memberi diriku akses ke layar X menggunakan perintah ini sebagai root: "export DISPLAY =: 0.0; xhost + local:". Lalu saya bisa ssh ke mesin, panggil "export DISPLAY =: 0.0" dan kemudian jalankan program opengl saya seperti biasa. Siapa pun yang duduk di mesin jarak jauh akan melihat jendela sembul dan menonton program saya berjalan, tetapi kami tidak memiliki monitor yang terhubung sehingga ini bukan masalah.

Sangat penting untuk menggunakan beberapa bentuk rendering offscreen, karena membaca piksel langsung dari buffer warna pada layar dapat menghasilkan data sampah jika jendela menjadi dikaburkan oleh jendela lain. Karena Anda tidak dapat melihat layar X, sulit untuk mengetahui apakah ini telah terjadi. Render pada layar (mis. Objek Framebuffer (fbo) atau pbuffer) tidak memiliki masalah ini.

Membajak Xscreen lokal server bukanlah solusi yang ideal, jadi inilah beberapa alternatif yang saya temukan di sepanjang jalan:

Framebuffers Virtual

Xvfb adalah sebuah pilihan, tetapi itu tidak berfungsi untuk saya, karena OpenGL tidak mendapat manfaat dari akselerasi perangkat keras, dan objek framebuffer tidak didukung, yang diperlukan untuk interoperabilitas CUDA dengan OpenGL. Namun demikian, ini mungkin opsi yang bisa diterapkan di mana pembajakan layar lokal tidak dapat diterima, atau di mana pengguna tidak bisa mendapatkan hak istimewa xhost.

VirtualGL

Dari situs web VirtualGL:

VirtualGL adalah paket open source yang memberikan Unix atau Linux remote display kemampuan untuk menjalankan aplikasi OpenGL dengan akselerasi perangkat keras 3D lengkap.

Ini persis apa yang saya inginkan, dan itu terlihat sangat menjanjikan, tetapi saya tidak punya waktu untuk berurusan dengan ketergantungan perpustakaan baru, jadi saya belum mengujinya. Dugaan saya adalah bahwa ini adalah solusi ideal setelah saya dapat membuatnya dikompilasi, diinstal, dan dikonfigurasi. Inilah yang VirtualBox dan beberapa server VNC gunakan untuk mendukung akselerasi perangkat keras 3D.

redmoskito
sumber
0

Anda dapat menjalankan buffer bingkai vfb- virtual pada mesin, itu seperti X11 dummy. Kami dulu menjalankan aplikasi yang HARUS membuka Xwindow yang tidak pernah kami lihat dan hanya menginstal vfb dan mengekspor $ DISPLAY ke sana - seperti layar pada cli HTH

Chris
sumber
2
Terima kasih atas tipnya! Saya sudah mulai melihat ke xvfb, dan sepertinya rendering tidak menggunakan perangkat keras grafis, tetapi merender ke dalam memori virtual. Adakah yang bisa mengkonfirmasi / menolak ini? Jika ini masalahnya, saya pikir solusi ini tidak akan baik, karena kami ingin mengambil keuntungan dari kekuatan kartu grafis kami.
redmoskito