GPU NVIDIA con WebODM/ODX e ODM: cosa accelera e come attivarla

Avanzato Entrambe le linee 12 min di lettura

Ultimo aggiornamento:

Testato con: WebODM (Docker, webodm.sh --gpu) con motore ODX; ODM 3.6.0 e NodeODM (opendronemap/*) secondo docs.opendronemap.org

In questa pagina

Prima di spendere ore sui driver, conviene chiarire cosa aspettarsi. Molti si avvicinano alla GPU pensando di dimezzare i tempi di elaborazione: in nessuna delle due linee la documentazione dice questo. In questa guida vedi cosa dichiara ciascuna documentazione, poi la procedura per attivare la GPU e verificarla.

Cosa accelera la GPU (e cosa no): le due posizioni#

I due motori erano identici al 6 aprile 2026, ma le due documentazioni descrivono la GPU in modo diverso. Le riportiamo separatamente, con la data di verifica, senza numeri di prestazioni: nessuna delle due li pubblica e questo sito non ne ha ancora misurati.

WebODM / ODX

La documentazione di WebODM dichiara che una GPU NVIDIA con CUDA accelera solo l'estrazione delle feature (i punti caratteristici che il software cerca in ogni immagine), ed è supportata su Linux e su Windows tramite WSL2. Le altre fasi, dall'allineamento delle camere (SfM) alla generazione della nuvola densa, della mesh, del DSM e dell'ortofoto, restano sulla CPU e dipendono da numero di core e RAM.

Il quadro per il motore ODX è in evoluzione: con l'aggiornamento del 12 luglio 2026 il progetto ha annunciato un SfM più veloce, il supporto alle GPU NVIDIA RTX serie 50 e i "checkpoint" nei GCP. Cosa questo comporti in termini di tempi non è quantificato nella documentazione al momento della verifica di questa guida: è una dichiarazione del progetto, non una misura.

OpenDroneMap / ODM

La documentazione di OpenDroneMap per il motore ODM afferma che "GPU currently provides no performance benefit" (docs.opendronemap.org, verificato il 2 settembre 2026). La riportiamo così com'è: è la posizione della nonprofit sul suo motore. La stessa documentazione elenca l'opzione --no-gpu tra gli argomenti di ODM 3.6.0; non deduciamo da questo nulla che la documentazione non dica. Per OpenDroneMap Desktop la scheda di riferimento non riporta una procedura di attivazione della GPU: verifica su docs.opendronemap.org per la tua versione.

Per la differenza tra i due motori vedi Ecosistema WebODM e OpenDroneMap nel 2026 e la Panoramica ODM/ODX. La tabella seguente riassume le dichiarazioni per fase.

Fase WebODM / ODX OpenDroneMap / ODM Cosa conta davvero
Estrazione feature Sì (CUDA, Linux/WSL2), secondo docs.webodm.org "No performance benefit", secondo docs.opendronemap.org GPU (dove dichiarata), poi CPU
Matching e SfM No; ODX annuncia un SfM più veloce, non legato alla GPU No CPU, RAM
Nuvola densa (MVS) No No CPU, RAM
Mesh, texture, DEM, ortofoto No No CPU, RAM, disco
Verificato il 2 settembre 2026 2 settembre 2026

In pratica: se il tuo collo di bottiglia è la memoria, la GPU non cambia nulla in nessuna delle due linee. Se elabori molte immagini ad alta risoluzione con --feature-quality alta in WebODM, il risparmio dichiarato riguarda l'estrazione delle feature. Se vuoi sapere quanto vale sul tuo hardware, misuralo con il protocollo della guida Stesso dataset, due motori. La guida Ottimizzare tempi e memoria spiega quali leve incidono di più.

Prerequisiti#

  • Una scheda NVIDIA con supporto CUDA. Per le RTX serie 50 il supporto è dichiarato da ODX; con ODM 3.6.0 verifica nella documentazione ufficiale.
  • Linux (Ubuntu consigliato) oppure Windows 11 con Docker Desktop e WSL2. Su macOS non ci sono GPU NVIDIA utilizzabili.
  • Per la linea WebODM: WebODM installato da repository con Docker, perché lo script webodm.sh è ciò che passa la GPU ai container. Per l'installer nativo di Windows consulta la documentazione ufficiale: questa guida copre solo Docker.
  • Per la linea OpenDroneMap: la documentazione ufficiale della tua versione (docs.opendronemap.org), perché la scheda di riferimento non riporta una procedura GPU per OpenDroneMap Desktop o NodeODM.
  • RAM adeguata al dataset, come indicato in Requisiti hardware.

Procedura#

1. Installare il driver NVIDIA#

Su Ubuntu installa il driver proprietario NVIDIA dal gestore dei driver del sistema o dai repository ufficiali. Su Windows con WSL2 installa il driver NVIDIA per Windows dal sito del produttore: è il driver di Windows che espone la GPU alle distribuzioni WSL, non serve installare driver dentro Ubuntu/WSL.

Riavvia e controlla che il driver funzioni. Il comando seguente interroga il driver e mostra scheda, versione e utilizzo della memoria.

bash
nvidia-smi

Devi vedere una tabella con il nome della scheda e la versione del driver. Se il comando non esiste o restituisce un errore, fermati qui: nulla di ciò che segue funzionerà finché il driver non è a posto.

2. Installare NVIDIA Container Toolkit#

Docker non vede la GPU da solo. Serve il NVIDIA Container Toolkit, il componente che permette ai container di usare la scheda. Segui la guida di installazione ufficiale di NVIDIA, che copre Ubuntu e altre distribuzioni; al termine riavvia il servizio Docker come indicato nella stessa guida. Su Windows, Docker Desktop con backend WSL2 integra il supporto GPU: verifica nella documentazione di Docker Desktop che sia attivo.

Per controllare che i container vedano la scheda, esegui nvidia-smi dentro un container qualsiasi con supporto CUDA, come descritto nella guida NVIDIA. Se la tabella compare anche lì, il toolkit è configurato.

3. Attivare la GPU nel software di elaborazione#

I primi due passi (driver e toolkit) valgono per qualunque container che usi la GPU. Da qui la procedura dipende dalla linea.

WebODM / ODX

Entra nella cartella in cui hai clonato WebODM e riavvia con il flag dedicato. Lo script ferma i container in esecuzione e li rilancia usando le immagini con supporto GPU.

bash
./webodm.sh restart --gpu                                   # NVIDIA driver + NVIDIA Container Toolkit

Attendi il download delle immagini (la prima volta può richiedere diversi minuti) e la ripartenza dell'interfaccia su http://localhost:8000.

Il flag --gpu si combina con gli altri: se già usi --media-dir, --ssl o --hostname, ripetili nello stesso comando, altrimenti WebODM riparte con i valori predefiniti.

OpenDroneMap / ODM

La documentazione ODM dichiara che la GPU "currently provides no performance benefit" e la scheda di riferimento di questo sito non riporta un comando equivalente a --gpu per OpenDroneMap Desktop, per NodeODM (opendronemap/nodeodm) o per ODM da riga di comando (opendronemap/odm). Se vuoi comunque provare, verifica su docs.opendronemap.org e sul README delle immagini su Docker Hub se la tua versione prevede una variante con supporto GPU e come avviarla. Non deduciamo il comando della linea OpenDroneMap da quello di WebODM.

4. Verificare che il nodo usi la GPU#

Avvia un'elaborazione su un dataset piccolo e osserva la console del task durante la fase di estrazione delle feature. Contemporaneamente, sul server, esegui nvidia-smi in un secondo terminale: la memoria della GPU occupata deve salire e nella lista dei processi deve comparire il processo del nodo di elaborazione. Se la memoria resta a zero, la GPU non è in uso. Il controllo con nvidia-smi è indipendente dalla linea: funziona con qualunque container.

Disattivare la GPU per un singolo task#

A volte conviene forzare la CPU, per esempio per confrontare i risultati o se un dataset dà problemi con l'estrazione su GPU. L'opzione --no-gpu disabilita l'uso della scheda per quel task senza toccare l'installazione. Esiste in entrambi i motori: è nell'elenco degli argomenti di ODM 3.6.0 (docs.opendronemap.org/arguments, default False) e in ODX, identico alla data della separazione (controlla docs.webodm.org/options-flags per novità). In WebODM la trovi nel pannello Opzioni al momento di avviare l'elaborazione; in OpenDroneMap Desktop cercala nello stesso pannello, verificando nomi e posizione nella tua versione; da riga di comando la aggiungi in coda al comando docker run (ODM e ODX da riga di comando).

Come verificare

Hai finito quando:

  1. nvidia-smi sul sistema host mostra la scheda e la versione del driver.
  2. nvidia-smi eseguito dentro un container CUDA mostra la stessa scheda (il toolkit funziona).
  3. Linea WebODM: WebODM riparte senza errori con ./webodm.sh restart --gpu e il nodo locale è online. Linea OpenDroneMap: il nodo o il container è avviato come indicato da docs.opendronemap.org per la tua versione.
  4. Durante la fase di estrazione feature di un task la memoria GPU occupata sale. Se resta a zero con la linea OpenDroneMap, il comportamento è coerente con la dichiarazione della sua documentazione.

Problemi frequenti#

"GPU non rilevata" o il nodo parte senza GPU. È il caso più comune, e la documentazione WebODM lo lega quasi sempre a driver o toolkit mancanti. Ripeti i controlli con nvidia-smi prima sull'host e poi dentro un container. Non saltare il riavvio del servizio Docker dopo l'installazione del toolkit. Con la linea OpenDroneMap, ricorda la dichiarazione della sua documentazione prima di cercare un guasto.

Su Windows la GPU funziona in Windows ma non in WSL2. Verifica di avere il driver NVIDIA recente per Windows e Docker Desktop configurato con il backend WSL2. Non installare driver Linux dentro la distribuzione WSL.

I tempi non sono migliorati. È normale se il dataset è piccolo o se il tempo era dominato dalla nuvola densa e dalla mesh. Secondo la documentazione WebODM la GPU interviene solo sull'estrazione delle feature; secondo la documentazione ODM non porta benefici. Rivedi le leve in Ottimizzare tempi e memoria.

Out of memory nonostante la GPU. La memoria che conta per la fotogrammetria è la RAM di sistema, non la VRAM. Consulta Requisiti hardware e la scala immagini → RAM.

L'elaborazione fallisce solo con la GPU attiva. Prova lo stesso dataset con l'opzione --no-gpu: se funziona, il problema è nell'ambiente GPU (driver, toolkit, versione CUDA). Cerca il messaggio esatto nel catalogo Errori comuni e, se non lo trovi, nella community della tua linea (Discord di WebODM; forum community.opendronemap.org).

Prossimi passi#

Fonti

Guide correlate