복잡한 모델을 대규모 데이터 세트에 반복적으로 피팅 할 때 계산 효율성을 어떻게 최적화 할 수 있습니까?


12

MCMCglmm혼합 효과 모델을 실행하기 위해 R 의 패키지를 사용하는 성능 문제가 있습니다. 코드는 다음과 같습니다.

MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)

데이터에는 약 20,000 개의 관측치가 있으며 약 200 개의 학교에 모여 있습니다. 실행하기 전에 데이터 프레임에서 사용하지 않는 모든 변수를 삭제하고 메모리에서 다른 모든 개체를 제거했습니다. 내가 가진 문제는 반복을 허용 할 수없는 작은 수로 줄이지 않으면 실행하는 데 시간이 오래 걸린다는 것입니다. 50,000 회 반복하면 5 시간이 걸리며 실행할 수있는 다양한 모델이 있습니다. 그래서 코드 실행 속도를 높일 수있는 방법이 있는지 또는 내가 사용할 수있는 다른 패키지가 있는지 알고 싶습니다. MCMCglmm무작위 효과에 대한 신뢰 구간을 원하기 때문에 사용 하고 있습니다.

다른 한편으로, 나는 올해 말에 새로운 PC를 얻기를 바랐지만 약간의 행운으로 그것을 가져올 수있을 것입니다. 그래서 나는 새로운 하드웨어에 제한된 돈을 소비하는 방법을 궁금해했습니다-더 많은 RAM , 더 빠른 CPU 등. 작업 관리자를 보면서 RAM이 문제라고 생각하지 않습니다 (물리적 사용의 50 % 이상을 결코 얻지 못합니다). 그러나 CPU 사용량도 50 %를 넘지 않아서 이상합니다. . 현재 설정은 인텔 코어 i5 2.66GHz, 4GB RAM, 7200rpm HDD입니다. 추가 RAM을 희생하여 가능한 한 가장 빠른 CPU를 얻는 것이 합리적입니까? 또한 레벨 3 CPU 캐시 크기가 이와 같은 통계 컴퓨팅 문제에 미치는 영향에 대해 궁금했습니다.

업데이트 :SO 메타에 물었다 내가 슈퍼 유저에 질문 게시물을 바꿔 것을 권고하고있다. 그렇게하려면 MCMCglmm의 "언더 후드"에 대한 자세한 정보를 제공해야합니다. 계산 시간의 대부분이 최적화에 소비된다고 생각하는 것이 옳습니까? 복잡한 함수의 최대 값을 찾는 것을 의미합니까? 행렬 역전 및 / 또는 다른 선형 대수 연산도 병목 현상을 일으킬 수있는 일반적인 연산입니까? 수퍼 유저 커뮤니티에 제공 할 수있는 다른 정보는 가장 감사 할 것입니다.


MCMC가 이러한 문제에 오랜 시간이 걸린다는 것은 놀라운 일이 아닙니다. 아마도 더 빨리 실행할 수있는 방법이 있다고 확신합니다. 그러나 정답을 찾으려면 여전히 시간이 걸릴 것입니다.
Michael R. Chernick 2016 년

@Michael Chernick, 감사합니다. 아직 시간이 걸릴 것입니다. 가능한 한 최소화하고 싶습니다. 그게 전부입니다. 아빠는 Oracle SPARC T4를 가지고 있으며 MCMC를 매우 빠르게 운영하고 있습니다.)
Joe King

3
@JoeKing, 제목을보다 설명적이고 편집 할 수 있도록 더 많은 사용자를 끌어들이도록 수정했습니다. 또한 lmer()대규모 데이터 세트에 모델을 맞추는 데 특히 오랜 시간이 걸리는 경우 시간이 오래 걸릴 수 있습니다. 귀하의 질문에 대한 답변은 병렬 컴퓨팅에있을 수 있지만 다른 사용자 (예 : @ DirkEddelbuettel)가 나보다 훨씬 도움이 될 것입니다. 또한 스택 오버플로에 대해 더 나은 답변을 얻을 수 있습니다.
매크로

매크로, 유용한 편집에 감사드립니다. 또한 glmer(다른 게시물에서 알 수 있듯이) 사용했으며 약 20 초가 걸리지 만 문제는 신뢰 간격이나 표준 오류를 제공하지 않으며 메일 링리스트에서 읽은 내용에서 lme4패키지에 따르면 랜덤 효과의 샘플링 분포가 매우 왜곡 될 수 있으므로 이러한 통계는보고되지 않습니다. 실제로 나는 MCMCglmm지금까지 나의 경우에 그들이 정상에 접근하고 있음을 알았습니다 (이것이 많은 도움이되지는 않습니다-단지 말하고 있습니다). SO로 마이그레이션을 요청하면 더 좋을까요?
Joe King

1
mcmcglmm의 세부 사항을 모르지만 MCMC 방법을 많이 사용했습니다. MCMC의 좋은 점은 당황스럽게도 병렬화가 가능하다는 것입니다 (기술 용어입니다!). 코어가 여러 개인 경우 각각 독립적 인 체인을 실행 한 다음 결과를 풀링합니다. 이것이 MCMC를 실행하는 방법이지만 MPI를 사용하여 병렬 C ++ 코드를 직접 작성했습니다. 하드웨어 조언의 관점에서, 가능한 많은 코어를 가진 무언가를 찾으십시오. 그것은 당신이 사용하는 도구가 여러 코어를 활용할 수 있다고 가정합니다. 귀하의 질문에 SU를 제공하는 정보의 관점에서 코어를 활용할 수 있는지 알아보십시오.
Bogdanovist 2016 년

답변:


3

Amazon EC2 클라우드 컴퓨팅 서비스 또는 이와 유사한 서비스 에서 실행하지 않는 이유는 무엇 입니까? MCMCpack내가 정확히 기억한다면 대부분 C로 구현되므로 모델 복잡성, 반복 등을 줄이지 않으면 훨씬 더 빨라질 수 없습니다. EC2 또는 유사한 클라우드 컴퓨팅 서비스를 사용하면 언제 어디서나 여러 인스턴스를 가질 수 있습니다 원하는 사양을 지정하고 모든 모델을 한 번에 실행할 수 있습니다.


이것에 대한 한 가지 수정 : m2.4xlarge (68.7GB RAM 옵션)에서 실행하는 것은 전체 시스템을 얻는 것을 보장하는 유일한 방법이므로 VM에서 발생할 수있는 RAM 캐싱 문제 (가상 시스템) 머신의 일부에서 실행되는 / AMI).
Iterator
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.