2017-08-31 2 views
1

Ich versuche, ein maschinelles Lernen Modell mit H2O zu trainieren (3.14). Meine Datenmenge ist 4 GB und mein Computer-RAM ist 2 GB mit 2G Swap, JDK 1.8. Siehe hierzu article, H2O kann einen riesigen Datensatz mit 2 GB RAM verarbeiten.Wie mit einem großen Datensatz mit H2O beschäftigen

  • Ein Hinweis auf Bigger Daten und GC: Wir haben einen User-Mode-Swap-to-Disk, wenn der Java-Heap zu voll wird, das heißt, Sie verwenden mehr als Big Data physikalischen DRAM. Wir werden nicht mit einer GC-Tod-Spirale sterben, aber wir werden degradieren zu Out-of-Core-Geschwindigkeiten. Wir werden so schnell gehen wie die Platte erlauben wird. Ich habe persönlich das Laden eines 12Gb-Datensatzes in eine 2Gb (32bit) JVM getestet; es dauerte etwa 5 Minuten, um die Daten zu laden, und weitere 5 Minuten eine logistische Regression auszuführen.

Einige Fragen rund um diese Themen:

  • Loading data bigger than the memory size in h2o. Die Antwort User-Mode Swap-to-Disk wurde deaktiviert, da die Leistung so schlecht war. Er hat jedoch keine alternative Methode erklärt und wie können die Flags --cleaner in h2o aktiviert werden?

Umgehen 1:

konfigurierte ich den Java-Heap mit Optionen java -Xmx10g -jar h2o.jar. Wenn ich einen Datensatz lade Die H2O Informationen wie folgt:

jedoch JVM alle RAM-Speicher und Swap verbraucht, dann Betriebssystem gestoppt Programm java h2o.

Umgehen 2:

ich installiert H2O spark. Ich kann Dataset laden, aber Funke wurde mit einem vollen Swap-Speicher mit den folgenden Protokollen hängen:

+ FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM! 
09-01 02:01:12.377 192.168.233.133:54321 6965 Thread-47 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM! 
09-01 02:01:12.377 192.168.233.133:54321 6965 Thread-48 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM! 
09-01 02:01:12.381 192.168.233.133:54321 6965 Thread-45 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.3 MB + FREE:426.7 MB == MEM_MAX:2.67 GB), desiredKV=803.2 MB OOM! 
09-01 02:01:12.382 192.168.233.133:54321 6965 Thread-46 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.4 MB + FREE:426.5 MB == MEM_MAX:2.67 GB), desiredKV=840.9 MB OOM! 
09-01 02:01:12.384 192.168.233.133:54321 6965 #e Thread WARN: Swapping! GC CALLBACK, (K/V:1.75 GB + POJO:513.4 MB + FREE:426.5 MB == MEM_MAX:2.67 GB), desiredKV=802.7 MB OOM! 
09-01 02:01:12.867 192.168.233.133:54321 6965 FJ-3-1 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.4 MB + FREE:426.5 MB == MEM_MAX:2.67 GB), desiredKV=1.03 GB OOM! 
09-01 02:01:13.376 192.168.233.133:54321 6965 Thread-46 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=803.2 MB OOM! 
09-01 02:01:13.934 192.168.233.133:54321 6965 Thread-45 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM! 
09-01 02:01:12.867 192.168.233.133:54321 6965 #e Thread WARN: Swapping! GC CALLBACK, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=803.2 MB OOM! 

In diesem Fall denke ich, die gc Sammler für die Reinigung etwas ungenutzten Speicher in Swap warten.

Wie kann ich verarbeiten große Datenmenge mit einem begrenzten RAM-Speicher?

+0

Warum das 'r'-Tag? – shmosel

+0

Ich habe 'r' Tag entfernt. Mein Client ist ein 'r' Programm – khant

Antwort

1

Wenn dies in irgendeiner Weise kommerziell ist, mehr RAM kaufen, oder ein paar Dollar zahlen ein paar Stunden auf einem Cloud-Server zu mieten. Diese

ist, weil die zusätzliche Zeit und Mühe, maschinelles Lernen auf einer Maschine zu tun, die zu klein ist, ist es einfach nicht wert.

Wenn es ein Lernprojekt ohne Budget ist: Schneiden Sie den Datensatz in 8 gleich große Teile (*) und verwenden Sie den ersten Teil, um Ihre Modelle zu erstellen und abzustimmen. (Wenn die Daten nicht zufällig angeordnet sind, schneiden Sie sie in 32 gleiche Teile und dann verketten Teile 1, 9, 17 und 25 oder so ähnlich.)

Wenn Sie wirklich, wirklich, wirklich, muss ein Modell bauen Verwenden Sie den gesamten Datensatz, dann tun Sie immer noch das oben genannte. Speichern Sie dann das Modell und gehen Sie dann zum 2. Ihrer 8 Datensätze. Sie haben bereits Hyperparameter auf diesen Punkt eingestellt, so dass Sie nur ein Modell generieren, und es wird schnell gehen. Wiederholen Sie für die Teile 3 bis 8. Jetzt haben Sie 8 Modelle und können sie in einem Ensemble verwenden.

*: Ich habe mich für 8, die Sie gibt einen 0.5 GB Datenmenge, die ein Viertel des verfügbaren Speichers ist. Für die frühen Experimente würde ich eigentlich empfehlen, noch kleiner zu gehen, z. 50 MB, da es die Iterationen so viel schneller macht.

Noch ein paar Gedanken:

  • H2O komprimiert die Daten im Speicher. Wenn also die 4 GB die unkomprimierte Datengröße wären, könnten Sie mit einem kleineren Speicher auskommen. (Denken Sie jedoch daran, dass die Empfehlung für Speicher ist, der die dreifache Größe Ihrer Daten hat.)
  • Wenn Sie Freunde mit ähnlichen Computern mit kleinem Arbeitsspeicher haben, können Sie sie miteinander vernetzen. 4 bis 8 Computer könnten ausreichen, um Ihre Daten zu laden. Es könnte gut funktionieren, es könnte schrecklich langsam sein, es hängt vom Algorithmus ab (und wie schnell Ihr Netzwerk ist).
+0

Gibt es eine Lösung für die Anpassung eines Modells mit Generator-Methode wie Keras Framework? – khant

+0

@khant Nicht, dass ich mir dessen bewusst bin. Die H2O-Philosophie ist das maschinelle In-Memory-Lernen, das effizient über einen Cluster funktioniert: fügen Sie Maschinen hinzu, bis der gesamte Clusterspeicher groß genug für Ihren Datensatz ist. (Ich habe meiner Antwort noch ein paar weitere Ideen hinzugefügt, hoffe, dass es hilft.) –

1

Der zitierte Artikel von 2014 ist seit Jahren veraltet und bezieht sich auf H2O-2. Das In-H2O-Benutzermodus-Austausch-zu-Datenträger-Konzept war zu dieser Zeit experimentell.

Aber dies wurde nie in H2O-3 unterstützt (welches die Haupt-H2O-Codebasis Anfang 2015 wurde), weil die Leistung schlecht war, wie der erwähnte StackOverflow-Beitrag erklärt.

Verwandte Themen