Zarządzanie pamięcią R / nie można przydzielić wektora wielkości N Mb
Mam problemy z używaniem dużych obiektów w R. na przykład:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
Rozumiem, że jest to związane z trudnością uzyskania sąsiadujących bloków pamięci (z tutaj):
Jak mogę to obejść? Moja główna trudność polega na tym, że dochodzę do pewnego punktu w moim skrypcie i R nie może przeznaczyć 200-300 Mb dla obiektu... Nie mogę wstępnie przydzielić bloku, ponieważ potrzebuję pamięci do innego przetwarzania. Dzieje się tak nawet wtedy, gdy delikatnie usuwam niepotrzebne przedmioty.Rozpoczynanie komunikatów o błędach nie może przeznaczyć wektor wielkości wskazuje a brak pamięci, albo Ponieważ rozmiar przekroczył adres-limit miejsca dla procesu lub, bardziej prawdopodobne, ponieważ system był nie mogę dostarczyć pamięci. Uwaga że na 32-bitowej kompilacji może dobrze być wystarczająco wolnej pamięci dostępnej, ale nie wystarczająco duży przylegający blok przestrzeń adresowa, do której można ją mapować.
EDIT: tak, przepraszam: Windows XP SP3, 4GB RAM, R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
9 answers
Zastanów się, czy naprawdę potrzebujesz wszystkich tych danych jawnie, czy może macierz być rzadka? Istnieje dobre wsparcie w R (patrz Matrix
pakiet dla np.) dla rzadkich macierzy.
Zachowaj wszystkie inne procesy i obiekty w R do minimum, gdy musisz tworzyć obiekty o takim rozmiarze. Użyj gc()
, aby wyczyścić nieużywaną pamięć, lub lepiej Utwórz tylko potrzebny obiekt w jednej sesji.
Jeśli powyższe nie może pomóc, Pobierz 64-bitową maszynę z taką ilością pamięci RAM, na jaką cię stać, i zainstaluj 64-bit R.
Jeśli nie możesz tego zrobić, istnieje wiele usług online do zdalnego przetwarzania.
Jeśli nie możesz tego zrobić, narzędzia do mapowania pamięci, takie jak pakiet ff
(lub bigmemory
, Jak wspomina Sascha), pomogą Ci zbudować nowe rozwiązanie. Z mojego ograniczonego doświadczenia ff
jest bardziej zaawansowanym pakietem, ale powinieneś przeczytać temat High Performance Computing
na temat widoków Zadań CRAN.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 11:11:54
Dla użytkowników systemu Windows, poniższe bardzo pomogły mi zrozumieć pewne ograniczenia pamięci:
- przed otwarciem R otwórz monitor zasobów systemu Windows (Ctrl-Alt-Delete / Uruchom Menedżera zadań / kartę Wydajność / kliknij dolny przycisk "Monitor zasobów" / kartę pamięci)
- zobaczysz, ile pamięci RAM u nas już używane przed otwarciem R, i przez które aplikacje. W moim przypadku używa się 1,6 GB z wszystkich 4GB. Więc będę mógł dostać tylko 2,4 GB na R, ale teraz przychodzi tym gorzej...
- Otwórz R i Utwórz zestaw danych 1.5 GB, a następnie zmniejsz jego rozmiar do 0.5 GB, Monitor zasobów pokazuje, że moja pamięć RAM jest używana w prawie 95%.
- użyj {[0] } aby zrobić garbage collection = > to działa, widzę, że zużycie pamięci spadnie do 2 GB
Dodatkowa rada, która działa na mojej maszynie:
- Przygotuj funkcje, Zapisz jako plik RData, Zamknij R, Otwórz ponownie R i załaduj funkcje pociągu. Menedżer zasobów zazwyczaj pokazuje niższą Użycie pamięci, co oznacza, że nawet gc () nie odzyskuje całej możliwej pamięci, a zamknięcie/ponowne otwarcie R działa najlepiej, aby rozpocząć z maksymalną dostępną pamięcią.
- Druga sztuczka polega na załadowaniu zestawu treningowego tylko do treningu (nie ładuj zestawu testowego, który zazwyczaj może być o połowę mniejszy niż zestaw treningowy). Faza treningu może wykorzystywać pamięć do maksimum( 100%), więc wszystko, co dostępne, jest przydatne. Wszystko to ma być z przymrużeniem oka, ponieważ eksperymentuję z pamięcią R limity.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 10:16:44
Poszedłem na stronę pomocy memory.limit
i dowiedziałem się, że na moim komputerze r domyślnie może używać do ~ 1,5 GB PAMIĘCI RAM i że użytkownik może zwiększyć ten limit. Używając poniższego kodu,
>memory.limit()
[1] 1535.875
> memory.limit(size=1800)
Pomógł mi rozwiązać mój problem.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-05 10:15:51
Oto prezentacja na ten temat, która może Cię zainteresować:
Http://www.bytemining.com/2010/08/taking-r-to-the-limit-part-ii-large-datasets-in-r/
Sam nie próbowałem omawianych rzeczy, ale bigmemory
pakiet wydaje się bardzo przydatny
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 18:32:15
Najprostszym sposobem na uniknięcie tego ograniczenia jest przejście na 64-bitowy R.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-03 20:14:08
Napotkałem podobny problem i użyłem 2 pendrive 'ów jako 'ReadyBoost'. Oba dyski dały dodatkowe 8GB doładowania pamięci (dla pamięci podręcznej) i rozwiązały problem, a także zwiększyły szybkość systemu jako całości. Aby użyć Readyboost, kliknij prawym przyciskiem myszy na dysku, przejdź do właściwości i wybierz "ReadyBoost" i wybierz przycisk radiowy "użyj tego urządzenia" i kliknij zastosuj lub ok, aby skonfigurować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 20:31:29
Jeśli uruchamiasz skrypt w środowisku linux, możesz użyć tego polecenia:
bsub -q server_name -R "rusage[mem=requested_memory]" "Rscript script_name.R"
I serwer przydzieli żądaną pamięć dla Ciebie (zgodnie z limitami serwera, ale przy dobrym serwerze można użyć Plików)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-20 18:04:49
Opisana powyżej metoda save/load działa dla mnie. Nie jestem pewien jak / Czy gc()
defragmentuje pamięć, ale to chyba działa.
# defrag memory
save.image(file="temp.RData")
rm(list=ls())
load(file="temp.RData")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 00:48:11
Mam 2GB 32-bitowy laptop z windows 10. I miałem do czynienia z tym samym problemem R. Napotkałem problem nie można przydzielić wektora 150MB, i tak.. Włożyłem więcej pamięci RAM , płytę RAM o pojemności 1GB na moim laptopie, jeśli byłby to problem z pamięcią RAM, różnica 150MB zostałaby całkowicie pokryta.
Sytuacja wcale się nie poprawiła.. Miałem dokładnie taki sam problem jak z 2GB RAM... nie można przydzielić wektora 150Mb....Zrobiłem pamięć.limit trick i polecenie gc() wspomniane wcześniej, ale żadna różnica.
Jestem bardzo przekonany, że ten problem jest kwestią korzystania z 32-bitowego systemu operacyjnego i nie jest bezpośrednio związany z pamięcią RAM. Więc rozwiązaniem tego jest 64-bitowy OS.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-11 15:48:08