Xây dựng siêu máy tính bằng raspberry pi (Cluster Pi)

 

Đối với bản thân tôi máy tính nhúng raspberry pi không đặc biệt ấn tượng về cấu hình. Nhưng giá của nó thì khá rẻ, nên tôi có giải pháp kết nối chúng lại với nhau để tạo thành một siêu máy tính. Với hướng dẫn này chúng ta có thể tạo một siêu máy tính của riêng mình.


Xem video

Các thiết bị cần thiết

Để làm dự án này chúng ta sẽ cần một số thiết bị sau:

  • 2 hoặc nhiều máy tính nhúng Raspberry Pi
  • Thẻ nhớ cho mỗi Raspi
  • Dây cấp nguồn cho Raspi
  • Hub cấp điện USB
  • Dây mạng
  • Hub hoặc router

Cài đặt và cấu hình Raspbian

Khi bạn đã có đầy đủ các thiết bị, bược tiếp theo là download IMG Raspbian OS cho một máy tính raspi. Đây là máy tính master của chúng ta. Thực hiện các bước sau đây:

  • Tải bản cài đặt Raspbian Image tại đây.
  • Chép bản cài đặt vào thẻ nhớ
  • Bỏ thẻ nhớ vào Raspi và boot lên.
  • Ở lần cài đặt đầu tiên các bạn cấu hình như sau:
    1. Đổi hostname thành Pi01
    2. Đổi cách boot thành CLI (Command Line Interface), chúng ta không cần phải xài Desktop để giảm tải cho raspi để có thể xử lý thuật toán nhanh hơn.
    3. Enable SSH.
    4. Chọn "Overclock" tab và chuyển thành "Turbo".
    5. Chuyển GPU memory thành 16mb.
    6. Thiết lập localtion và giờ theo vị trí địa lý của bạn
    7. Reboot Raspi

Cài đặt MPICH

 

Ở máy tính master các bạn cần phải cài đặt phần mềm để có thể sử dụng hết tất cả các processing của tất cả các máy tính trong hệ thống. Tên phần mềm đó là MPICH(Message Passing Interface). Các bạn chạy theo các dòng lệnh sau đây:

sudo apt-get update

mkdir mpich2

cd ~/mpich2

wget http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz

tar xfz mpich-3.1.tar.gz

sudo mkdir /home/rpimpi/

sudo mkdir /home/rpimpi/mpi-install

mkdir /home/pi/mpi-build

cd /home/pi/mpi-build

sudo apt-get install gfortran

sudo /home/pi/mpich2/mpich-3.1/configure -prefix=/home/rpimpi/mpi-install

sudo make

sudo make install

nano .bashrc

PATH=$PATH:/home/rpimpi/mpi-install/bin

sudo reboot

mpiexec -n 1 hostname

Những dòng lệnh trên thực thi việc tải và cài đặt MPICH, và thực thi chạy cùng hệ thống, dòng lệnh cuối cùng dùng để test, nếu các bạn thấy trả về “Pi01”, các bạn đã thành công!

Cài đặt MPI4PY


MPICH có thể chạy trên C và Fortran. Nhưng Raspberry Pi có môi trường mã hóa Python được cài đặt sẵn, nên chúng ta sẽ sử dụng trình thông dịch Python sang MPI. Sau đây là các lệnh để thực hiện:

sudo aptitude install python-dev

wget https://mpi4py.googlecode.com/files/mpi4py-1.3.1.tar.gz

tar -zxf mpi4py-1.3.1

cd mpi4py-1.3.1

python setup.py build

python setup.py install

export PYTHONPATH=/home/pi/mpi4py-1.3.1

mpiexec -n 5 python demo/helloworld.py


Dòng lệnh cuối cùng sẽ trả về năm câu trả lời. Mỗi một process khác nhau trên Pi01 chạy chương trình python "Hello World" mà chúng ta vừa tạo ra.

Copy bản ảnh đến các máy tính trong hệ thống


Bây giờ chúng ta đã cấu hình thành công Pi master của mình, chúng ta cần sao chép ảnh thẻ SD của Pi đó vào tất cả các Pi trong hệ thống. Các bạn backup trực tiếp từ Raspi

Cấu hình các máy tính raspi còn lại

Sau khi thực hiện backup cho tất cả các thẻ nhớ, các bạn bỏ thẻ nhớ vào Raspi và cắm vào khởi động, cấu hình ip cho các máy tính slave theo các bước sau:

  • Đầu tiên là cài đặt NMAP
    sudo apt-get update
    sudo apt-get install nmap
  • Xem ip Pi master bằng lệnh sau
    ifconfig
  • Bây giờ bạn sẽ tìm ip tất cả các máy tính slave còn lại trong mạng của bạn
    sudo nmap -sn 192.168.1.*

Ghi chép lại các ip của các máy tính slave, bây giờ bạn sẽ kết nối SSH đến các máy tính con và đổi tên ghi nhớ lại để phân biệt với các máy còn lại trong hệ thống, do bạn copy từ master ra nên hiện tại máy nào cũng có hostname la

  • Establish an SSH connection
    ssh pi@192.168.0.3
  • Run raspi-config
    sudo raspi-config
  • Đổi tên hostname ví dụ pi02
  • Save lại và thoát ra SSH
    exit

Bạn phải thực hiện hết tất cả các Raspi còn lại trong hệ thống và đặt tên gợi nhớ khác nhau ví dụ Pi03, Pi04..,.

Trên Master Raspi các bạn tạo 1 text file tên là "machinefile"

nano machinefile

Trong đây các bạn ghi lại các ip trong hệ thống của bạn. Mỗi ip là 1 dòng.

Sau đó các bạn chạy lệnh

mpiexec -f machinefile -n 4 hostname

Nó sẽ trả về các dòng sau "host key verification failure". Đừng lo lắng, ở bước kế tiếp chúng ta sẽ sửa lỗi này.~!

Xác minh key đăng nhập (Verifying Host Keys)

Để khắc phục lỗi trên, để giao tiếp với mỗi RaspPi không dẫn đến lỗi xác minh key máy chủ, chúng ta cần tạo các key cho mỗi Raspberry Pi của chúng ta. Phần này có thể hơi phức tạp, nhưng hy vọng bạn có thể hoàn thành nó cùng tôi

 

  • Trên Master Pi, trong thư mục mặc định home, các bạn tạo 1 key mơ
    cd~
    ssh-keygen
  • Điều hướng đến thư mục ssh và sao chép tệp key tên "pi01"
    cd .ssh
    cp id_rsa.pub pi01
  • Kế tiếp là các bạn kết nối SSH vào pi02 và thực hiện các bước như trên để tạo pi02 key
    ssh pi@192.168.1.3
    ssh-keygen
    cd .ssh
    cp id_rsa.pub pi02
  • Trước khi thoát ra khỏi Pi02, chúng ta cần sao chép keyfile Pi01 sang nó authorized

scp 192.168.1.2:/home/pi/.ssh/pi01 .
cat pi01 >> authorized_keys
exit

  • Sau khi thực hiện ở pi02 xong các bạn lặp lại với pi03 
    ssh pi@192.168.1.4
    ssh-keygen
    cd .ssh
    cp id_rsa.pub pi03
    scp 192.168.1.2:/home/pi/.ssh/pi01 .
    cat pi01 >> authorized_keys
    exit
  • Thực hiện lại hết tất cả các pi trong hệ thống của bạn
  • Sau khi tạo hết tất cả các key cho mỗi raspi trong hệ thống, các bạn quay lại master pi và chép hết tất cả các key và authorized nó.
    cp 192.168.1.3:/home/pi/.ssh/pi02
    cat pi02 >> authorized_keys
    cp 192.168.1.4:/home/pi/.ssh/pi03
    cat pi03 >> authorized_keys
    cp 192.168.1.5:/home/pi/.ssh/pi02
    cat pi04 >> authorized_keys

    (Lặp lại đến hết các raspi trong hệ thống)

Running a Program on Your Supercomputer

Bây giờ mọi thứ đã được thiết lập. Trên Master Pi của bạn, hãy thử chạy lại machinefile này:

cd ~
mpiexec -f machinefile -n 4 hostname

Nếu mọi thứ đã được thực hiện đún, nó sẽ trả về địa chỉ IP của tất cả các Raspberry Pi của bạn. Bây giờ chúng ta đã thử nghiệm thành công siêu máy tính của mình, hãy chạy chương trình python trên đó:

  • Tải về đoạn code python test hash password của tôi 
    wget https://www.dropbox.com/s/dy6q1xa4z22brxf/python_test.tar.gz?dl=0
    tar -zxf python_test.tar.gz
  • Sửa password mà bạn có muốn hash
    nano python_test/md5_attack.py
  • Copy file code python vào tất cả các raspi của bạn
    scp -r python_test 192.168.1.3:/home/pi
    scp -r python_test 192.168.1.4:/home/pi
    scp -r python_test 192.168.1.5:/home/pi
  • Thực thi đoạn code python

mpiexec -f machinefile -n 5 python python_test/md5_attack.py

The script will run using the processing power of all of the Pi's on your network! Feel free to test it out using your own python script!

Đoạn code này sẽ sử dụng tất cả các processing trên tất cả các Raspi trong hệ thống của bạn.! hãy trải nghiệm các thuật toán khó hơn thử xem nào!

Nội dung được dựa trên Tinkernut Lab

Tôi là Phạm Vĩnh Toàn đến từ Mechasolution VietNam

 

 

 

 

 

 

Có thể bạn quan tâm ???


Sản phẩm liên quan