R випадковий ліс на Amazon ec2 Помилка: не можна виділити вектор розміром 5,4 Gb


9

Я randomForest()треную випадкові лісові моделі в R, використовуючи 1000 дерев і кадри даних з приблизно 20 прогнокторами і 600K рядками. На моєму ноутбуці все працює добре, але коли я переходжу на 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. Якщо він не може зробити 100k рядків, то щось дуже неправильно, якщо воно не в 590k рядків, то його граничне.

Екземпляр c3.4xlarge має 30 Гб оперативної пам’яті, так що так, цього має бути достатньо.


2

Завжди корисно лише Google точну помилку, яку ви бачите, виключаючи специфіку, як-от фактична пам'ять вектора. Для мене першим хітом стала цікава документація під назвою " R: Межі пам'яті R ", де під "Unix" можна прочитати:

Межа адресного простору є специфічною для системи: 32-бітні ОС накладають ліміт не більше 4 Гбіт: це часто 3 Гбіт. Запуск 32-бітних виконуваних файлів на 64-розрядної ОС матиме подібні обмеження: 64-бітні виконувані файли матимуть, по суті, нескінченний системний ліміт (наприклад, 128Tb для Linux на x86_64 cpus).

Про те, як накласти обмеження на ресурси, доступні для одного процесу, див. Довідку щодо ОС / оболонки щодо таких команд, як 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для встановлення пам'яті, наприклад, 8Gb:ulimit -v 8000000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.