Calcoli basati su Docker e GPU. Fattibile? [chiuso]

2

Recentemente mi sono imbattuto in questa domanda e questo Nvidia-docker progetto, che è un'implementazione di Nvidia Docker e mi ha fatto domandare dove, perché e come questo schema ha senso?

Ho scoperto alcuni materiali nel web (ad esempio questo ) che afferma che questo l'ambiente è utilizzato dai riproduttori video e dagli sviluppatori di giochi, così come dai Data Scientist che necessitano di calcoli GPU. Ok, questa è la mia domanda:

il Docker è davvero necessario in tali scenari in cui le app ad alto carico richiedono calcoli veloci e paralleli?

Nella mia comprensione Docker si presenta come un elemento ridondante e ridondante che porta virtualizzazione non necessaria e nessun guadagno in parallelizzazione.

Puoi dare esempi di vita reale in cui questa unione ha un senso?

    
posta Suncatcher 06.05.2018 - 17:36
fonte

1 risposta

3

La containerizzazione è completamente ortogonale a "carico elevato" o "parallelizzazione". La containerizzazione non implica alcuna virtualizzazione e viene interpretata meglio come sandboxing.

Quindi perché le persone usano i contenitori? Immagini .

Grazie al layering delle immagini, un'immagine del contenitore può contenere un'applicazione completa con tutte le sue dipendenze (altri servizi, librerie, ...) senza doverle installare sul sistema host. Ciò rende possibile l'esecuzione di applicazioni senza doverle installare in modo permanente o eseguire più istanze di un'applicazione o eseguire più applicazioni con dipendenze in conflitto.

Questo ha benefici limitati per la maggior parte degli utenti, tranne quando si esegue un cluster. Essere in grado di lanciare un'immagine del contenitore invece di installare in modo permanente le dipendenze è un vantaggio enorme e ci dà un sacco di flessibilità su un cluster: domani, voglio eseguire un carico di lavoro completamente diverso con un diverso insieme di dipendenze.

Hai già menzionato due tipi di utenti in cui i cluster sono comuni: render farm e computing scientifico. Questi capita spesso di richiedere GPU. Specificamente, i programmi basati su CUDA richiedono GPU Nvidia.

Quindi c'è il desiderio di utilizzare entrambi i contenitori e delle GPU per i loro vantaggi di gestione del cluster. Di per sé, questa combinazione non richiede un runtime docker speciale. È necessario configurare il runtime del contenitore per passare attraverso le risorse necessarie, eventualmente consentire syscalls aggiuntive dal contenitore (che indebolisce anche il sandboxing) e configurare la configurazione necessaria nel contenitore.

Ma perché tu devi configurarlo? E potrebbero esserci altri problemi: questo è uno scenario in cui i driver GPU sono rilevanti, ma i contenitori non possono caricare i driver nel kernel. Un contenitore potrebbe voler utilizzare una GPU come risorsa esclusiva. L'utilizzo di GPU sotto Linux a volte può ancora implicare una configurazione non banale.

Quindi chiaramente c'è il desiderio di rendere le combinazioni di contenitori GPU meno ingombranti. Nvidia-docker sembra essere un approccio. Kubernetes ha un supporto sperimentale per la gestione delle risorse GPU e può utilizzare nvidia-docker o un plug-in di Google come interfaccia GPU - ma apparentemente non ha ancora il supporto per OpenCL.

    
risposta data 06.05.2018 - 20:04
fonte