R H2O - Gerenciamento de memória

Estou tentando usar o H2O via R para criar vários modelos usando subconjuntos de um conjunto de dados grande (~ 10 GB). Os dados são de um ano e estou tentando criar 51 modelos (ou seja, treinar na semana 1, prever na semana 2 etc.), com cada semana sendo de 1,5 a 2,5 milhões de linhas com 8 variáveis.

Eu fiz isso dentro de um loop, que eu sei que nem sempre é o melhor caminho para R. Outro problema que descobri foi que a entidade H2O acumularia objetos anteriores, então criei uma função para remover todos eles, exceto os dados principais conjunto.

h2o.clean <- function(clust = localH2O, verbose = TRUE, vte = c()){
  # Find all objects on server
  keysToKill <- h2o.ls(clust)$Key
  # Remove items to be excluded, if any
  keysToKill <- setdiff(keysToKill, vte)
  # Loop thru and remove items to be removed
  for(i in keysToKill){
    h2o.rm(object = clust, keys = i)

    if(verbose == TRUE){
      print(i);flush.console()

    }    
  }
  # Print remaining objects in cluster.
  h2o.ls(clust)
}

O script funciona bem por um tempo e depois falha - geralmente com uma reclamação sobre a falta de memória e a troca para o disco.

Aqui estão alguns pseudo-códigos para descrever o processo

# load h2o library
library(h2o)
# create h2o entity
localH2O = h2o.init(nthreads = 4, max_mem_size = "6g")
# load data
dat1.hex = h2o.importFile(localH2O, inFile, key = "dat1.hex")

# Start loop
for(i in 1:51){
# create test/train hex objects
train1.hex <- dat1.hex[dat1.hex$week_num == i,]
test1.hex <- dat1.hex[dat1.hex$week_num == i + 1,]
# train gbm
dat1.gbm <- h2o.gbm(y = 'click_target2', x = xVars, data = train1.hex
                      , nfolds = 3
                      , importance = T
                      , distribution = 'bernoulli' 
                      , n.trees = 100
                      , interaction.depth = 10,
                      , shrinkage = 0.01
  )
# calculate out of sample performance
test2.hex <- cbind.H2OParsedData(test1.hex,h2o.predict(dat1.gbm, test1.hex))
colnames(test2.hex) <- names(head(test2.hex))
gbmAuc <- h2o.performance(test2.hex$X1, test2.hex$click_target2)@model$auc

# clean h2o entity
h2o.clean(clust = localH2O, verbose = F, vte = c('dat1.hex'))

} # end loop

Minha pergunta é qual, se houver, é a maneira correta de gerenciar dados e memória em uma entidade autônoma (isso NÃO está sendo executado no hadoop ou em um cluster - apenas uma instância grande do EC2 (~ 64gb RAM + 12 CPUs)) para esse tipo de processo? Devo estar matando e recriando a entidade H2O após cada loop (esse era o processo original, mas a leitura de dados do arquivo toda vez adiciona ~ 10 minutos por iteração)? Existe uma maneira adequada de coletar ou liberar memória após cada loop?

Todas as sugestões serão apreciadas.

questionAnswers(3)

yourAnswerToTheQuestion