[R-br] Problemas em foreach e parallel

Clécio da Silva Ferreira clecio.ferreira em ufjf.edu.br
Quarta Outubro 21 18:55:11 BRST 2015


Problema resolvido pela regra nº 1: reseta (no caso remover todos os
objetos) e recomece.

Atenciosamente,

Prof. Clécio da Silva Ferreira
Depto de Estatística - UFJF
Tel: (32) 2102-3306
Página: www.ufjf.br/clecio_ferreira


Em 21 de outubro de 2015 18:13, Clécio da Silva Ferreira <
clecio.ferreira em ufjf.edu.br> escreveu:

> Olá, Rubem, obrigado pela ajuda. Mas note abaixo que não resolveu o
> problema de não estimar todas as amostras.  Anda, note que é aleatório,
> pois nesse resultado, ela deixou de estimar as amostras 1, 4 e 5. No
> exemplo anterior, foram as amostras 5, 8 e 9.
>
> > tetaM=matrix(0,p,M)
> > strt<-Sys.time()
> > tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
> + y=yM[,k]
> + lm(y~X-1)$coefficients
> + #sgn.logL(teta3,y,X)
> + }
> > print(Sys.time()-strt)
> Time difference of 0.1875119 secs
> >
> > tetaM
>    result.2 result.3 result.6  result.7 result.8  result.9 result.10
> X1 4.584143 4.923599 4.737695 5.2330998 4.743239 5.2077600 4.9280171
> X2 1.855138 1.121618 1.571513 0.6168855 1.305456 0.7255616 0.9040763
>
> Atenciosamente,
>
> Prof. Clécio da Silva Ferreira
> Depto de Estatística - UFJF
> Tel: (32) 2102-3306
> Página: www.ufjf.br/clecio_ferreira
>
>
> Em 21 de outubro de 2015 13:24, Rubem Kaipper Ceratti <
> rubem_ceratti em yahoo.com.br> escreveu:
>
>> Clécio,
>>
>> Não sei exatamente a razão da mensagem de erro, mas repare que você cria
>> a matriz tetaM, depois atribui à tetaM o resultado do foreach, e *dentro*
>> do foreach você ainda tenta atribuir à coluna k de tetaM os coeficientes da
>> regressão. Imagino que seja alguma coisa aí no meio que esteja causando o
>> erro.
>>
>> De toda forma, o foreach com o argumento *.combine=cbind* já retornaria
>> uma matriz p por M. Segue abaixo uma versão simplificada e funcional do seu
>> código:
>>
>> # Criação dos cores em paralelo:
>> library(doParallel)
>> cl <- makeCluster(3)
>> registerDoParallel(cl)
>>
>>
>> # Código
>> # Modelo Normal
>> n <- 100
>> M <- 1e4
>> p <- 2
>> X <- matrix(1, n, p)
>> X[, 2] <- runif(n)
>> beta0 <- matrix(c(5, 1), 2, 1)
>> sigma2 <- 1
>>
>>
>> # Simulação
>> strt <- Sys.time()
>> tetaM <- foreach(k = 1:M, .combine = cbind) %dopar% {
>>   erro <- rnorm(n, 0, sigma2)
>>   y <- X %*% beta0 + erro
>>   lm(y ~ X-1)$coefficients
>> }
>> print(Sys.time()-strt)
>>
>> dim(tetaM)
>> tetaM[, 1:100]
>>
>>
>> ------------------------------
>> *De:* Clécio da Silva Ferreira <clecio.ferreira em ufjf.edu.br>
>> *Para:* r-br em listas.c3sl.ufpr.br
>> *Enviadas:* Quarta-feira, 21 de Outubro de 2015 9:03
>> *Assunto:* [R-br] Problemas em foreach e parallel
>>
>> Prezados, estou tentando utilizar as ferramentas de paralelo em R para
>> Windows. Acontecem dois problemas:
>> 1. Às vezes parece que os workers não 'ativam', dando a mensagem de erro
>> abaixo. Note que não roda, pois o tetaM continua como matriz de 0s. Eu às
>> vezes tenho de colar as funções mais de uma vez para então 'ligar'.
>>
>> 2. Neste exemplo, eu faço replicações de amostras de um MRLM (só um
>> treinamento) e  estimo o modelo para cada amostra. Independente da
>> quantidade de amostras que eu gero (M amostras), ele sempre me devolve com
>> 3 resultados a menos. 3 é o nº de cores que eu coloquei.
>>
>> Alguém tem alguma ideia da origem do problema? Ah, eu fiz para outros
>> modelos que trabalho e ocorrem os mesmos problemas
>>
>>
>> # Criação dos cores em paralelo:
>> library(doParallel)
>> library(foreach)
>> cl<-makeCluster(3, type="SOCK")
>> library(doSNOW)
>> registerDoSNOW(cl)
>>
>>
>> # Código
>>
>> # Modelo Normal
>> n=100
>> M=10
>> p=2
>> X=matrix(1,n,p)
>> X[,2]=runif(n)
>> beta0=matrix(c(5,1),2,1)
>> sigma2=1
>>
>> yM=matrix(0,n,M)
>> for (k in 1:M) {
>> erro=rnorm(n,0,sigma2)
>> yM[,k]=X%*%beta0+erro
>> }
>>
>>
>> tetaM=matrix(0,p,M)
>> strt<-Sys.time()
>> tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
>> y=yM[,k]
>> tetaM[,k]=lm(y~X-1)$coefficients
>> #sgn.logL(teta3,y,X)
>> }
>> print(Sys.time()-strt)
>>
>> tetaM
>>
>>
>> # Rodando no R:
>>
>> > tetaM=matrix(0,p,M)
>> > strt<-Sys.time()
>> > tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
>> + y=yM[,k]
>> + tetaM[,k]=lm(y~X-1)$coefficients
>> + #sgn.logL(teta3,y,X)
>> + }
>> Error in e$fun(obj, substitute(ex), parent.frame(), e$data) :
>>   worker initialization failed: 5.207760032192210.72556160440376
>> > print(Sys.time()-strt)
>> Time difference of 0.06304097 secs
>> >
>> > tetaM
>>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
>> [1,]    0    0    0    0    0    0    0    0    0     0
>> [2,]    0    0    0    0    0    0    0    0    0     0
>> > tetaM=matrix(0,p,M)
>> > strt<-Sys.time()
>> > tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
>> + y=yM[,k]
>> + tetaM[,k]=lm(y~X-1)$coefficients
>> + #sgn.logL(teta3,y,X)
>> + }
>> > print(Sys.time()-strt)
>> Time difference of 0.07505703 secs
>> >
>> > tetaM
>>    result.1 result.2 result.3 result.4 result.6  result.7 result.10
>> X1 4.738553 4.584143 4.923599 4.962845 4.737695 5.2330998 4.9280171
>> X2 1.313208 1.855138 1.121618 1.053215 1.571513 0.6168855 0.9040763
>>
>>
>> Atenciosamente,
>>
>> Prof. Clécio da Silva Ferreira
>> Depto de Estatística - UFJF
>> Tel: (32) 2102-3306
>> Página: www.ufjf.br/clecio_ferreira
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�
>> c�igo m�imo reproduz�el.
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20151021/53357e80/attachment.html>


Mais detalhes sobre a lista de discussão R-br