R случайный лес на Amazon ec2 Ошибка: невозможно выделить вектор размером 5,4 Гб

9

Я тренирую модели случайных лесов на R, используя randomForest()1000 деревьев и фреймы данных с примерно 20 предикторами и 600К строк. На моем ноутбуке все работает нормально, но когда я перехожу на amazon ec2, чтобы запустить то же самое, я получаю ошибку:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Я использую c3.4xlargeтип экземпляра, так что это довольно круто. Кто-нибудь знает обходной путь для этого, чтобы заставить его работать на этом экземпляре? Я хотел бы знать нюансы памяти, которые вызывают эту проблему только на экземпляре ec2, а не на моем ноутбуке (процессор OS X 10.9.5 2,7 ГГц Intel Core i7; память 16 ГБ 1600 МГц DDR3)

Спасибо.

Итан
источник

Ответы:

5

Вот несколько советов (используйте на свой страх и риск!):

Если вышеперечисленные более простые меры не помогают ИЛИ вам нужно добиться большей масштабируемости и / или производительности , включая возможность распараллеливания процесса на одной машине или на нескольких машинах, рассмотрите возможность использования bigrfпакета R: http: // cran. r-project.org/web/packages/bigrf . Также смотрите это обсуждение: https://stackoverflow.com/q/1358003/2872891 .

Александр Блех
источник
2

В дополнение к другим идеям: сокращайте свои данные, пока не поймете, что можно запустить на экземпляре Amazon. Если он не может выполнить 100 тыс. Строк, значит что-то не так, если он потерпит неудачу на 590 тыс. Строк, то это маргинальное значение.

Экземпляр c3.4xlarge имеет 30 ГБ ОЗУ, так что да, этого должно быть достаточно.

Spacedman
источник
2

Всегда полезно просто гуглить точную ошибку, которую вы видите, исключая такие особенности, как фактическая память вектора. Для меня первым хитом была интересная документация под названием « R: пределы памяти R », где под «Unix» можно прочитать:

Ограничение адресного пространства зависит от системы: 32-разрядные ОС накладывают ограничение не более 4 ГБ: часто оно составляет 3 ГБ. Запуск 32-разрядных исполняемых файлов в 64-разрядной ОС будет иметь аналогичные ограничения: 64-разрядные исполняемые файлы будут иметь практически неограниченный системный предел (например, 128 ТБ для Linux на процессоре x86_64).

См. Справку ОС / оболочки по таким командам, как limit или ulimit, чтобы узнать, как наложить ограничения на ресурсы, доступные для одного процесса. Например, пользователь bash может использовать

ulimit -t 600 -v 4000000

тогда как пользователь csh может использовать

limit cputime 10m limit vmemoryuse 4096m

ограничить процесс до 10 минут процессорного времени и (около) 4 ГБ виртуальной памяти. (Существуют и другие варианты использования ОЗУ, но они обычно не соблюдаются.)

Итак, вы должны проверить

  1. Какой тип ОС вы используете на своем экземпляре EC2
  2. Какой тип сборки R вы используете в этой ОС, и убедитесь, что вы используете 64-битную версию
  3. Если оба уже 64-битные, используйте ulimitдля установки памяти, например, 8 ГБ:ulimit -v 8000000
logc
источник