2015-12-04 11 views
7

Eksperymentuję z ładowaniem danych większych niż rozmiar pamięci w h2o.Ładowanie danych większych niż rozmiar pamięci w h2o

H2o blog wspomina: A note on Bigger Data and GC: We do a user-mode swap-to-disk when the Java heap gets too full, i.e., you’re using more Big Data than physical DRAM. We won’t die with a GC death-spiral, but we will degrade to out-of-core speeds. We’ll go as fast as the disk will allow. I’ve personally tested loading a 12Gb dataset into a 2Gb (32bit) JVM; it took about 5 minutes to load the data, and another 5 minutes to run a Logistic Regression.

Oto kod R połączyć się h2o 3.6.0.8:

h2o.init(max_mem_size = '60m') # alloting 60mb for h2o, R is running on 8GB RAM machine 

daje

java version "1.8.0_65" 
Java(TM) SE Runtime Environment (build 1.8.0_65-b17) 
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode) 

.Successfully connected to http://127.0.0.1:54321/ 

R is connected to the H2O cluster: 
    H2O cluster uptime:   2 seconds 561 milliseconds 
    H2O cluster version:  3.6.0.8 
    H2O cluster name:   H2O_started_from_R_RILITS-HWLTP_tkn816 
    H2O cluster total nodes: 1 
    H2O cluster total memory: 0.06 GB 
    H2O cluster total cores: 4 
    H2O cluster allowed cores: 2 
    H2O cluster healthy:  TRUE 

Note: As started, H2O is limited to the CRAN default of 2 CPUs. 
     Shut down and restart H2O as shown below to use all your CPUs. 
      > h2o.shutdown() 
      > h2o.init(nthreads = -1) 

IP Address: 127.0.0.1 
Port  : 54321 
Session ID: _sid_b2e0af0f0c62cd64a8fcdee65b244d75 
Key Count : 3 

Próbowałem załadować 169 MB csv do H2O.

dat.hex <- h2o.importFile('dat.csv') 

który wyrzucił błąd,

Error in .h2o.__checkConnectionHealth() : 
    H2O connection has been severed. Cannot connect to instance at http://127.0.0.1:54321/ 
Failed to connect to 127.0.0.1 port 54321: Connection refused 

co wskazuje brak pamięci error.

Pytanie: Jeśli H2o obiecuje ładowanie zestawu danych większego niż jego pojemność (mechanizm wymiany na dysk opisany powyżej), czy jest to właściwy sposób ładowania danych?

Odpowiedz

5

Zamień na dysk był domyślnie wyłączony jakiś czas temu, ponieważ wydajność była taka zła. Krwawienie (nie ostatnie stabilne) ma flagę do włączenia: "--cleaner" (dla "czyszczenia pamięci").
Należy pamiętać, że klaster ma bardzo małe pamięci: H2O cluster total memory: 0.06 GB To 60 MB! Zaledwie wystarczy, aby uruchomić JVM, a jeszcze mniej uruchomić H2O. Byłbym zdziwiony, gdyby H2O mógł w ogóle poprawnie pojawić się w tym miejscu, nie mówiąc o wymianie na dysk. Zamiana jest ograniczona do zamiany samych danych. Jeśli próbujesz wykonać test swap, zwiększ swoją maszynę JVM do 1 lub 2 gigabajtów RAM, a następnie załaduj zestawy danych, które sumują więcej.

Cliff

+0

Dzięki klifowi. Próbowałem przetestować funkcję 'swap-to-disk', celowo ograniczając użycie pamięci RAM w H2O. Zrobię to krwawiące wydanie i więcej pamięci RAM. – talegari

+0

@Cliff, czy znasz jakieś, próbowałeś używać swap-to-disk na znacznie szybszym (o rząd wielkości szybszym) sprzęcie półprzewodnikowym PCIE3-NMVe-M.2, takim jak Samsung 960 Pro? Moje szczęście polega na tym, że ciągle znajduję zestawy danych, które są trochę za duże dla mojego systemu ... Mogę zbudować platformę do eksploracji danych specjalnie do użytku z H2O i jedną z nich, i tyle pamięci RAM, na którą mogę sobie pozwolić . –

Powiązane problemy