Blog.

Memory Allocation Problem con tensorflow-gpu? La soluzione!


Autore
Andrea Provino
Data
Tempo di lettura
2 minuti
Categoria
Guide

gpu-allocation-memory-problem-tensorflow-machine-learning-keras-python-object-detection-computer-vision

Allocation of 1931371200 exceeds 10% of system memory. Oppure,
Allocation of 9437184 exceeds 10% of system memory, genericamente:
allocation of ‘numero allucinante‘ exceeds 10% of system bla bla.

Suona familiare?

Nei primi esperimenti con tensorflowgpu mi è capitato più di una volta di incappare in questo spiacevole errore:

Allocation of [x] exceeds 10% of system memory

Il computer cerca di usare più memoria di quanta non ne sia materialmente disponibile e il risultato è il blocco degli script o errori a catena che impediscono ogni successiva procedura.

In questa pagina, ho raccolto alcuni consigli che ho adottato in passato e che mi hanno salvato la vita più di una volta.

Vediamone alcune.

Libera memoria RAM

Spesso la quanità di memoria in ‘overbooking’ è così limitata che chiudere qualche programma particolarmente pesante può fare la differenza.

Riduci il batchsize

In alcuni script è possibile ridurre il batchsize, specie in sessioni di training o di transfer learning, in cui questo valore può risultare fatale. Ricordati che conviene usare multipli di 2. Batch size = 2, 4, 6, 8, 16, 32, etc. 

Riduci il dataset

La dimensioni dei file da gestire durante l’esecuzione di uno script è il principale responsabile del problema. Se le precedenti soluzioni non dovessero funzionare, potrebbe essere necessaria una modifica radicale: cambiare il dataset.

In caso di training, potresti provare a comprimere le immagini con un tool online.

Puoi anche tagliarle e lavorare su immagini più piccole. 

Imposta i limiti

Questa è una soluzione concreta, rispetto agli altri che sono semplici consigli. Usando tensorflow, i tuoi script dovranno, prima o poi, inizializzare la libreria e chiamare una session. Trova quindi, all’interno dei file, il listato:

tf.Session()

E modifica come segue:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=x)
tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

Sostituendo la x con una frazione da 0 a 1. Con una 1070 uso 0.7444. E’ appena sotto il limite di memoria utilizzabile (nonostante abbia 8GB, solo 6,1 circa sono occupabili)

Il cloud

L’ultima spiaggia, cambiare computer. Con alcune ricerche online è possibile accedere a diversi servizi che mettono a disposizione, a costi vantaggiosi e non, potenza di calcolo da vendere

Alla prossima!

Un caldo abbraccio, Andrea.

Taggedguidamachine learningtensorflow


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum