2017-10-31 3 views
0

저는 SVMight 스파 스 매트릭스가 ~ 700,000 x ~ 800,000 인 H2O를 사용하고 있습니다. 파일 크기는 디스크에서 약 800MB입니다. 하지만 H2O로 가져 오면 300GB 이상의 RAM이 필요합니까? 과정은 또한 끝내기에는 너무 오래 걸립니다 (~ 15 분).H2O가 희소 행렬로 너무 많은 RAM을 사용합니다.

비교에서 매트릭스 패키지를 사용하여 RAM에 스파 스 매트릭스를 만들고 저장할 수 있습니다. 이 경우 스파 스 매트릭스는 ~ 1.2GB의 RAM을 필요로합니다. 정말 H2O를 즐길이 프로젝트를 위해 그것을 사용하고 싶습니다 때문에

openjdk version "1.8.0_121" 
OpenJDK Runtime Environment (build 1.8.0_121-b13) 
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) 

Starting H2O JVM and connecting: .. Connection successful! 

R is connected to the H2O cluster: 
H2O cluster uptime:   2 seconds 76 milliseconds 
H2O cluster version:  3.14.0.3 
H2O cluster version age: 1 month and 8 days 
H2O cluster name:   H2O_started_from_R_ra2816_fhv677 
H2O cluster total nodes: 1 
H2O cluster total memory: 455.11 GB 
H2O cluster total cores: 24 
H2O cluster allowed cores: 24 
H2O cluster healthy:  TRUE 
H2O Connection ip:   localhost 
H2O Connection port:  54321 
H2O Connection proxy:  NA 
H2O Internal Security:  FALSE 
H2O API Extensions:   XGBoost, Algos, AutoML, Core V3, Core V4 
R Version:     R version 3.4.1 (2017-06-30) 

내가 어떤 조언을 부탁드립니다 :

library(h2o) 
h2o.init(nthreads=-1,max_mem_size = "512g") 

x <- h2o.importFile('test2.svmlight', parse = TRUE) 

가 여기 내 시스템입니다 :

다음은 내 코드입니다.

답변

2

H2O는 열 크기의 압축 된 저장소에 데이터를 저장하며 거대한 수 (수십억 개)의 행과 많은 수 (천 개 이상)의 열이있는 데이터 집합과 잘 작동하도록 최적화되어 있습니다.

각 열은 H2O가 청크를 호출하는 묶음에 저장됩니다. 청크는 인접한 행 그룹입니다. 청크가 희박할 수 있습니다. 따라서 청크에 10,000 개의 행이 있고 모두 누락 된 경우 해당 청크에 필요한 메모리 양이 실제로 적을 수 있습니다. 하지만 여전히 청크가 있어야합니다.

실제로 H2O가 열을 희박하게 저장하지만 열을 희박하게 저장하지 않는다는 의미입니다. 따라서 광범위한 데이터를위한 순수한 희소 매트릭스 패키지만큼 효율적으로 물건을 저장하지 않습니다.

특정 경우에 800,000 개의 열이 물의 한계를 밀고 있습니다.

H2O에 대해 잘 모르는 한 가지 사실은 범주 형 열을 효율적으로 처리한다는 것입니다. 따라서 데이터를 수동으로 1 핫 인코딩하여 열 폭발이 발생하는 경우 H2O로이를 수행 할 필요가 없습니다. 또 다른 데이터 표현이 더 효율적입니다.

관련 문제