Foresta casuale R su Amazon ec2 Errore: impossibile allocare un vettore di dimensioni 5,4 Gb


9

Sto addestrando modelli forestali casuali in R usando randomForest()con 1000 alberi e frame di dati con circa 20 predittori e 600K righe. Sul mio laptop tutto funziona bene, ma quando passo ad Amazon ec2, per eseguire la stessa cosa, ottengo l'errore:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Sto usando il c3.4xlargetipo di istanza, quindi è piuttosto muscoloso. Qualcuno conosce una soluzione alternativa per farlo funzionare su questa istanza? Mi piacerebbe conoscere le sfumature di memoria che causano questo problema solo sull'istanza ec2 e non sul mio laptop (processore OS X 10.9.5 Intel Core i7 da 2,7 GHz; memoria 16 GB 1600 MHz DDR3)

Grazie.

Risposte:


5

Ecco alcuni consigli (usare a proprio rischio e pericolo!):

Se le misure più semplici sopra menzionate non aiutano OPPURE si desidera ottenere maggiore scalabilità e / o prestazioni , inclusa la possibilità di parallelizzare il processo su una singola macchina o su più macchine, prendere in considerazione l'uso del bigrfpacchetto R: http: // cran. r-project.org/web/packages/bigrf . Vedi anche questa discussione: https://stackoverflow.com/q/1358003/2872891 .


2

Aggiunta ad altre idee: riduci i tuoi dati fino a quando non scopri cosa puoi eseguire sull'istanza di Amazon. Se non è in grado di eseguire 100.000 righe, allora c'è qualcosa che non va, se fallisce a 590.000 righe è marginale.

L'istanza c3.4xlarge ha 30 GB di RAM, quindi sì dovrebbe essere sufficiente.


2

È sempre utile solo a Google l'errore esatto che stai vedendo, escludendo dettagli come l'effettiva memoria del vettore. Per me, il primo successo è stata un'interessante documentazione chiamata " R: Memory limits of R ", dove, sotto "Unix", si può leggere:

Il limite dello spazio indirizzo è specifico del sistema: i sistemi operativi a 32 bit impongono un limite non superiore a 4 Gb: spesso è 3Gb. L'esecuzione di eseguibili a 32 bit su un sistema operativo a 64 bit avrà limiti simili: gli eseguibili a 64 bit avranno un limite specifico del sistema sostanzialmente infinito (ad esempio, 128 TB per Linux su cpus x86_64).

Consultare la guida del sistema operativo / shell su comandi come limit o ulimit per come imporre limiti alle risorse disponibili per un singolo processo. Ad esempio un utente bash potrebbe usare

ulimit -t 600 -v 4000000

mentre un utente csh potrebbe usare

limit cputime 10m limit vmemoryuse 4096m

per limitare un processo a 10 minuti di tempo della CPU e (circa) 4 GB di memoria virtuale. (Esistono altre opzioni per impostare la RAM in uso, ma non sono generalmente rispettate.)

Quindi, dovresti controllare

  1. Che tipo di sistema operativo stai eseguendo sulla tua istanza EC2
  2. Che tipo di build R stai eseguendo su quel sistema operativo e assicurati di eseguire una versione a 64 bit
  3. Se entrambi sono già a 64 bit, utilizzare ulimitper impostare la memoria, ad esempio 8 GB:ulimit -v 8000000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.