Как оценить использование памяти для алгоритма Random Forest? - PullRequest
6 голосов
/ 02 апреля 2019

Я пытаюсь установить модель случайного леса с caret.Мои тренировочные данные весят 129 МБ, и я вычисляю это в Google Cloud с 8 ядрами и 52 ГБ ОЗУ.Код, который я использую ниже:

library(caret)
library(doParallel)
cl <- makeCluster(3, outfile = '')
registerDoParallel(cl)
model <- train(x = as.matrix(X_train),
               y = y_train,
               method = 'rf', 
               verbose = TRUE,
               trControl = trainControl(method = 'oob',
                                        verboseIter = TRUE,
                                        allowParallel = TRUE),
               tuneGrid = expand.grid(mtry = c(2:10, 12, 14, 16, 20)),
               num.tree = 100,
               metric = 'Accuracy',
               performance = 1)
stopCluster(cl)

Несмотря на наличие 8 ядер, любая попытка использовать более 3 ядер в makeCluster приводит к следующей ошибке:

Ошибка в unserialize (socklist [[n]]): ошибка чтения из соединения

Так что я подумал, что может быть проблема с выделением памяти, и пробовал только с 3 ядрами.После нескольких часов тренировок, когда я ожидал получить результат, единственное, что я получил, к моему изумлению, это следующая ошибка:

Ошибка: невозможно выделить вектор размером 1,9 Гб

Тем не менее мой экземпляр облака Google имеет 52 ГБ памяти, поэтому я решил проверить, сколько из него в настоящее время свободно.

as.numeric(system("awk '/MemFree/ {print $2}' /proc/meminfo", intern=TRUE))

[1] 5606656

Что превышает 47 ГБ.Таким образом, при условии, что 2 ГБ не могли быть выделены в конце обучения, кажется, что более 45 ГБ было использовано для обучения случайного леса.Я знаю, что мой учебный набор данных загружается 100 раз, чтобы вырастить случайный лес, поэтому 100 копий тренировочных данных весят около 13 ГБ.В то же время моя общая оперативная память разделена на 3 кластера, что дает мне 39 ГБ.Это должно оставить у меня около 6 ГБ, но, видимо, нет.Тем не менее, это предполагает, что память не освобождается после разделения деревьев, и я сомневаюсь, что это так.

Поэтому у меня следующие вопросы:

  1. Являются ли мои приблизительные вычисления даже нормальными?
  2. Что может вызвать мои ошибки?
  3. Какя могу оценить, сколько оперативной памяти мне нужно для тренировки модели с моими данными обучения?
...