Büyük bir veri setine tekrar tekrar karmaşık bir model takarken hesaplama verimliliğini nasıl optimize edebilirim?


12

MCMCglmmKarışık efektler modeli çalıştırmak için R paketini kullanarak performans sorunları yaşıyorum . Kod şöyle görünü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)

Verilerde yaklaşık 20.000 gözlem vardır ve bunlar yaklaşık 200 okulda kümelenmiştir. Kullanılmamış tüm değişkenleri veri çerçevesinden bıraktım ve çalıştırmadan önce diğer tüm nesneleri bellekten kaldırdım. Benim sorunum, yinelemeleri kabul edilemeyecek kadar küçük bir sayıya indirmediğim sürece çalıştırmak için çok uzun zaman almasıdır. 50.000 yineleme ile 5 saat sürer ve çalışacak birçok farklı modelim var. Bu yüzden kod yürütmeyi veya kullanabileceğim diğer paketleri hızlandırmanın yolları olup olmadığını bilmek istiyorum. Kullanıyorum MCMCglmmçünkü rastgele etkiler için güven aralıkları istiyorum.

Öte yandan, bu yıl yeni bir PC almayı umuyordum ama biraz şansla bunu öne getirebilirim, bu yüzden yeni donanıma en iyi sınırlı parayı nasıl harcayacağımı merak ediyordum - daha fazla RAM , daha hızlı CPU vb. Görev yöneticisini izlemekten RAM'in sorun olduğuna inanmıyorum (asla kullanılan fizikselin% ​​50'sinin üzerine çıkmaz), ancak CPU kullanımı da% 50'nin üzerine çıkmaz, bu da beni tuhaf olarak vurur . Mevcut kurulumum bir intel core i5 2.66GHz, 4GB RAM, 7200rpm HDD. Ek RAM pahasına mümkün olduğunca hızlı CPU almak mantıklı mı? Seviye 3 CPU önbellek boyutunun bunun gibi istatistiksel hesaplama problemleri üzerindeki etkisini merak ettim.

Güncelleme: olması SO meta üzerinde sorulan Ben Süper kullanıcı üzerinde soru ve yazı ifadeleri tavsiye edildi. Bunu yapmak için MCMCglmm'de "başlık altında" neler olduğu hakkında daha fazla ayrıntı vermem gerekiyor. Hesaplamaların büyük bir bölümünün optimizasyon için harcandığını düşünmekte haklı mıyım - yani bazı karmaşık fonksiyonların maksimumunu bulmak? Matris inversiyonu ve / veya diğer doğrusal cebir işlemleri de darboğazlara neden olabilecek ortak bir işlem midir? Superuser topluluğuna verebileceğim diğer bilgiler en çok minnetle alınır.


MCMC'nin bu tür sorunlarda uzun zaman almasının sürpriz olması gerektiğini düşünmüyorum. Eminim daha hızlı çalışmasını sağlayacak yollar vardır. Ancak doğru bir cevabı körüklemek hala zaman alacaktır.
Michael R.Chickick

@Michael Chernick, teşekkür ederim - Hala zaman alacağının farkındayım. Sadece olabildiğince en aza indirmek istiyorum, hepsi bu. Babam işinde bir Oracle SPARC T4 var ve bu MCMC oldukça hızlı çalışır;)
Joe King

3
@JoeKing, başlığınızı daha açıklayıcı olacak ve belki de size yardımcı olabilecek daha fazla kullanıcı çekecek şekilde düzenledim. Ayrıca lmer(), büyük veri setlerine model takmanın, özellikle de birçok kez yapmanız gerekiyorsa, biraz zaman alabileceğini buldum . Diğer kullanıcılar (örn. @DirkEddelbuettel) bu konuda benden çok daha yararlı olsa da, sorunuzun bir cevabı paralel hesaplamada olabilir. Stackoverflow üzerinde daha iyi cevaplar alma şansı da vardır.
Makro

Makro, yararlı düzenleme için teşekkür ederim. Ayrıca glmer(diğer gönderilerimden bildiğiniz gibi) kullandım ve bu yaklaşık 20 saniye sürüyor, ancak sorun, güven aralıkları veya standart hatalar vermemesi ve bir posta listesinde okuduğumdan lme4paketi, rastgele etkilerin örnekleme dağılımının çok çarpık olabileceğini söylüyor, bu nedenle bu istatistikler rapor edilmiyor. Aslında MCMCglmmşu ana kadar buldum ki, benim durumumda normal yaklaşıyorlar (bu çok yardımcı değil - sadece söylüyorum). SO'ya geçirmek istersem daha iyi olur mu?
Joe King

1
Ben mcmcglmm özelliklerini bilmiyorum, ama MCMC yöntemleri çok kullandık. MCMC ile ilgili güzel bir şey, utanç verici bir şekilde paralelleştirilebilir olmasıdır (bu teknik bir terimdir!). Birden fazla çekirdeğiniz varsa, her birinde bağımsız zincirler çalıştırırsınız ve sonuçları toplarsınız. MCMC'yi bu şekilde çalıştırıyorum, ancak kendi paralel C ++ kodlarımı (MPI kullanarak) yazdım. Donanım tavsiyesi açısından, mümkün olduğunca çok çekirdeğe sahip bir şey arayın. Bu, hangi aracı kullanırsanız kullanın çoklu çekirdeklerden yararlanabileceğini varsayar. Sorunuzda SU verecek bilgi açısından, çekirdekleri kullanıp kullanamayacağınızı öğrenin.
Bogdanovist

Yanıtlar:


3

Neden Amazon'un EC2 bulut bilişim hizmetinde veya benzeri bir hizmette çalıştırmıyorsunuz? MCMCpackdoğru hatırlıyorsam, çoğunlukla C'de uygulandığından, model karmaşıklığınızı, yinelemelerinizi vb. azaltmadığınız sürece çok daha hızlı olmayacaktır. EC2 veya benzer bulut bilişim hizmetleri ile, her durumda birden çok örneğiniz olabilir İstediğiniz özellikleri ve tüm modellerinizi aynı anda çalıştırın.


Bunun için bir değişiklik: m2.4xlarge (68.7GB RAM seçeneği) üzerinde çalışmak, tam makineyi almanızı garanti etmenin tek yoludur, böylece VM'lerde (sanal makineler) oluşabilecek RAM önbellek sorunlarına mutlaka gerek yoktur. / AMI).
Iterator
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.