2016-02-25 13 views
6

Sto tentando di importare la libreria theano in un'istanza di aws per utilizzare GPU. Ho scritto uno script python usando boto per automatizzare l'installazione di aws che essenzialmente eseguirà un ssh all'istanza dalla mia macchina locale e quindi avvierò uno script bash dove faccio "python -c 'import theano'" per avviare la GPU. Ma ottengo il seguente errore:
Impossibile compilare cuda_ndarray.cu: libcublas.so.7.5: impossibile aprire il file oggetto condiviso

ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: libcublas.so.7.5: cannot open shared object file: No such file or directory

Quando ho cercato di importare modulo Teanò direttamente nel comando shell caso si avvia automaticamente utilizzando GPU.

Using gpu device 0: GRID K520 (CNMeM is disabled)

Suppongo che manchi qualche altra importazione che deve essere eseguita durante l'importazione tramite il mio script python di automazione. Quale potrebbe essere la soluzione?

+2

Può essere un problema ambientale. Prova python "import os; print (os.eviron [" PATH "])" e vedi se "/ usr/local/cuda/bin" è in PATH. – zaxliu

+0

Controllare inoltre 'LD_LIBRARY_PATH' per assicurarsi che le librerie CUDA possano essere trovate in fase di runtime. – wildwilhelm

risposta

6

cercherò di risolvere questo problema in modo chiaro e conciso, come ho scoperto in realtà non buona risposta per le persone che stanno iniziando utilizza UNIX oppure non hanno familiarità con la compilazione e linking.

Il problema ha a che fare con il collegamento dinamico e può essere risolto in due modi. Il primo è impostando la variabile di ambiente LD_LIBRARY_PATH.CUDA Supponendo che è installato in/usr// CUDA/locale, è sufficiente aggiungere nel file ambiente/etc/ambiente:

LD_LIBRARY_PATH=/usr/local/cuda/ 

O semplicemente nel vostro .bashrc:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64/ 

Questa soluzione non è raccomandato per guru unix (non sono uno che ho appena letto su internet e seguo linux guru). Quindi la soluzione che ho trovato è semplice, modificare il percorso in cui il software linux ld cerca le librerie per impostazione predefinita. Per fare questo basta fare (quello che dovete fare come root):

cd /etc/ld.so.conf.d/ 

quindi prendere ad esempio e modificare:

vi libc.conf 

Dentro questo file è sufficiente aggiungere il percorso alla radice lib64 come:

/usr/local/cuda/lib64/ 

Si potrebbe ottenere qualcosa di simile nel file:

\# libc default configuration 

/usr/local/lib 

/usr/local/cuda/lib64/ 

E poi basta eseguire:

sudo ldconfig 

Speranza questa risposta aiuta le persone che stanno iniziando vedono la programmazione, o utilizzando linguaggi di alto livello come Python che utilizza codice C al di sotto (come Theano fa) e non hanno familiarità con la compilazione, linkig ...

3

Ho avuto un problema simile di recente e impiegavo anni a capire cosa stesse andando storto (al punto ho danneggiato la mia installazione di Linux e ho dovuto fare una nuova installazione).

Una possibile soluzione di questo errore è quello di eliminare la .theano/ directory che è (forse) trova nella vostra directory home:

sudo rm -rf ~/.theano 

Per evitare che si verifichi di nuovo, non eseguire il script come utente root (ovvero senza sudo).

L'esecuzione di uno script come root crea la directory nascosta con i permessi di root, rendendola inaccessibile ad altri processi.

4

Ho affrontato lo stesso errore su Ubuntu 16.04 con CUDA 7.5 e trovato la soluzione here:

  1. CUDA 7.5 non supportano la versione di default g ++. Installare una versione supportata e renderlo di default:

    sudo apt-get install g++-4.9 
    
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20 
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 
    
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20 
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10 
    
    sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 
    sudo update-alternatives --set cc /usr/bin/gcc 
    
    sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 
    sudo update-alternatives --set c++ /usr/bin/g++ 
    
  2. risolvere un bug glibc - creare .theanorc nella home directory con le seguenti impostazioni:

    [global] 
    device=gpu 
    floatX=float32 
    
    [nvcc] 
    flags=-D_FORCE_INLINES 
    

E non fare dimentica di controllare le variabili d'ambiente: PATH dovrebbe contenere la posizione della cartella cuda bin e CUDA_HOME dovrebbe contenere la posizione di casa cuda

Ho aggiunto a mio .bashrc file in questo modo:

export PATH="/usr/local/cuda/bin:$PATH" 
export CUDA_HOME="/usr/local/cuda:$CUDA_HOME" 
0

su suggerimento di Kumar here, ho fatto

sudo ldconfig /usr/local/cuda/lib64 

E magicamente iniziato a lavorare. Grazie Kumar!

Problemi correlati