Risponderemo a tutte le tue domande!

Come risolvere gli errori di OpenCL no platform

Questa guida spiega cosa fare quando un'applicazione OpenCL non funziona. Nella maggior parte dei casi, ciò accade perché l'applicazione non riesce a trovare un dispositivo di calcolo disponibile, in genere la GPU.

Controllare i driver della GPU

Supponiamo di avere un server con Ubuntu 22.04 e una GPU NVIDIA® che supporta OpenCL. Il primo passo consiste nel verificare che il driver della GPU sia installato correttamente. Il metodo più semplice per verificarlo è utilizzare l'utilità di monitoraggio:

nvidia-smi

Se si riscontra un errore, installare prima il driver della GPU. È possibile farlo seguendo le istruzioni di Installa i driver NVIDIA® in Linux. Se viene visualizzata una tabella che elenca tutte le schede video, verificare attentamente quale versione del driver è installata e quale versione di NVIDIA® CUDA® è presente nel sistema.

Le versioni moderne dei driver delle schede video iniziano in genere con 5, ad esempio 535.XXX. Se si trova una versione che inizia con 4 (ad esempio 4XX.XXX), significa che il driver deve essere aggiornato. Lo stesso principio si applica a CUDA: le versioni attuali iniziano con 12, ad esempio 12.6. Se si utilizza una versione più vecchia, è necessario aggiornare all'ultima versione utilizzando la guida Installa il toolkit CUDA® in Linux.

Verifichiamo che le variabili d'ambiente includano il percorso dei file eseguibili del compilatore:

nvcc --version

Se tutto è a posto, si riceverà l'output della versione del compilatore disponibile. Ciò significa che qualsiasi applicazione eseguita avrà accesso al compilatore senza dover specificare il percorso completo. Se il sistema segnala l'assenza di NVIDIA® CUDA® sul server, ma l'utilità nvidia-smi mostra una versione installata, è necessario aggiungere il percorso alle variabili d'ambiente. Questo può essere fatto in due modi: temporaneamente o permanentemente.

Per una soluzione temporanea, sono sufficienti due comandi. Ecco un esempio che utilizza CUDA® 12.6 installato sul server:

export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64\
    ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=/usr/local/cuda-12.6/bin${PATH:+:${PATH}}

Per verificare le modifiche, provare a visualizzare nuovamente la versione di NVCC. Se le variabili d'ambiente sono state impostate correttamente, l'errore dovrebbe essere risolto. Per una soluzione permanente, aggiungere entrambe le variabili di cui sopra al file /etc/environment:

sudo nano /etc/environment

Aggiungete quindi la variabile LD_LIBRARY_PATH e completate la variabile PATH:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-12.6/bin"
LD_LIBRARY_PATH="/usr/local/cuda-12.6/lib64"

Salvare il file premendo Ctrl + O, quindi uscire dall'editor con Ctrl + X. Dopo il riavvio, il comando di chiamata NVCC funzionerà correttamente.

Verificare la disponibilità di OpenCL

Diamo un'occhiata a OpenCL, un framework per lo sviluppo di applicazioni ottimizzate per il calcolo parallelo. I driver delle GPU implementano il supporto per questo framework e le prestazioni dell'applicazione dipendono da loro.

Per verificare se un server è pronto a lavorare con OpenCL, è possibile installare una piccola utility diagnostica chiamata clinfo:

sudo apt -y install clinfo

Eseguitela ed esaminate il breve risultato. Ci concentreremo su due aspetti fondamentali: il numero di piattaforme e il numero di dispositivi disponibili:

clinfo | grep Number

Quando il sistema è pronto a lavorare con OpenCL, l'output apparirà come segue:

Number of platforms                1
Number of devices                  2
Number of async copy engines                  2
Number of async copy engines                  2

Nella terminologia di OpenCL, "piattaforma" si riferisce al tipo di dispositivi di calcolo disponibili. Può trattarsi di una CPU, di una GPU o anche di un FPGA. Nel nostro esempio, abbiamo eseguito il comando su un server con due schede grafiche NVIDIA® RTX™ 3090, ottenendo questi valori. In sostanza, abbiamo due dispositivi di elaborazione appartenenti a un unico tipo (GPU).

Se la colonna "Numero di piattaforme" mostra 0, significa che il sistema operativo non è pronto per eseguire applicazioni OpenCL. In questo caso, verificare se i driver appropriati sono installati sul sistema. Se i problemi persistono, provare a rimuovere completamente i driver della GPU, riavviare il server e quindi reinstallarli.

Controllare le librerie OpenCL

È opportuno verificare anche la presenza delle librerie OpenCL necessarie:

ldconfig -p | grep -i opencl

Se le librerie sono installate correttamente, il risultato dovrebbe essere simile a questo:

libnvidia-opencl.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libnvidia-opencl.so.1                                                                                                                                               
libnvidia-opencl.so.1 (libc6) => /lib/i386-linux-gnu/libnvidia-opencl.so.1                                                                                                                                                        
libOpenCL.so.1 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libOpenCL.so.1                                                                                                                                          
libOpenCL.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libOpenCL.so.1                                                                                                                                                             
libOpenCL.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libOpenCL.so                                                                                                                                              
libOpenCL.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libOpenCL.so

Se il sistema non dispone di queste librerie, è possibile installarle manualmente:

sudo apt install ocl-icd-opencl-dev && sudo apt install opencl-headers

Aggiornamento

In Ubuntu 22.04, alcuni modelli di GPU potrebbero risultare completamente inaccessibili a OpenCL, anche dopo aver reinstallato tutti i driver e il toolkit CUDA®. La soluzione migliore per questo problema è il downgrade alla versione precedente del sistema operativo, insieme al downgrade dei driver e di CUDA®.

Per esempio, se si utilizza l'acceleratore Tesla® V100 (introdotto nel 2017), è consigliabile scegliere Ubuntu 20.04 invece di Ubuntu 22.04. Abbinate a questo il driver 535.183.01 e CUDA® 12.2. Questa combinazione garantisce il corretto funzionamento della maggior parte delle applicazioni basate su OpenCL.

In alcuni casi, potrebbe non essere necessario cambiare la versione del sistema operativo. Sarà invece necessario effettuare un downgrade delle versioni del driver e di CUDA®.

Vedere anche:



Aggiornato: 28.03.2025

Pubblicato: 23.09.2024


Hai altre domande? Scrivici!

By clicking «I Accept» you confirm that you have read and accepted the website Terms and Conditions, Privacy Policy, and Moneyback Policy.