Setup Parallel Programming Menggunakan MPI + Network File System

Jadi tujuan utama dari tulisan ini adalah agar pembacanya bisa dengan cepat memulai (getting started) melakukan pemrograman parallel multi komputer pada jaringan LAN yang sama. Tulisan ini juga sebagai pengingat diri saya sendiri kalau-kalau sudah lama tidak menyentuh ini dan tiba-tiba harus berurusan lagi dengan ini.

Sebelum lanjut ke tutorial sebenarnya, kita bahas teorinya dulu. Jadi dalam pemrograman parallel multi komputer terdapat 2 peran, yaitu: Head Node dan Slave Node. Head Node adalah komputer yang kita gunakan untuk memprogram semunya. Head Node bertugas mengoordinir semua Slave Node untuk membagi kerjaan yang harus di lakukan. Tentunya jika ingin berkoordinasi, berarti Head Node dan Slave Node harus bisa saling berkomunikasi. Ini artinya harus ada platform yang mengurus komunikasi ini. Inilah Peran MPI (Message Passing Interface) sebagai platform pertukaran pesan antara Head Node dan Slave Node.

Selain harus bisa saling berkomunikasi, Head Node dan Slave Node harus mempunyai storage yang bisa di akses bersama. Antara Head Node dan Slave Node sebelumnya harus terkoneksi dalam suatu jaringan yang pada umumnya adalah jaringan LAN. Inilah peran NFS (Network File Sharing) yang akan menyulap 1 direktori dari Head Node untuk bisa di akses bersama-sama oleh Head Node dan Slave Node.

Komunikasi yang digunakan oleh MPI memanfaatkan SSH. Dari Head Node akan menghubungi semua Slave Node secara serentak melalui SSH. Untuk memudahkan komunikasi yang dilakukan, akses SSH dari Head Node ke semua Slave Node hendaknya di set tanpa password.

Setelah semua itu, source code yang dicompile tentunya harus spesial. Source code yang digunakan harus mengatur tentang pembagian tugas antara Head Node dan Slave Node dan ini semua memungkinkan dengan adanya MPI.

Itu tadi pembahasan tentang cara kerja parallel programming yang akan dijelaskan setupnya di sini. Untuk perangkat kerasnya, yang kita butuhkan adalah:
- Komputer (lebih dari 1) sudah terinstall linux, rekomendasi saya ubuntu. Pada Tutorial ini komputer yang digunakan ada 4.
- Jaringan LAN yang mengoneksikan seluruh komputer tadi
Jaringan LAN yang kita gunakan pada tutorial ini adalah 192.168.1.0/24 dimana IP Head Node adalah 192.168.1.1 dan Slave Node adalah 192.168.1.2 192.168.1.3 dan 192.168.1.4.

Kalau semua itu sudah tersedia, mari kita mulai tutorialnya:

1.) Buat user yang sama pada Head Node dan Slave Node

Ini diperlukan karena MPI mengakses seluruh Head Node dan Slave Node menggunakan akun user yang sama. Pada contoh kasus ini, user untuk Head Node dan Slave Node yang akan kita gunakan adalah latprog. Untuk membuat user latprog dan sekalogus memberikannya kemampuan sudo, pada ubuntu bisa dengan

Lakukan ini pada seluruh komputer Head Node dan Slave Node

2.) Setting NFS, Seluruh Slave Node Mount direktori storage Head Node yang telah ditentukan

Ini adalah bagian yang paling sulit sebenarnya. Error yang tidak terduga selalu terjadi karena kesalahan dibagian ini. Pertama, pada seluruh Head Node dan Slave Node, buat direktori baru yang akan di mount bersama yaitu /home/latprog/nfsprog. Pada Head Node install NFS untuk server yaitu dengan perintah
Lalu pada Slave Node, install NFS untuk client, yaitu dengan perintah

Pada Head Node, ubah owner dan grup owner direktori /home/latprog/nfsprog menggunakan chown menjadi nobody (owner) dan nogroup (grup owner). Ini dilakukan karena untuk setiap peritah super user Slave Node pada direktori yang dimount (/home/latprog/nfsprog) oleh Head Node di anggap berasal dari user nobody pada grup nogroup (ingat, pemilik sebenarnya direktori tersebut adalah Head Node) sehingga perintah sudo dari Slave Node bisa terlaksana.
Setelah itu, Head Node mendaftarkan direktori /home/latprog/nfsprog miliknya ke NFS dengan menulisnya di /etc/exports.

Setelah itu restart NFS pada Head Node
Agar direktori Head Node bisa di mount secara LAN oleh Slave Node baik itu sekarang maupun ketika komputer dinyalakan kembali, daftarkan direktori /home/latprog/nfsprog pada /etc/fstab pada setiap Slave Node.
Setelah itu, mount direktori tersebut dengan perintah

3.) Install MPICH pada shared direktori (/home/latprog/nfsprog)

Seluruh eksekusi pada langkah ini dilakukan di Head Node. Pertama, download dulu source code MPICH di alamat ini. Taruh file yang telah di download tersebut di direktori /home/latprog/nfsprog lalu eksekusi perintah berikut.


Setelah MPICH sukses terinstall, masukkan direktori bin milik MPICH ke environment variabel PATH dengan cara

4.) Set SSH tanpa password untuk Head Node ke seluruh Slave Node

Ini diperlukan karena dalam penggunaan MPI nantinya, Head Node yang akan menghubungi seluruh Slave Node untuk koordinasi pengerjaan komputasi yang harus dilakukan. Sebelum itu, seluruh slave node harus membuat direktori .ssh didalam direktori home (/home/latprog) miliknya. Setelah itu pada Head Node, generate key ssh tanpa password (ketika disuruh masukkan password, langsung tekan enter) dengan perintah sebagai berikut.


Lalu setelah itu kirimkan key yang telah digenerate tersebut dari Head Node ke seluruh Slave Node.

5.) Buat hostfile MPI untuk mengatur jumlah core yang digunakan untuk masing-masing Head Node dan Slave Node

Langkah ini dilakukan pada Head Node (kecuali untuk pengecekan jumlah core). Untuk melihat ada berapa core yang bisa kita gunakan (core = core sebenarnya x thread), gunakan perintah lscpu pada masing-masing seluruh Head Node dan Slave Node. Pada baris CPU(s) tercantum jumlah core yang bisa kita gunakan. Pada contoh kasus di sini, core yang bisa digunakan oleh semua komputer (Head Node dan Slave Node) masing-masing ada 4. Dengan pengetahuan ini, selanjutnya kita buat suatu file kosong didalam direktori (/home/latprog/nfsprog) beri nama hostfile (bisa bebas sebenarnya) dan isi file tersebut sebagai berikut.


6.) Test drive

Dan kita telah selesai untuk setup parallel programming menggunakan MPI dan NFS. Untuk test drivenya, mari kita buat script sederhana untuk mengetes apakah setup kita berhasil atau tidak. Buat file baru bernama hello.c (ya, kita akan menggunakan bahasa C untuk test drive ini) dan isi file tersebut adalah sebagai berikut.


Compile dan jalankan source code (pada direktori /home/latprog/nfsprog menggunakan Head Node) sehingga hasilnya akan terlihat mirip sebagai berikut.

Di sini saya bilang mirip karena setiap kali running urutan keluaranya akan selalu beda karena masing-masing core akan berlomba-lomba menjadi yang paling duluan menyelesaikan tugasnya. Jika memang benar keluarannya seperti itu berarti bisa dipastikan setup yang telah kita persiapkan telah berhasil dan siap digunakan.

Sekian tutorial kali ini. Tulisan kali ini tidak membahas tentang bagaimana melakukan parallel programming dan codingnya, mungkin lain kali yah~

referensi:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-16-04, diakses pada 27 Mei 2018
https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-ubuntu-16-04, diakses pada 27 Mei 2018
http://mpitutorial.com/tutorials/mpi-hello-world/, diakses pada 28 Mei 2018

Komentar