2013-03-04 6 views
12

Il mio programma CUDA si è arrestato in modo anomalo durante l'esecuzione, prima che la memoria venisse scaricata. Di conseguenza, la memoria del dispositivo è rimasta occupata.Come svuotare la memoria GPU utilizzando CUDA (il ripristino fisico non è disponibile)

Sono in esecuzione su una GTX 580, per cui nvidia-smi --gpu-reset non è supportato.

L'inserimento di cudaDeviceReset() all'inizio del programma ha effetto solo sul contesto corrente creato dal processo e non scarica la memoria allocata prima di esso.

Sto accedendo a un server Fedora con quella GPU da remoto, quindi il ripristino fisico è piuttosto complicato.

Quindi, la domanda è: c'è un modo per svuotare la memoria del dispositivo in questa situazione?

+0

"Come risultato, la memoria del dispositivo rimane occupata "- Come sai che questo è vero? – talonmies

+4

Sebbene 'nvidia-smi --gpu-reset' non sia disponibile, posso ancora ottenere alcune informazioni con' nvidia-smi -q'. Nella maggior parte dei campi fornisce 'N/A', ma alcune informazioni sono utili. Ecco l'output rilevante: 'Uso memoria Totale: 1535 MB Utilizzato: 1227 MB Libero: 307 MB' – timdim

+0

Inoltre, non riesco ad allocare memoria per variabili, che sono abbastanza piccole – timdim

risposta

7

Anche se dovrebbe essere unecessary a fare questo in qualcosa di diverso da circostanze eccezionali, il modo consigliato di fare questo su host Linux è per scaricare il driver nvidia facendo

$ rmmod nvidia 

con opportuni privilegi di root e poi ricaricare con

$ modprobe nvidia 

Se la macchina è in funzione X11, sarà necessario fermare manualmente in anticipo, e riavviarlo in seguito. I processi di intializzazione del driver dovrebbero eliminare qualsiasi stato precedente sul dispositivo.

Questa risposta è stato assemblato dai commenti e pubblicato come un wiki comunità per ottenere questa domanda fuori dalla lista senza risposta per il tag CUDA

4

su MacOS (/ OS X), se qualcun altro sta avendo problemi con la memoria a quanto pare che perde OS:

  • https://github.com/phvu/cuda-smi è utile per controllare rapidamente la memoria libera
  • applicazioni Smettere sembra per liberare la memoria che utilizzano. Esci da tutto ciò che non ti serve o esci dalle applicazioni una alla volta per vedere quanta memoria hanno usato.
  • Se questo non lo taglia (lasciando circa 10 applicazioni liberate circa 500 MB/15% per me), il più grande consumatore di gran lunga è WindowServer. Puoi forzare l'uscita, che ucciderà anche tutte le applicazioni che hai in esecuzione e ti disconnetterò. Ma è un po 'più veloce di un riavvio e mi riporta alla memoria libera al 90% sul dispositivo cuda.
5

Ho anche avuto lo stesso problema, e ho visto una buona soluzione nel quorum, utilizzando

sudo kill -9 PID. 

vedere https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi

+0

Ha funzionato a meraviglia quando ho accidentalmente aperto e caricato due diversi * jupyter notebook * con * VGG16 *. ** Avvertenza **: uccide i notebook. Immagino che potresti sceglierne uno per liberare memoria per l'altro, ma non so come selezioni il PID per un dato notebook. – josh

9

controllo ciò che sta utilizzando la memoria GPU con

sudo fuser -v /dev/nvidia* 

L'output sarà simile a questo:

     USER  PID ACCESS COMMAND 
/dev/nvidia0:  root  1256 F...m Xorg 
        username 2057 F...m compiz 
        username 2759 F...m chrome 
        username 2777 F...m chrome 
        username 20450 F...m python 
        username 20699 F...m python 

Poi uccidere il PID che non è più necessario il htop o con

sudo kill -9 PID. 

Nell'esempio di cui sopra, PyCharm stava mangiando un sacco di memoria in modo che ho ucciso 20450 e 20699.

+1

Grazie! Per qualche ragione, ho avuto un processo che tratteggiava tutta la mia VRAM, non mostrata su 'nvidia-smi'. – Davidmh