ฉันจะสร้างคลัสเตอร์ได้อย่างไร


63

มีบทความไม่กี่เรื่องที่ลอยอยู่บนโลกออนไลน์ในช่วงไม่กี่ปีที่ผ่านมาเกี่ยวกับการสร้างคลัสเตอร์คอมพิวเตอร์ที่บ้าน - ตัวอย่างเช่นที่นี่

Pi ทำให้ฉันเป็นเวทีที่ดีสำหรับการสร้าง / ทดสอบสิ่งนี้เนื่องจากราคาถูก ควรคำแนะนำ "ทั่วไป" เช่นการถ่ายโอนนี้ไปยัง Pi ค่อนข้างง่ายหรือมีสิ่งใดเป็นพิเศษที่ฉันควรทราบเมื่อพยายามทำโครงการดังกล่าว


3
หัวข้อฟอรัมที่เกี่ยวข้อง: raspberrypi.org/phpBB3/viewtopic.php?p=18356#p18356
finnw

ฉันได้เพิ่มแท็ก "bramble" เนื่องจากนี่คือชื่อเหล่านี้ ไม่สามารถให้คำตอบที่ถูกต้องเกินกว่า "รวมกลุ่มกันแล้วเรียกใช้ hadoop หรืออะไรทำนองนั้น" - แน่นอนฉันชอบคำถามเพื่อดูคำตอบด้วยตัวเอง!
winwaed

ผู้ใช้ Pi คนอื่นยังไม่รู้เกี่ยวกับคำวิเศษ "bramble"; การค้นหาฟอรัมของมูลนิธิอาจช่วยได้ แต่บ่อยครั้งที่จะตอบสนองช้าดังนั้นฉันจะไม่ลงคะแนนให้คุณ
mlp

4
University of SouthHampton ได้ทำขั้นตอนในการทำคลัสเตอร์ 64 pi (หรือ "supercomputer"): southampton.ac.uk/~sjc/raspberrypi/ …
Alex L

คำตอบ:


35

ฉันแนะนำให้ดูที่Dispy - โมดูลการคำนวณแบบหลามแบบกระจาย

ในการรันโปรแกรมบน Raspberry Pi จำนวนหนึ่ง (โหนด) จากพีซี (เซิร์ฟเวอร์ - สมมติว่า IP คือ192.168.0.100):

  • ติดตั้งระบบปฏิบัติการในแต่ละ RasPi

  • แนบ RasPi แต่ละอันเข้ากับเครือข่ายของคุณ ค้นหา IP (ถ้าเป็นไดนามิก) หรือตั้งค่า IP แบบคงที่
    (สมมติว่าคุณมีสามโหนดและ IP ของพวกเขา192.168.0.50-52)

  • ตั้งค่า Python (หากยังไม่ได้ติดตั้งdispy) จากนั้นรันdispynode.py -i 192.168.0.100บน RasPi แต่ละรายการ สิ่งนี้จะบอก dispynode เพื่อรับข้อมูลงานจากเซิร์ฟเวอร์

  • บนพีซี (เซิร์ฟเวอร์), ติดตั้งdispyแล้วเรียกใช้รหัสหลามต่อไปนี้:

#!/usr/bin/env python
import dispy
cluster = dispy.JobCluster('/some/program', nodes=['192.168.0.50', '192.168.0.51', '192.168.0.52'])

นอกจากนี้คุณยังสามารถแทนที่/some/programด้วยฟังก์ชั่หลาม - computeเช่น

คุณยังสามารถรวมการพึ่งพาเช่นวัตถุหลามโมดูลและไฟล์ (ซึ่งdispyจะถ่ายโอนไปยังแต่ละโหนด) โดยการเพิ่มdepends=[ClassA, moduleB, 'file1']


8
ฉันชอบที่จะได้ยินถ้ามีคนทำเช่นนี้ - โปรดแสดงความคิดเห็นแจ้งให้ฉันทราบว่ามันใช้งานได้!
Alex L

ในกรณีของฉัน (openelec + python 2.7) ฉันได้รับข้อผิดพลาดนี้ "ไฟล์" ./Lib/multiprocessing/__init__.py ", บรรทัดที่ 84, ใน <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: ไม่ได้กำหนดสัญลักษณ์: SemLockType "
Guido

แต่ dispy3-3.6 ทำงานด้วยเสียงฮืด + python3! 2013-03-13 23: 01: 30,664 - แจกจ่าย - ให้บริการ 1 ซีพียูที่ 192.168.1.34/51348 เมื่อคุณเรียกใช้งาน (เช่น / bin / ls) โหนดได้รับงานให้ย้ายไฟล์ปฏิบัติการไปยัง / tmp แต่มีบางอย่างผิดปกติ "การเรียกใช้งาน ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] ล้มเหลวด้วย (<class 'OSError '>, OSError (8,' Exec format error '), <วัตถุย้อนกลับที่ 0x16f2580>) "
Guido

10

คุณควรตระหนักถึงงานที่ทำไปแล้ว - แม้กระทั่งชื่อของกลุ่มของกล่อง RasPi Embedded Linux วิกิพีเดียกล่าวว่าบรัมเบิ้ลที่ถูกกำหนดให้เป็น " คลัสเตอร์วูล์ฟของอุปกรณ์ Raspberry Pi" ราสเบอร์รี่ Pi Homebrewมีจำนวนของการโพสต์ เกี่ยวกับ หนามและดู ยังมูลนิธิฟอรั่มของตัวเอง 's


14
ฉันไม่คิดว่าจะบอกใครบางคนกับ Google คำตอบที่ดีสำหรับเว็บไซต์นี้ มีประโยชน์ที่จะทราบชื่อ แต่พิจารณาเพิ่มเนื้อหาและลิงค์อ้างอิงไปยังคำตอบของคุณ
Joe

เพิ่มเนื้อหาและลิงก์แล้ว @Joe มันจะดีถ้า downvoters ตอนนี้ประเมินความคิดเห็นของพวกเขา ...
mlp

1
ฉันจะทำอย่างไรถ้าฉันลงคะแนนให้คุณจริง ๆ ...
Joe

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

10

ผู้ชายบางคนที่เซาแธมป์ตัน Uni ได้ใส่กันคลัสเตอร์และการเขียนภาพรวมรายละเอียดของการทำงานของพวกเขาที่http://www.southampton.ac.uk/~sjc/raspberrypi/



จริงๆแล้วมีหลายสิ่งที่ต้องเรียนรู้จากโครงการนี้โดยใช้ MPI ฉันกำลังทำการทดลองของฉันตามงานของผู้ชายคนนี้ ฉันอยากจะแนะนำให้ทำเครื่องหมายคำตอบนี้คำตอบที่ถูกต้องสำหรับคำถาม
benqus

6

มันเป็นไปได้อย่างสมบูรณ์ แต่ปัญหาที่ใหญ่ที่สุดคือความสามารถในการบรรลุ มันเป็นความคิดที่ฉันจะไม่เพียง แต่คิดว่าทำงานได้ แต่มีประโยชน์อย่างที่คุณสามารถไปกับความคิดของการคำนวณแบบขนานแบบพกพา เท่าที่เฉพาะเจาะจงภาษาการเขียนโปรแกรมเช่น FORTRAN และ C ++ จะทำได้ดีที่สุด

ดูที่beowulf.orgสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการคำนวณคลัสเตอร์


1

นี่คือการตอบกลับไปที่โพสต์ของกุยโดการ์เซียเกี่ยวกับ 'แจกจ่าย' - ฉันไม่สามารถหาวิธีตอบโพสต์ของเขา

เมื่อโปรแกรม ('/ bin / ls') แจกจ่ายด้วย 'แจกจ่าย' สำหรับการดำเนินการแบบขนานจากนั้นโปรแกรมบนเครื่องไคลเอนต์จะถูกถ่ายโอนไปยังแต่ละโหนด (ถึง '/ tmp') นี่คือเพื่อให้ผู้ใช้โปรแกรมที่พัฒนาบนเครื่องไคลเอนต์ถูกถ่ายโอนโดยไม่ต้องมี NFS หรือไดเร็คทอรี่ที่ใช้ร่วมกัน สิ่งนี้ใช้ได้กับโปรแกรมไบนารีเฉพาะเมื่อโหนดและสถาปัตยกรรมไคลเอนต์เข้ากันได้ ในกรณีของคุณฉันเดาว่าสถาปัตยกรรมไคลเอนต์นั้นแตกต่างจากโหนดระยะไกลและโหนดไม่สามารถดำเนินการถ่ายโอนไบนารี '/ bin / ls' จากไคลเอนต์ หากคุณต้องการรัน / bin / ls บนแต่ละโหนดมันอาจจะง่ายกว่าที่จะเขียนฟังก์ชั่น Python หรือโปรแกรมเพื่อพิมพ์ไดเรกทอรี (เช่นใช้ os.listdir) และแจกจ่ายมันแทนการปฏิบัติการแบบไบนารี


คุณต้องการ 50 ชื่อเสียงในการแสดงความคิดเห็นในคำตอบ / คำถามของคนอื่น ยินดีต้อนรับแม้ว่า!
Impulss

1

นอกจากนี้ยังมีhttp://pi.interworx.comหากคุณต้องการแผงควบคุมที่มีคุณสมบัติครบถ้วน พวกเขามีคำแนะนำในหน้านี้เกี่ยวกับวิธีการทำซ้ำ แต่คุณจะต้องอดทนเพราะโดเมนย่อยนั้นทำงานจากคลัสเตอร์ Rasberry Pi นี่คือภาพในกรณีที่มันลงไป:

http://www.facebook.com/photo.php?fbid=596262440393836&set=a.244167858936631.60071.170159826337435&type=1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.