Ядро PCA в R - ошибка: не может выделить вектор размером 1,1 Гб [дубликат]

Вы можете получить ссылку на любую из открытых форм приложения, используя свойство Application.OpenForms. Forms в этом FormCollection можно получить по индексу следующим образом:

Form form1 = Application.OpenForms[0];

или по свойству формы Name, например:

Form form1 = Application.OpenForms["Form1"];

Надеюсь, что это поможет .

107
задан Gregor 6 July 2018 в 14:13
поделиться

8 ответов

Подумайте, действительно ли вам нужны все эти данные в явном виде или может быть разрешена матрица? В R есть хорошая поддержка (см. Пакет Matrix для, например,) для разреженных матриц.

Сохраняйте все остальные процессы и объекты в R до минимума, когда вам нужно создавать объекты такого размера. Используйте gc(), чтобы очистить неиспользуемую память, или, лучше создать только тот объект, который вам нужен за один сеанс .

Если приведенное выше не поможет, получите 64-разрядную машину с таким количеством оперативной памяти, какую вы можете себе позволить, и установите 64-разрядную R.

Если вы не можете этого сделать, онлайн-сервисы для удаленных вычислений.

Если вы не можете сделать это, инструменты для сопоставления памяти, такие как пакет ff (или bigmemory, как упоминается Sascha), помогут вам построить новое решение. В моем ограниченном опыте ff - это более сложный пакет, но вы должны прочитать тему High Performance Computing в представлении задач CRAN.

55
ответ дан Jaap 16 August 2018 в 01:04
поделиться
  • 1
    задача - классификация изображений, с randomForest. Мне нужно иметь матрицу данных обучения (до 60 полос) и от 20 000 до 6 000 000 строк для подачи на randomForest. В настоящее время я максимизирую примерно 150 000 строк, потому что мне нужен непрерывный блок для хранения полученного объекта randomForest ... И поэтому bigmemory не помогает, так как randomForest требует объект матрицы. – Benjamin 3 March 2011 в 01:41
  • 2
    – Benjamin 3 March 2011 в 01:49
  • 3
    только создавайте «a» один раз, если вы ошибаетесь, первый раз начинаете новый сеанс – mdsumner 6 March 2011 в 23:51
  • 4
    Я бы добавил, что для программ, которые содержат большие циклы, где выполняется множество вычислений, но вывод относительно невелик, более рационально использовать память для внутренней части цикла через Rscript (из BASH или Python Script) , а затем сортировать / суммировать результаты в другом скрипте. Таким образом, память полностью освобождается после каждой итерации. Существует немного расходованных вычислений от повторной загрузки / повторного вычисления переменных, переданных в цикл, но по крайней мере вы можете обойти проблему с памятью. – Benjamin 4 March 2016 в 21:50

Если вы запускаете свой скрипт в среде linux, вы можете использовать эту команду:

bsub -q server_name -R "rusage[mem=requested_memory]" "Rscript script_name.R"

, и сервер будет выделять запрошенную вам память (в соответствии с лимитами сервера, но с хорошим сервером - можно использовать огромные файлы)

6
ответ дан David Arenburg 16 August 2018 в 01:04
поделиться
  • 1
    Могу ли я использовать это на экземпляре Amazon EC2? Если да, то что я ставлю вместо server_name? Я сталкиваюсь с этим cannot allocate vector size..., пытаясь сделать огромную матрицу Document Term в AMI, и я не могу понять, почему у нее недостаточно памяти или сколько еще мне нужно арендовать. Спасибо! – seth127 15 March 2016 в 03:06
  • 2
    Я начинаю Ubuntu и использую Rstudio. У меня 16 ГБ оперативной памяти. Как применить процесс, который вы показываете в ответе. благодаря – runjumpfly 21 October 2016 в 10:35

Самый простой способ обойти это ограничение - переключиться на 64 бит R.

13
ответ дан David Heffernan 16 August 2018 в 01:04
поделиться
  • 1
    Это не лекарство вообще - я переключился, и теперь у меня есть Error: cannot allocate vector of size ... Gb (но да, у меня много данных). – om-nom-nom 11 April 2012 в 18:20
  • 2
    Возможно, это не лекарство, но оно помогает много. Просто загрузите RAM и продолжайте свертывать memory.limit (). Или, может быть, подумайте о разделении / выборке ваших данных. – random_forest_fanatic 29 July 2013 в 20:02
  • 3
    Если у вас возникли проблемы даже в 64-битных версиях, что по сути неограниченно, скорее всего, вы пытаетесь выделить что-то действительно массовое. Вы вычислили, насколько большой вектор должен быть теоретически? В противном случае может случиться так, что вашему компьютеру требуется больше оперативной памяти, но есть только так много, что вы можете иметь. – hangmanwa7id 21 February 2015 в 01:52
  • 4
  • 5
    Более того, это не исключительно проблема с Windows. Я бегу на Ubuntu в настоящее время, 64-бит R, используя Matrix и с трудом манипулируя объектом Matrix 20048 x 96448. – Jan Galkowski 22 May 2018 в 15:55

Я столкнулся с подобной проблемой, и я использовал 2 флеш-накопителя как «ReadyBoost». Эти два диска обеспечили дополнительную память объемом 8 ГБ (для кеша), и она решила проблему, а также увеличила скорость всей системы в целом. Чтобы использовать Readyboost, щелкните правой кнопкой мыши на диске, перейдите к свойствам и выберите «ReadyBoost» и выберите переключатель «использовать это устройство» и нажмите «Применить» или «ОК» для настройки.

8
ответ дан Kwaku Damoah 16 August 2018 в 01:04
поделиться

Вот презентация на эту тему, которая может показаться интересной:

http://www.bytemining.com/2010/08/taking-r-to-the-limit- part-ii-large-datasets-in-r /

Я сам не пробовал обсуждаемые вещи, но пакет bigmemory кажется очень полезным

14
ответ дан Sacha Epskamp 16 August 2018 в 01:04
поделиться
  • 1
    Работает, за исключением случаев, когда ожидается класс матрицы (и не big.matrix) – Benjamin 2 March 2011 в 21:02

Метод сохранения / загрузки, упомянутый выше, работает для меня. Я не уверен, как / if gc() дефрагментирует память, но это, похоже, работает.

# defrag memory 
save.image(file="temp.RData")
rm(list=ls())
load(file="temp.RData")
1
ответ дан Simon Woodward 16 August 2018 в 01:04
поделиться

Для пользователей Windows следующее помогло мне понять некоторые ограничения памяти:

  • перед открытием R, откройте монитор ресурсов Windows (Ctrl-Alt-Delete / Start Task Manager / Performance вкладка / нажмите на нижнюю кнопку «Монитор ресурсов» / вкладка «Память»)
  • вы увидите, сколько RAM-памяти мы уже использовались до того, как вы откроете R и какие приложения. В моем случае используется 1,6 ГБ всего 4 ГБ. Поэтому я смогу получить только 2,4 ГБ для R, но теперь все хуже ...
  • откройте R и создайте набор данных объемом 1,5 ГБ, а затем уменьшите его размер до 0,5 ГБ, монитор ресурсов показывает, что моя оперативная память используется почти на 95%.
  • использовать gc() для сбора мусора => она работает, я вижу, что использование памяти сокращается до 2 ГБ

enter image description here [/g1]

Дополнительные советы, которые работают на моей машине:

  • подготовить функции, сохранить как файл RData, закрыть R, повторно открыть R, и загрузите функции поезда. Диспетчер ресурсов обычно показывает более низкое использование памяти, что означает, что даже gc () не восстанавливает всю возможную память, а закрытие / повторное открытие R лучше всего работает с максимальной доступной памятью.
  • другой трюк состоит в том, чтобы загружать только набор для тренировки (не загружайте тестовый комплект, который обычно может составлять половину размера набора поезда). Фаза тренировки может использовать максимальную память (100%), поэтому все, что доступно, полезно. Все это нужно взять с солью, поскольку я экспериментирую с ограничениями памяти R.
38
ответ дан tucson 16 August 2018 в 01:04
поделиться
  • 1
    R делает сборку мусора самостоятельно, gc() - просто иллюзия. Проверка диспетчера задач - это просто базовые операции с окнами. Единственный совет, с которым я могу согласиться, заключается в сохранении формата .RData – David Arenburg 15 July 2014 в 11:23
  • 2
    @DavidArenburg gc () - иллюзия? Это означало бы, что изображение, которое у меня выше, показывает падение использования памяти, является иллюзией. Я думаю, вы ошибаетесь, но я могу ошибаться. – tucson 15 July 2014 в 13:04
  • 3
    Я не имел в виду, что gc() не работает. Я просто хочу сказать, что R делает это автоматически, поэтому вам не нужно делать это вручную. См. здесь – David Arenburg 15 July 2014 в 13:09
  • 4
    @DavidArenburg Я могу сказать вам, что падение использования памяти на изображении выше связано с командой gc (). Я не верю, что документ, на который вы указываете, является правильным, по крайней мере, не для моей настройки (Windows, R версии 3.1.0 (2014-04-10) Платформа: i386-w64-mingw32 / i386 (32-разрядная версия)). – tucson 15 July 2014 в 13:16
  • 5
    Хорошо, в последний раз. gc() Работает . Вам просто не нужно использовать его, потому что R делает это внутренне – David Arenburg 15 July 2014 в 13:22
-1
ответ дан Rajib Kumar De 29 October 2018 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: