Я пытаюсь распараллелить обучение нескольких моделей ML, используя функцию autoML, предоставляемую H2O. Основной код, который я использую, следующий:
library(foreach)
library(doParallel)
project_folder <- "/home/user/Documents/"
ncores <- parallel::detectCores(logical = FALSE)
nlogiccpu <- parallel::detectCores()
max_mem_size <- "4G"
cl<-makeCluster(nlogiccpu)
registerDoParallel(cl)
df4 <-foreach(i = as.numeric(seq(1,length(divisions))), .combine=rbind) %dopar% {
library(dplyr)
library(h2o)
h2o.init(nthreads = ncores, max_mem_size = max_mem_size)
div <- divisions[i]
df.h2o <- as.h2o(
df %>% filter(code == div) )
y <- "TARGET"
x <- names(df.train.x.discretized)
automl.models.h2o <- h2o.automl(
x = x,
y = y,
training_frame = df.h2o,
nfolds = 10,
seed = 111,
project_name = paste0("PRJ_", div)
)
leader <- automl.models.h2o@leader
div_folder <- file.path(project_folder, paste0("Division_", div))
h2o.saveModel(leader,
path = file.path(div_folder, "TARGET_model_bin"))
...
}
Только часть всех моделей обучена и сохранена в их папке, потому что в какой-то момент я получил следующую ошибку:
water.exceptions.H2OIllegalArgumentException: недопустимый аргумент:
training_frame of function: grid: Невозможно добавить новые модели в сетку
с разными тренировочными входами
Я предполагаю, что сетки используются во время фазы autoML, поэтому я попытался найти параметр для передачи grid_id
, как я могу сделать в функции h2o.grid
, следующим образом:
grid <- h2o.grid(“gbm”, grid_id = paste0(“gbm_grid_id”, div),
...)
но я не могу найти способ сделать это.
Используемая версия пакета H2O - 3.24.0.2.
Есть предложения?