ฉันจะปรับประสิทธิภาพการคำนวณให้เหมาะสมได้อย่างไรเมื่อติดตั้งแบบจำลองที่ซับซ้อนกับชุดข้อมูลขนาดใหญ่ซ้ำ ๆ


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เพราะฉันต้องการช่วงความมั่นใจสำหรับเอฟเฟกต์แบบสุ่ม

ในทางกลับกันฉันหวังว่าจะได้รับพีซีเครื่องใหม่ในปีนี้ แต่โชคดีที่ฉันสามารถนำมันไปข้างหน้าได้ดังนั้นฉันจึงสงสัยว่าจะใช้เงินจำนวน จำกัด กับฮาร์ดแวร์ใหม่ได้ดีที่สุด - RAM เพิ่มเติม เร็วกว่าซีพียู ฯลฯ จากการดูตัวจัดการงานฉันไม่เชื่อว่า RAM เป็นปัญหา (ไม่เคยใช้งานเกิน 50% ของการใช้งานจริง) แต่การใช้งาน CPU ไม่ได้สูงกว่า 50% มากซึ่งทำให้ฉันแปลก . การตั้งค่าปัจจุบันของฉันคือ intel core i5 2.66GHz, 4GB RAM, 7200rpm HDD มันสมเหตุสมผลหรือไม่ที่จะได้รับ CPU ที่เร็วที่สุดเท่าที่จะเป็นไปได้ด้วยค่าใช้จ่ายของ RAM เพิ่มเติม? ฉันยังสงสัยเกี่ยวกับผลกระทบของขนาดแคช CPU ระดับ 3 ต่อปัญหาการคำนวณทางสถิติเช่นนี้

ปรับปรุง:มีการถามเกี่ยวกับเมตาดังนั้นฉันได้รับการแนะนำให้ใช้คำถามใหม่และโพสต์บน Superuser ในการทำเช่นนั้นฉันต้องให้รายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้น "ภายใต้ประทุน" ใน MCMCglmm ฉันคิดถูกหรือไม่ว่าการคำนวณจำนวนมากใช้เวลาในการปรับให้เหมาะสม - ฉันหมายถึงการหาฟังก์ชันที่ซับซ้อนมากที่สุด? การผกผันของเมทริกซ์และ / หรือการดำเนินการพีชคณิตเชิงเส้นอื่น ๆ เป็นงานทั่วไปที่อาจทำให้เกิดปัญหาคอขวดได้หรือไม่? ข้อมูลอื่นใดที่ฉันสามารถให้กับชุมชน Superuser จะได้รับสุดซึ้งมากที่สุด


ฉันไม่คิดว่ามันน่าแปลกใจที่ MCMC ใช้เวลานานกับปัญหาดังกล่าว ฉันแน่ใจว่าอาจมีวิธีที่จะทำให้มันทำงานได้เร็วขึ้น แต่การที่จะแยกแยะคำตอบที่ถูกต้องนั้นยังคงต้องใช้เวลา
Michael R. Chernick

@Michael Chernick ขอขอบคุณ - ฉันรู้ว่ามันยังคงต้องใช้เวลา ฉันต้องการย่อให้เล็กที่สุดเท่าที่จะทำได้ พ่อของฉันมีของ Oracle SPARC T4 ในที่ทำงานของเขาและที่ทำงาน MCMC ค่อนข้างเร็ว;)
โจคิง

3
@ JoeKing ฉันได้แก้ไขชื่อของคุณให้มีความหมายมากกว่าและอาจดึงดูดผู้ใช้จำนวนมากที่สามารถช่วยคุณได้ ฉันยังพบว่าlmer()รุ่นที่เหมาะสมกับชุดข้อมูลขนาดใหญ่อาจใช้เวลาสักครู่โดยเฉพาะถ้าคุณต้องทำหลายครั้ง คำตอบสำหรับคำถามของคุณอาจอยู่ในการคำนวณแบบขนานแม้ว่าผู้ใช้รายอื่น (เช่น @DirkEddelbuettel) จะมีประโยชน์มากกว่าฉันด้วยสิ่งนี้ นอกจากนี้ยังมีโอกาสที่คุณอาจได้รับคำตอบที่ดีขึ้นเกี่ยวกับ stackoverflow
มาโคร

มาโครขอบคุณสำหรับการแก้ไขที่เป็นประโยชน์ ฉันได้ใช้glmer(ตามที่คุณทราบจากโพสต์อื่น ๆ ของฉัน) และใช้เวลาประมาณ 20 วินาที แต่ปัญหาคือมันไม่ให้ความมั่นใจหรือข้อผิดพลาดมาตรฐานและจากสิ่งที่ฉันอ่านในรายชื่อผู้รับจดหมายที่เก็บถาวรของผู้เขียนlme4แพคเกจบอกว่าการกระจายตัวตัวอย่างของเอฟเฟกต์แบบสุ่มอาจเบ้มากดังนั้นสถิติเหล่านั้นจะไม่ถูกรายงาน ที่จริงฉันพบตั้งแต่MCMCglmmนั้นมาว่าในกรณีของฉันพวกเขากำลังเข้าใกล้ปกติ (ไม่ว่าสิ่งนี้จะช่วยได้มาก - ฉันแค่พูด) จะดีกว่าไหมถ้าฉันขอโอนย้ายเป็น SO
Joe King

1
ฉันไม่ทราบรายละเอียดเฉพาะของ mcmcglmm แต่ได้ใช้วิธีการ MCMC เป็นจำนวนมาก สิ่งที่ดีเกี่ยวกับ MCMC คือมันขนานกันอย่างน่าอาย (นั่นเป็นศัพท์เทคนิค!) หากคุณมีหลายคอร์คุณต้องรันเชนอิสระในแต่ละอันแล้วรวมผลลัพธ์ นี่คือวิธีที่ฉันเรียกใช้ MCMC แต่ฉันได้เขียนรหัส C ++ แบบขนานของฉัน (โดยใช้ MPI) เพื่อทำมัน ในแง่ของคำแนะนำฮาร์ดแวร์ให้ไปหาบางสิ่งที่มีหลายคอร์ให้ได้มากที่สุด สมมติว่าเครื่องมือที่คุณใช้สามารถใช้ประโยชน์จากหลายคอร์ ในแง่ของข้อมูลเพื่อให้ SU ในคำถามของคุณดูว่าคุณสามารถใช้ประโยชน์จากแกน
Bogdanovist

คำตอบ:


3

ทำไมไม่ลองใช้บริการEC -cloud ของAmazonหรือบริการที่คล้ายกันนี้ MCMCpackคือถ้าฉันจำได้อย่างถูกต้องส่วนใหญ่จะใช้ใน C ดังนั้นมันจะไม่เร็วขึ้นถ้าคุณลดความซับซ้อนของโมเดลการทำซ้ำ ฯลฯ ด้วย EC2 หรือบริการคลาวด์คอมพิวติ้งที่คล้ายกันคุณสามารถมีอินสแตนซ์ได้หลายอย่าง รายละเอียดที่คุณต้องการและรันโมเดลทั้งหมดของคุณในครั้งเดียว


การดัดแปลงหนึ่งอย่างนี้: ทำงานบน m2.4x large (ตัวเลือก RAM 68.7GB) เป็นวิธีเดียวที่จะรับประกันว่าคุณได้รับเครื่องเต็มดังนั้นคุณไม่จำเป็นต้องโดนปัญหาการแคช RAM ที่อาจเกิดขึ้นบน VMs (เครื่องเสมือน) / AMIs) ที่รันบนเศษส่วนของเครื่อง
Iterator
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.