[SOLVED] Compilazione di opencv con il supporto a CUDA e CUDNN

Se avete problemi con l'installazione e la configurazione di Slackware64 postate qui. Non usate questo forum per argomenti che trattano la Slackware32 o generali... per quelli usate rispettivamente il forum Slackware e Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware64 usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware64, se l'argomento è Slackware32 o generale usate rispettivamente il forum Slackware o Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
gian_d
Linux 0.x
Linux 0.x
Messaggi: 88
Iscritto il: mer lug 16, 2014 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 4.19.xx
Desktop: KDE 4.14.38
Località: Sardinia
Contatta:

[SOLVED] Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda gian_d » dom nov 03, 2019 20:28

Ho installato cudatoolkit versione 8.0 (quella supportata dal repository di Ponce) e le librerie di cuDNN versione 6. Per cuDNN ho scaricato la versione 6 invece della 5 perché opencv richiede una versione non inferiore alla 6.
Dopo questo, non riesco a far andare avanti la compilazione di opencv versione 4.1.2 a causa di un errore che sembrerebbe essere generato da un'incompatibilità di un componente di CUDA toolkit (nvcc) con il compilatore della serie 9. Questo è il codice restituito nella parte finale:

Codice: Seleziona tutto

[  3%] Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o
cd /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda && /usr/bin/cmake -E make_directory /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/.
cd /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda && /usr/bin/cmake -D verbose:BOOL=1 -D build_configuration:STRING=Release -D generated_file:STRING=/tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o -D generated_cubin_file:STRING=/tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o.cubin.txt -P /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o.Release.cmake
-- Removing /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o
/usr/bin/cmake -E remove /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o
-- Generating dependency file: /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o.NVCC-depend
/usr/share/cuda/bin/nvcc -M -D__CUDACC__ /tmp/SBo/opencv-4.1.2/modules/core/src/cuda/gpu_mat.cu -o /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o.NVCC-depend -ccbin /usr/bin/cc -m64 -D__OPENCV_BUILD=1 -D_USE_MATH_DEFINES -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_FORMAT_MACROS -DOPENCV_WITH_ITT=1 -Xcompiler ,\"-O2\",\"-fPIC\",\"-fsigned-char\",\"-W\",\"-Wall\",\"-Werror=return-type\",\"-Werror=non-virtual-dtor\",\"-Werror=address\",\"-Werror=sequence-point\",\"-Wformat\",\"-Werror=format-security\",\"-Wmissing-declarations\",\"-Winit-self\",\"-Wpointer-arith\",\"-Wuninitialized\",\"-Winit-self\",\"-Wno-comment\",\"-Wno-strict-overflow\",\"-fdiagnostics-show-option\",\"-Wno-long-long\",\"-pthread\",\"-fomit-frame-pointer\",\"-ffunction-sections\",\"-fdata-sections\",\"-msse\",\"-msse2\",\"-msse3\",\"-fvisibility=hidden\",\"-fopenmp\",\"-Wno-undef\",\"-Wno-enum-compare\",\"-Wno-unused-function\",\"-Wno-shadow\",\"-Wno-unused-but-set-variable\",\"-O3\",\"-DNDEBUG\",\"-DNDEBUG\" -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -D_FORCE_INLINES -Xcompiler -DCVAPI_EXPORTS -Xcompiler -fPIC --std=c++11 -DNVCC -I/usr/share/cuda/include -I/tmp/SBo/opencv-4.1.2/build -I/usr/include/eigen3 -I/tmp/SBo/opencv-4.1.2/modules/core/include -I/tmp/SBo/opencv-4.1.2/build/modules/core -I/tmp/SBo/opencv-4.1.2/opencv_contrib-4.1.2/modules/cudev/include -I/tmp/SBo/opencv-4.1.2/3rdparty/include/opencl/1.2 -I/tmp/SBo/opencv-4.1.2/3rdparty/ittnotify/include
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
In file included from /usr/share/cuda/include/cuda_runtime.h:78,
                 from <command-line>:
/usr/share/cuda/include/host_config.h:119:2: error: #error -- unsupported GNU version! gcc versions later than 5 are not supported!
  119 | #error -- unsupported GNU version! gcc versions later than 5 are not supported!
      |  ^~~~~
CMake Error at cuda_compile_1_generated_gpu_mat.cu.o.Release.cmake:219 (message):
  Error generating
  /tmp/SBo/opencv-4.1.2/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o

make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/build.make:65: modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o] Error 1
make[2]: uscita dalla directory "/tmp/SBo/opencv-4.1.2/build"
make[1]: *** [CMakeFiles/Makefile2:2791: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make[1]: uscita dalla directory "/tmp/SBo/opencv-4.1.2/build"
make: *** [Makefile:163: all] Error 2


in sintesi:

Codice: Seleziona tutto

In file included from /usr/share/cuda/include/cuda_runtime.h:78,
                 from <command-line>:
/usr/share/cuda/include/host_config.h:119:2: error: #error -- unsupported GNU version! gcc versions later than 5 are not supported!


Da qualche parte avevo letto che il problema si poteva superare inserendo dei collegamenti simbolici ai compilatori della serie 5 nella directory contenente i binari di cudatoolkit. Es.:
ln -s /usr/bin/gcc-5 /usr/share/cuda/bin/gcc
Ho messo questi due collegamenti (gcc e g++) ma persiste l'errore di compilazione in opencv. Ieri ho provato a vedere la fattibilità di un'installazione di una versione più recente di CUDA Toolkit (la 10) e adattare lo slackbuild, ma l'architettura degli installatori rilasciati da Nvidia è drasticamente cambiata. Peraltro ho notato che verrebbe avviata anche l'installazione di un driver Nvidia, perciò mi sono fermato per evitare di incasinarmi la configurazione grafica del computer.

A questo punto è ragionevole provare a superare l'empasse dell'errore di compilazione di opencv, ma non so cos'altro posso fare. A parte questo, senza il supporto a CUDA l'installazione di opencv va a buon fine. Potrei anche farne a meno, ma l'obiettivo è quello di estendere le funzionalità della computer vision e del deep learning all'interno di Blender. Ergo, cosa posso fare?

PS: a margine, ho il sospetto che forse i miei quesiti non sono del tutto allineati con gli obiettivi specifici dei forum di slacky.eu, perciò se sono off topic bacchettatemi senza pietà ;)
Ultima modifica di gian_d il lun nov 04, 2019 22:10, modificato 1 volta in totale.

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2636
Iscritto il: mer mar 05, 2008 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.3.2
Desktop: lxde
Località: Pisa
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda ponce » dom nov 03, 2019 23:06

potresti provare a scrivere al maintainer di cudatoolkit se per caso avesse una versione dello SlackBuild per una versione piu' recente...

rovistando sul suo repository di github ho trovato questo

https://github.com/gperon/mmyy_slackbui ... udatoolkit

gian_d
Linux 0.x
Linux 0.x
Messaggi: 88
Iscritto il: mer lug 16, 2014 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 4.19.xx
Desktop: KDE 4.14.38
Località: Sardinia
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda gian_d » dom nov 03, 2019 23:40

Ho visto il codice dello slackbuild e in effetti ci sono alcune differenze significative rispetto a quello per la versione 8 di CUDA. Uno dei prossimi giorni lo provo e se il problema dovesse persistere provo a chiedergli dei suggerimenti per adattarlo eventualmente alla versione più recente.
Un'altra cosa che ho pensato di fare è quella di ricostruire l'intero albero del pacchetto rpm in modo da tirarne fuori un tarball usabile con uno slackbuild, ma mi ci vuole un po' di tempo e pazienza per farlo perché devo capire dove va a parare la compilazione e l'installazione. Però per me è un approccio più abbordabile rispetto a quello del file run a meno che non riesca a capire come scompattarlo: l'opzione -extract non è più supportata nelle nuove versioni.

gian_d
Linux 0.x
Linux 0.x
Messaggi: 88
Iscritto il: mer lug 16, 2014 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 4.19.xx
Desktop: KDE 4.14.38
Località: Sardinia
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda gian_d » dom nov 03, 2019 23:46

Dimenticavo di segnalarti un piccolo errore nello slackbuild del tuo repository, nelle righe 58 e 59:

Codice: Seleziona tutto

chmod +x $CWD/$FILENAME\_$VERSION\_375.26\_linux-run
$CWD/$FILENAME\_$VERSION\_375.26\_linux-run -extract=$TMP

nel nome del file c'è un errore di digitazione perché è stato messo il trattino al posto del punto prima dell'estensione run

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2636
Iscritto il: mer mar 05, 2008 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.3.2
Desktop: lxde
Località: Pisa
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda ponce » lun nov 04, 2019 10:43

io non ho modificato lo SlackBuild in nessun modo rispetto a come e' su SBo... puoi vedere le modifiche che faccio per ogni SlackBuild al link sottostante
http://cgit.ponce.cc/slackbuilds/refs/heads

credo pero' che il nome del file sia corretto: e' col trattino e non col punto prima di "run", puoi verificarlo col nome del file che viene scaricato e linkato nel file cudatoolkit.info.
come considerazione a margine, se fosse stato sbagliato, non lo avrebbe espanso neppure e non avresti avuto l'errore del perl che mi hai segnalato.

gian_d
Linux 0.x
Linux 0.x
Messaggi: 88
Iscritto il: mer lug 16, 2014 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 4.19.xx
Desktop: KDE 4.14.38
Località: Sardinia
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda gian_d » lun nov 04, 2019 20:09

Scusami Matteo, ma a me capita qualcosa di veramente strano. Spesso quando devo scaricare un sorgente lo faccio dal file pacchetto.info: con firefox seleziono l'indirizzo, clicco con il pulsante destro del mouse e dal menu contestuale clicco su "Apri link".
Ebbene, selezionando l'indirizzo https://developer.nvidia.com/compute/cu ... _linux-run (nota bene, con il trattino) il server di nvidia mi rilascia il file però il nome ha il punto al posto del trattino! Ho provato a incollare l'indirizzo su konqueror e anche in questo caso viene rilasciato un file con il punto al posto del trattino.

A questo punto è evidente che il server fa un redirect al nome del file che contiene il punto. Probabilmente è una modifica relativamente recente che hanno fatto sul server di nvidia, d'altra parte i file dello slackbuild compreso il file cudatoolkit.info risalgono a tre anni fa. Anche nella sezione interna riservata ai registrati, compare questa istruzione:

Codice: Seleziona tutto

Base Installer    
Installation Instructions:
$ wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
$ sudo sh cuda_10.1.243_418.87.00_linux.run

Presumo che abbiano impostato dei symlink che puntano a *.run per mantenere una retrocompatibilità con collegamenti in rete che hanno il link *-run

gian_d
Linux 0.x
Linux 0.x
Messaggi: 88
Iscritto il: mer lug 16, 2014 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 4.19.xx
Desktop: KDE 4.14.38
Località: Sardinia
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda gian_d » lun nov 04, 2019 20:15

ponce ha scritto:come considerazione a margine, se fosse stato sbagliato, non lo avrebbe espanso neppure e non avresti avuto l'errore del perl che mi hai segnalato.


anche qui ho una spiegazione: al primo avvio lo slackbuild mi ha segnalato un errore di file non trovato. È allora che ho notato l'anomalia del trattino al posto del punto e ho quindi corretto lo slackbuild. Solo dopo, al secondo avvio, mi ha espanso correttamente il file arrivando all'errore del perl

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2636
Iscritto il: mer mar 05, 2008 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 5.3.2
Desktop: lxde
Località: Pisa
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda ponce » lun nov 04, 2019 20:49

e' sconsigliato scaricare i file linkati su SBo usando i browser (tranne in rarissimi casi in cui e' necessario ed e' specificato nel README, tipo jdk), perche' puoi avere comportamenti inaspettati e non supportati (come il redirect riportato che cambia addirittura il nome del file): usa wget, e' il metodo raccomandato e quello usato per testare praticamente tutti gli script.

gian_d
Linux 0.x
Linux 0.x
Messaggi: 88
Iscritto il: mer lug 16, 2014 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 4.19.xx
Desktop: KDE 4.14.38
Località: Sardinia
Contatta:

Re: Compilazione di opencv con il supporto a CUDA e CUDNN

Messaggioda gian_d » lun nov 04, 2019 22:04

Oh cavolo! è vero, con wget scarica correttamente il nome con il trattino. Non si finisce mai di imparare. Certo che ne hai di pazienza, chiedo scusa per le cantonate :-)
Metto il tag solved perché a questo punto lascio tutto in sospeso per dedicarmici appena possibile. Peraltro devo ancora provare se è possibile integrare il supporto a CUDA direttamente su Blender senza attivarlo in Open CV. In ogni modo aggiungerò gli eventuali aggiornamenti se dovessi trovare una soluzione con la strada che mi hai indicato.