R 메모리 관리 / 크기가 nMb인 벡터를 할당할 수 없습니다.
저는 R에서 큰 객체를 사용하려고 하는 문제에 부딪히고 있습니다.예:
> 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
이는 연속적인 메모리 블록(여기서)을 얻기 어려운 문제와 관련이 있습니다.
크기의 벡터를 할당할 수 없다는 오류 메시지는 크기가 프로세서의 주소 공간 제한을 초과했기 때문에 또는 시스템이 메모리를 제공할 수 없었기 때문에 메모리를 가져오지 못했음을 나타냅니다.32비트 빌드에서는 사용 가능한 메모리가 충분할 수 있지만 매핑할 주소 공간의 크기가 충분하지 않습니다.
어떻게 하면 피할 수 있을까요?저의 가장 큰 어려움은 스크립트의 특정 지점에 도달하고 R이 객체에 200-300Mb를 할당할 수 없다는 것입니다.다른 처리를 위해 메모리가 필요하기 때문에 블록을 사전 할당할 수 없습니다.불필요한 개체를 조심스럽게 제거해도 이러한 현상이 발생합니다.
편집: 예, 죄송합니다. Windows XP SP3, 4Gb RAM, R2.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
이 모든 데이터가 실제로 필요한지 또는 행렬이 희소할 수 있는지 고려해 보십시오.R에서 좋은 지원이 있습니다( 참조).Matrix
(예:)에 대한 패키지입니다.
이 크기의 개체를 만들어야 하는 경우 R의 다른 모든 프로세스 및 개체를 최소화합니다.사용하다gc()
사용하지 않는 메모리를 지우거나 한 세션에 필요한 개체만 만드는 것이 좋습니다.
위의 방법이 없다면 RAM이 가능한 한 많은 64비트 시스템을 구입하고 64비트 R을 설치합니다.
그렇게 할 수 없다면 원격 컴퓨팅을 위한 많은 온라인 서비스가 있습니다.
패키지와 같은 메모리 매핑 도구를 사용할 수 없는 경우ff
(또는)bigmemory
Sascha가 언급한 바와 같이)이 새로운 솔루션을 구축하는 데 도움이 될 것입니다.나의 제한된 경험에서.ff
더 고급 패키지이지만, 당신은 그것을 읽어야 합니다.High Performance Computing
항목을 참조하십시오.
Windows 사용자의 경우 다음은 일부 메모리 제한 사항을 이해하는 데 큰 도움이 되었습니다.
- R을 열기 전에 Windows Resource Monitor(Ctrl-Alt-Delete / Start Task Manager / Performance 탭 / 하단 버튼 'Resource Monitor' / Memory 탭 클릭)를 엽니다.
- R을 열기 전에 이미 사용한 RAM 메모리의 양과 응용 프로그램을 확인할 수 있습니다.저의 경우, 총 4GB 중 1.6GB가 사용됩니다.그래서 저는 R에 대해 2.4GB만 얻을 수 있을 것입니다. 하지만 지금은 더 나빠지고 있습니다...
- R을 열고 1.5GB의 데이터 세트를 생성한 다음 크기를 0.5GB로 줄이면 Resource Monitor에 RAM이 거의 95% 사용되고 있는 것으로 표시됩니다.
- 가비지 수집에 사용 => 작동합니다. 메모리 사용량이 2GB로 감소하는 것을 볼 수 있습니다.
내 컴퓨터에서 작동하는 추가 조언:
- 형상을 준비하고, RData 파일로 저장하고, R을 닫고, R을 다시 열고, 열차 형상을 로드합니다.리소스 관리자는 일반적으로 메모리 사용량이 낮으므로 gc()도 가능한 모든 메모리를 복구하지 않으며 R을 닫거나 다시 여는 것이 사용 가능한 최대 메모리로 시작하는 데 가장 적합합니다.
- 다른 요령은 훈련을 위해 열차 세트만 적재하는 것입니다(일반적으로 열차 세트의 절반 크기일 수 있는 테스트 세트는 적재하지 않음).교육 단계에서는 메모리를 최대(100%)까지 사용할 수 있으므로 사용 가능한 모든 것이 유용합니다.이 모든 것은 제가 R 메모리 한계를 실험하는 동안 소금 한 알을 가지고 가져가기 위한 것입니다.
는 의도말페이니다습했동로의 했습니다.memory.limit
그리고 내 컴퓨터에서 R은 기본적으로 최대 1.5GB의 RAM을 사용할 수 있으며 사용자는 이 제한을 늘릴 수 있습니다.코드를 하여 음코를사여다하용드▁using다.
>memory.limit()
[1] 1535.875
> memory.limit(size=1800)
제 문제를 해결하는 데 도움이 되었습니다.
다음은 이 주제에 대한 프레젠테이션으로, 흥미로울 수 있습니다.
http://www.bytemining.com/2010/08/taking-r-to-the-limit-part-ii-large-datasets-in-r/
나는 논의된 것들을 직접 시도해보지는 않았지만,bigmemory
는 매우 .
이 제한을 피하는 가장 간단한 방법은 64비트 R로 전환하는 것입니다.
비슷한 문제가 발생하여 2개의 플래시 드라이브를 'ReadyBoost'로 사용했습니다.두 드라이브는 캐시용으로 8GB의 추가 메모리를 제공하여 문제를 해결하고 시스템 전체의 속도를 높였습니다.ReadyBoost를 사용하려면 드라이브를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하여 'ReadyBoost'를 선택한 다음 '이 장치 사용' 라디오 버튼을 선택하고 적용 또는 확인을 클릭하여 구성합니다.
Linux 환경에서 스크립트를 실행하는 경우 다음 명령을 사용할 수 있습니다.
bsub -q server_name -R "rusage[mem=requested_memory]" "Rscript script_name.R"
그리고 서버는 요청된 메모리를 할당합니다(서버 제한에 따라, 그러나 양호한 서버에서는 대용량 파일을 사용할 수 있습니다).
한 후에 "가비지 하여 " 수집"을 입니다.gc()
명령은분이또위메확것이며한보할를한리모을석것▁the▁for▁command,▁free,또▁up한▁memory▁will▁this▁your▁analyzes▁in,▁using ▁additionmemory.limit()
지휘권
예:
gc()
memory.limit(9999999999)
fit <-lm(Y ~ X)
gc()
위에서 언급한 저장/로드 방법이 저에게 적용됩니다.는 어떻게/그런지 잘 .gc()
메모리를 조각 모음하지만 작동하는 것 같습니다.
# defrag memory
save.image(file="temp.RData")
rm(list=ls())
load(file="temp.RData")
언급URL : https://stackoverflow.com/questions/5171593/r-memory-management-cannot-allocate-vector-of-size-n-mb
'source' 카테고리의 다른 글
정수를 16진수로, 16진수를 정수로 변환 (0) | 2023.07.13 |
---|---|
Oracle Solaris 11에 GCC 설치 (0) | 2023.07.13 |
Rspec: "array.== another_array"여야 하지만 주문과 관련이 없습니다. (0) | 2023.07.13 |
한 번에 4천만 개의 mysql 셀 업데이트 (0) | 2023.07.13 |
Tomcat을 시작하는 데 너무 많은 시간이 소요됨 - Java SecureRandom (0) | 2023.07.13 |