Showing posts with label superkomputer. Show all posts
Showing posts with label superkomputer. Show all posts

Monday, July 13, 2020

Menginstall static library di (JAIST) cluster

Salah satu kelemahan (sekaligus keunggulan) menggunakan superkomputer atau komputer cluster adalah ketiadaan akses root. Akses root ditiadakan agar user tidak bisa mengutak-atik system. Apa jadinya kalau user bisa masuk /usr, /lib, /etc, dll...? Sistem akan dengan sangat mudah dilumpuhkan, pun tanpa serangan (ketidak sengajaan, ketidaktahuan, dll).

Tidak punya akses ke root artinya tidak bisa menginstall program atau library di sistem. Hanya admin yang bisa melakukannya. Permasalahan yang sering muncul adalah menghadapi admin yang bandel alias strict. Contoh: saya minta di-installkan library A, "Dear Pak Admin, tolong install library A di server/superkomputer." Alih-alih memberi jawaban, biasanya admin ngeles seperti ini, "maaf saya tidak terbiasa menggunakan library A, di kluster sudah tersedia library B." Tamat sudah kalau begini jawabannya. Cari cara lainnya.

Kalau anda sering menggunakan Linux atau Unix, berita baiknya, anda bisa menggunakan library atau program tanpa perlu meningstallnya ke system (/usr/bin). Ini dinamakan library statik. Kita bisa menginstall library di home direktory dan memerintahkan sistem untuk mencari di library home tersebut. Singkatnya begini: Hai sistem, cari librari ini ditempat ini. Berikut dua contoh instalasi library statik: ffmpeg dan libsndfile. Dua-duanya dipakai untuk pemrosesan suara.

ffmpeg

Jika menggunakan komputer biasa, library ini dengan mudah bisa di-install dengan `sudo apt intall ffmpeg`. Di superkomputer atau kluster hal ini tidak bisa dilakukan. Untung ada pre-built statik library ffmpeg yang disediakan oleh https://johnvansickle.com/. Download file-nya, uncompress, dan update $PATH seperti berikut.


wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
tar -xvf ffmpeg-git-amd64-static.tar.xz

Hasilnya, kita akan memiliki direktory yang berisi program ffmpeg. Misalnya direktori dengan versi berikut: "ffmpeg-git-20200130-amd64-static". Di dalamnya ada direktori bin dan didalam bin ada file program ffmpeg. Jadi kita arahkan $PATH pada lokasi tersebut. Ketik perintah berikut pada terminal.
export PATH="/home/$USER/ffmpeg-git-20200130-amd64-static:$PATH"

Untuk mempermamenkannya, kita bisa letakkan perintah tersebut di .bashrc atau .bash_profile dan kita `source` untuk mengupdate file config bash tersebut. Sangat simpel dan cepat (daripada meminta tolong admin kluster).

libsndfile

Pada contoh kedua saya menggunakan linuxbrew. Brew adalah program seperti apt/apt-get yang didesain untuk Unix (Mac dan Linux). Pertama kita harus menginstall linuxbrew di home direktori cluster.
wget https://raw.githubusercontent.com/Homebrew/install/master/install.sh
bash ./install.sh
Kadang kita perlu mengganti akses permisi dari file install.sh. Jika dibutuhkan, coba dengan `chmod +x install.sh`.
Brew akan memberi pilihan dimana kita menginstall. By default akan diinstall di system (root). Lagi, karena kita tidak punya akses ke root, maka installasi brew kita tempatkan di home direktori (pilih opsi ini dengan Ctrl-D). Nah setelah terinstall, seperti halnya ffmpeg, kita akan memiliki program brew di .linuxbrew/bin. Ini contohnya pada kasus saya.

Singularity tensorflow_1.14.0-gpu-py3.sif:~> ls .linuxbrew/bin/brew 
.linuxbrew/bin/brew
Sekarang kita bisa menginstall program yang tersedia di brew, termasuk ffmpeg dan libsndfile. Libsndfile kita install dengan perintah berikut,

Singularity tensorflow_1.14.0-gpu-py3.sif:~> .linuxbrew/bin/brew install libsndfile 
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
Updating Homebrew...
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
No changes to formulae.

/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
Warning: libsndfile 1.0.28 is already installed and up-to-date
Karena saya sudah menginstallnya maka brew mengabari kalau libsndfile sudah terinstall dan update. Langkah terakhir adalalah mengupdate #LD_LIBRARY_PATH. Semua library yang terinstall dengan brew akan terinstall di .linuxbrew/lib. Karenanya kita perintahkan LD_LIBRARY_PATH untuk mencari library di situ.

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/.linuxbrew/lib"

Bisa juga perintah tersebut ditambahkan di .bashrc. Saya juga perlu menambahkan ini dalam .bashrc,
eval $(~/.linuxbrew/bin/brew shellenv)

Seleasai. Sekarang kita bisa menggunakan container tensorflow dengan library LibROSA yang membutuhkan libsndfile untuk membaca file suara.

Studi case di JAIST cluster
Di JAIST cluster, saat kita masuk ke vpcc (cluster yg memiliki gpu) telah tersedia tensorflow-gpu via container (singularity). By default, python yang diload adalah python bawaan Anaconda yang menyebabkan library tidak dapat ditemukan (karena perbedaan path, kemungkinan). Solusinya adalah dengan tidak menggunakan python bawaan anaconda, dan menggunakan python bawaan container/singularity dengan perintah berikut.
module remove py35

Cara tersebut cukup ampuh daripada meminta admin untuk menginstall library (sndfile) di cluster.

Saturday, October 10, 2015

Running job with proper software version via modulefiles in supercomputer

Motivation

On HPC cluster (high performance computing/supercomputer), it is often to have multiple version of the same software installed. When the user want to use the specific software which the certain library, changing environment variable like $PATH manually is tedious and sometime difficult, the is the common errors during running job in HPC. To solve the problem, corresponding shell script would have to be written for multiple languages. All of these explicit steps are error prone and difficult to maintain. It is also no simple upgrade path. One exist solution is by using modulefiles, a (Unix) tool for dynamic modification of a user's environment.

Module Commands

Here are some module commands:
  • module avail: to check available modulefiles
  • module list: view current active modules
  • module purge: delete currently loaded modules
  • module load <package>: to load default module <package>
  • module load <package/version>: to load module <package> on specific version.
  • module unload <package>: unload the package
  • module show <package>: display command triggered by module load
  • module whatis <package>: display 1-line info about the module
  • module help <package>: need a help?

Thursday, October 08, 2015

Building your own NAS/NFS solution with NAS4Free

NAF4Free is a fork of BSD/FreeBSD which is dedicated for network attached storage. The NFS, Network File System, is shared file system protocol allowing client to access file across network. The following is my resume of tutorial given on HPC workshop in ICTP about building own NAS/NSF solution with Nas4free.

NAS4Free Web UI interface

It is assumed you already has master and compute nodes in Virtualbox, so the next task is to mount NAS4Free on master either on compute node.

Mount NAS4Free from Master Node

Wednesday, October 07, 2015

Green Computing ala Barcelona Supercomputer

Selain metrik performansi yang diukur dalam floating points operation per second (FLOPS) dan diranking oleh TOP500, ada metrik lain yang dijadikan acuan yakni Flops/W yang menunjukkan seberapa besar superkomputer tersebut ramah lingkungan dan diperingkat oleh GREEN500. Metrik lain yang bisa dijadikan acuan adalah Flops/$, kemampuan superkomputer per USD, namun belum ada website yang memeringkat berdasarkan metrik tersebut.

Untuk menuju superkomputer ramah lingkungan, hal yang bisa dilakukan adalah dengan menggunakan CPU atau core low-power semacam ARM. Mont-blanc adalah project Uni Eropa untuk mengevaluasi CPU di pasaran yang bisa dijadikan superkomputer berenergi rendah. Mont-blanc project di-handle oleh BSC (Barcelona Supercomputing Centre) di Spanyol. Tulisan berikut adalah ulasan singkat studi profile energi yang digunakan oleh Mont-blanc di BSC yang saya lakukan secara remote dengan protokol SSH (script codes saya host di Github).

Superkomputer Barcelona menggunakan platform SLURM, sehingga perintah-perintah yang digunakan pada cluster superkomputer tersebut berbeda dengan cluster yang saya bangun dengan VirtualBox sebelumnya. File script yang saya gunakan untuk mendapatkan power profile Mont-blanc saya host disini (authored by Filippo Mantovani).

ssh ke superkomputer Barcelona

Step-by-step:

Membangun komputer cluster di VirtualBox dengan Rocks kit, Part 2: Testing

Setelah berhasil membangun dan menginstall kluster komputer di VirtualBox, saatnya untuk mengetes kluster tersebut dengan komputasi parallel. Goal yang ingin kita tuju adalah membagi job komputasi (berupa command/script) pada masing-masing node yang sudah kita tambahkan pada master node agar komputar tersebut lebih cepat.

Pertama kita tambahkan user agar bisa login ke kluster dengan perintah useradd (login as root in master),
useradd bagus1
useradd bagus2
passwd bagus1
passwd bagus2
rocks sync users
Perintah-perintah diatas akan menambahkan user (bagus2 dan bagus2), mengeset masing-masing password untuk user dan mensinkronkan user dari master ke nodes.

Sinkroniasi user antar compute nodes

Sunday, October 04, 2015

Membangun kluster komputer di VirtualBox dengan Rocks kit, Part 1: Instalasi

Mambangun kluster komputer sangat dibutuhkan untuk melakukan simulasi dan komputasi yang membutuhkan perfomansi tinggi (high performance komputing, HPC), salah satunya adalah pada superkomputer. Untuk membangun superkomputer dengan kluster, ada baiknya dilakukan simulasi dengan menggunakan virtualisasi, yakni dengan menggunakan VirtualBox. Tujuan tulisan ini adalah unutk membangun komputer kluster di VirtualBox dengan Rocks kit (www.rockscluster.org), sebuah open source kit (OS, operating system) untuk real dan virtual cluster.

Gambar infrastruktur yang akan kita bangun adalah seperti berikut,
Komputer kluster dengan 1 Master dan 2 Compute node
Sebelum masuk pada langkah-langkah development cluster ini, ada baiknya kita membiasakan dengan menu-menu VirtualBox seperti di bawah, jika sudah pernah memakainya, silakan lanjut pada step-by-step.

VirtualBox pada Linux Mint
Requirement :
  • Komputer yang sudah terinstall VirtualBox dengan space kosong minimal 30 GB dan RAM 4 GB
  • File ISO instalasi RocksCluster yang bisa di download disini.