Rendering remoto fuori schermo


10

Il mio laboratorio di ricerca ha recentemente aggiunto un server che ha una potente scheda grafica NVIDIA, che vorremmo usare per fare calcoli scientifici. Dal momento che non è una workstation, dovremo eseguire i nostri lavori in remoto, tramite una connessione ssh. La maggior parte delle nostre applicazioni richiede di eseguire il rendering di Opengl su un buffer offscreen, quindi di eseguire l'analisi delle immagini sul risultato in CUDA.

La mia indagine iniziale suggerisce che l'inoltro X11 è una cattiva idea, perché il rendering aperto avverrà sul computer client (o piuttosto sul server X11 - che convenzione di denominazione confusa!) E subirà colli di bottiglia nella rete quando invieremo le nostre trame enormi. Non avremo mai bisogno di visualizzare l'output, quindi sembra che l'inoltro X11 non dovrebbe essere necessario, ma Opengl ha bisogno di $ DISPLAY per essere impostato su qualcosa di valido o le nostre applicazioni non funzioneranno. Sono sicuro che esistono farm di rendering che lo fanno, ma come viene realizzato? Penso che questo sia probabilmente un semplice problema di configurazione X11, ma non ho familiarità con esso per sapere da dove cominciare.

Stiamo eseguendo Ubuntu server 10.04, senza gdm, gnome, ecc installati. Tuttavia, il pacchetto xserver-xorg è installato.


Vorrei provare <code> x11vnc </code>, ma è piuttosto improbabile che funzioni
Hubert Kario

Risposte:


6

È passato un po 'di tempo da quando ho posto questa domanda, quindi ho pensato di menzionare la soluzione che alla fine abbiamo usato.

Dirottamento della schermata X locale

Alla fine, ho appena eseguito i programmi remoti aperti sullo schermo X locale del server. La macchina stava eseguendo Ubuntu Server Edition e non stava eseguendo un xserver per impostazione predefinita, quindi ho dovuto configurare un xserver per l'esecuzione all'avvio (ho appena installato il pacchetto Ubuntu-desktop di Ubuntu, uccidendo una zanzara con una mazza), e quindi mi sono concesso di accedere alla schermata X usando questi comandi come root: "export DISPLAY =: 0.0; xhost + local:". Quindi ho potuto accedere alla macchina, chiamare "export DISPLAY =: 0.0" e quindi eseguire i miei programmi opengl normalmente. Chiunque fosse seduto sulla macchina remota vedrebbe una finestra pop-up e guarderebbe il mio programma in esecuzione, ma non abbiamo un monitor collegato quindi questo non è stato un problema.

È importante utilizzare una qualche forma di rendering offscreen, perché la lettura dei pixel direttamente dal buffer di colore su schermo potrebbe generare dati inutili se la finestra viene oscurata da un'altra finestra. Dato che non riesci a vedere la schermata X, è difficile sapere se questo è successo. Il rendering fuori schermo (ad esempio oggetti Framebuffer (fbo) o pbuffer) non presenta questo problema.

Dirottare l'Xscreen locale del server non è una soluzione ideale, quindi ecco alcune alternative che ho trovato lungo la strada:

Framebuffer virtuali

Xvfb è un'opzione, ma non ha funzionato per me, perché OpenGL non beneficiava dell'accelerazione hardware e gli oggetti framebuffer non erano supportati, necessari per l'interoperabilità di CUDA con OpenGL. Tuttavia, questa potrebbe essere un'opzione praticabile in cui il dirottamento dello schermo locale non è accettabile o in cui l'utente non può ottenere i privilegi di xhost.

VirtualGL

Dal sito Web VirtualGL:

VirtualGL è un pacchetto open source che offre a qualsiasi software di visualizzazione remota Unix o Linux la possibilità di eseguire applicazioni OpenGL con un'accelerazione hardware 3D completa.

Questo è esattamente quello che voglio, e sembra molto promettente, ma non ho avuto il tempo di affrontare una nuova dipendenza dalla libreria, quindi non l'ho provato. La mia ipotesi è che questa sia la soluzione ideale dopo averla compilata, installata e configurata. Questo è ciò che VirtualBox e alcuni server VNC utilizzano per supportare il 3D con accelerazione hardware.


0

è possibile eseguire un buffer di frame virtuale vfb sulla macchina, è come un X11 fittizio. Eseguivamo app che DOVREBBE aprire una Xwindow che non avevamo mai visto e appena installato vfb ed esportare $ DISPLAY in quel modo - un po 'come lo schermo sul cli HTH


2
Grazie per il consiglio! Ho iniziato a esaminare xvfb e sembra che il rendering non utilizzi l'hardware grafico, ma invece il rendering nella memoria virtuale. Qualcuno può confermare / negare questo? Se questo è il caso, penso che questa soluzione non sarà buona, perché stiamo cercando di sfruttare la potenza della nostra scheda grafica.
Redmoskito,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.