R (큰) 신경망을 R에서 nnet 패키지로 학습했습니다.이 신경망에서 예측을 시뮬레이트하고 병렬 처리 foreach와 같은 것을 사용하는 패션 (이전에는 Windows 머신에서 사용)과 함께 사용했습니다.foreach와 병렬로 nnet 출력을 예측할 때 R 메모리가 폭발 할 때
내 코드는 기본적으로 양식 훨씬 더 큰 NN 적절되는 제외하고
library(nnet)
data = data.frame(out=c(0, 0.1, 0.4, 0.6),
in1=c(1, 2, 3, 4),
in2=c(10, 4, 2, 6))
net = nnet(out ~ in1 + in2, data=data, size=5)
library(doParallel)
registerDoParallel(cores=detectCores()-2)
results = foreach(test=1:10, .combine=rbind, .packages=c("nnet")) %dopar% {
result = predict(net, newdata = data.frame(in1=test, in2=5))
return(result)
}
이며로부터 예측; 300MB 정도입니다.
위의 코드는 기존 for 루프를 사용하거나 % do %를 사용할 때 잘 실행되지만 % dopar %를 사용하면 모든 코어가 사용되는 동안 각각 700MB 정도의 메모리가로드됩니다. 내가 충분히 오래 실행하면 결국 모든 것이 폭발하게됩니다.
비슷한 문제를봤을 때, 나는 아직도이 문제의 원인을 전혀 모릅니다. '예측'부분을 생략하면 모든 것이 원활하게 실행됩니다.
메모리에로드하는 대신 변경되지 않은 'net'을 각 코어에서 어떻게 찾을 수 있습니까? 아니면 불가능한가요?