R zufällige Gesamtstruktur auf Amazon ec2 Fehler: Vektor mit einer Größe von 5,4 GB kann nicht zugeordnet werden

9

Ich trainiere zufällige randomForest()Waldmodelle in R mit 1000 Bäumen und Datenrahmen mit etwa 20 Prädiktoren und 600K Zeilen. Auf meinem Laptop funktioniert alles einwandfrei, aber wenn ich zu amazon ec2 wechsle, um dasselbe auszuführen, wird folgende Fehlermeldung angezeigt:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Ich verwende den c3.4xlargeInstanztyp, also ist er ziemlich bullig. Kennt jemand eine Problemumgehung, damit es auf dieser Instanz ausgeführt wird? Ich würde gerne die Speichernuancen kennen, die dieses Problem nur auf der ec2-Instanz und nicht auf meinem Laptop verursachen (OS X 10.9.5 Prozessor 2,7 GHz Intel Core i7; Speicher 16 GB 1600 MHz DDR3).

Vielen Dank.

Ethan
quelle

Antworten:

5

Hier einige Ratschläge (Verwendung auf eigenes Risiko!):

Wenn die oben genannten einfacheren Maßnahmen nicht helfen ODER Sie mehr Skalierbarkeit und / oder Leistung erzielen möchten , einschließlich der Möglichkeit, den Prozess auf einer einzelnen Maschine oder über mehrere Maschinen hinweg zu parallelisieren, sollten Sie das bigrfR-Paket http: // cran verwenden. r-project.org/web/packages/bigrf . Siehe auch diese Diskussion: /programming//q/1358003/2872891 .

Aleksandr Blekh
quelle
2

Zusätzlich zu anderen Ideen: Reduzieren Sie Ihre Daten, bis Sie herausgefunden haben, was Sie auf der Amazon-Instanz ausführen können . Wenn es keine 100.000 Zeilen ausführen kann, stimmt etwas nicht. Wenn es bei 590.000 Zeilen fehlschlägt, ist es marginal.

Die c3.4xlarge-Instanz verfügt über 30 GB RAM, also sollte dies ausreichen.

Spacedman
quelle
2

Es ist immer hilfreich, nur den genauen Fehler zu googeln, den Sie sehen, mit Ausnahme von Details wie dem tatsächlichen Speicher des Vektors. Für mich war der erste Treffer eine interessante Dokumentation namens " R: Speichergrenzen von R ", in der man unter "Unix" lesen kann:

Das Adressraumlimit ist systemspezifisch: 32-Bit-Betriebssysteme legen ein Limit von nicht mehr als 4 GB fest: Oft sind es 3 GB. Das Ausführen von ausführbaren 32-Bit-Dateien unter einem 64-Bit-Betriebssystem hat ähnliche Einschränkungen: Ausführbare 64-Bit-Dateien haben eine im Wesentlichen unendliche systemspezifische Beschränkung (z. B. 128 TB für Linux unter x86_64-CPU).

In der Hilfe des Betriebssystems / der Shell zu Befehlen wie limit oder ulimit erfahren Sie, wie Sie die für einen einzelnen Prozess verfügbaren Ressourcen einschränken können. Zum Beispiel könnte ein Bash-Benutzer verwenden

ulimit -t 600 -v 4000000

wohingegen ein csh-Benutzer verwenden könnte

limit cputime 10m limit vmemoryuse 4096m

um einen Prozess auf 10 Minuten CPU-Zeit und (ungefähr) 4 GB virtuellen Speicher zu beschränken. (Es gibt andere Optionen zum Einstellen des verwendeten Arbeitsspeichers, die jedoch im Allgemeinen nicht berücksichtigt werden.)

Also sollten Sie überprüfen

  1. Welche Art von Betriebssystem führen Sie auf Ihrer EC2-Instanz aus?
  2. Welche Art von R-Build führen Sie auf diesem Betriebssystem aus und stellen Sie sicher, dass Sie eine 64-Bit-Version ausführen
  3. Wenn beide bereits 64 Bit sind, verwenden Sie ulimit, um den Speicher auf z. B. 8 GB einzustellen:ulimit -v 8000000
logc
quelle