Showing posts with label komputasi. Show all posts
Showing posts with label komputasi. Show all posts

Wednesday, June 05, 2024

Rekomendasi direktori untuk penyimpanan data

Ketika bekerja dalam tim, atau dengan tim, tempat penyimpanan data menjadi masalah. Si A menyimpan data di "download", si B di "my document", dan si C di "Files". Untuk menyamakan tempat penyimpanan data di komputer, saya merekomendasikan hal berikut.

Komputer dengan satu harddisk (SSD/HDD)

Untuk komputer dengan satu hardisk, tempat penyimpanan data terbaik adalah di "home", atau "/home/$USER/data", dimana $USER adalah nama user, misal "bagus" (sehingga menjadi "/home/bagus/data"). Di Linux, kita hanya butuh mengetik "cd" untuk "pulang ke rumah". Untuk memanggil path "data", siapapun usernya, dalam python, kita bisa menggunakan Path dari pathlib berikut.

from pathlib import Path
data = Path.home() / "data"

Oya, di era sekarang ini, kita tidak perlu membuat partisi tersendiri untuk data. Beda dengan zaman saya kuliah dulu yang perlu mempartisi satu HDD menjadi beberapa drive agar ketika drive satu rusak, drive lainnya masih bisa digunakan.

Komputer dengan multi harddisk

Untuk komputer dengan multi harddisk, tempat penyimpanan data yang saya rekomendasikan adalah di root, yakni "/data". Siapapun usernya, pathnya pasti akan sama dalam hal ini.

Pro-kontra:

Kenapa satu harddisk di "home" dan multi-hardisk di "/data"? Sebetulnya "/data" lebih universal karena tidak bergantung "User", namun karena lokasinya di "/" (root), menurut saya hal ini rentan masalah. Misalnya jika sistem korup atau clash, biasanya data di bawah root akan terkena juga. Alasan kedua karena sekuriti/akses terhadap root. Home bisanya lebih terisolasi.

Thursday, March 28, 2019

Data yang besar mengalahkan algoritma yang baik

Dalam sebuah workshop yang saya ikuti setahun dua tahun yang lalu di Trieste, seorang pemateri dengan pedenya menyampaikan: "bigger data win over good algorithm", data yang besar mengalahkan algortima yang baik. Saya tercengang. Benarkah...? Selama sekolah, S1~S2, saya diajari dan dituntut untuk menghasilkan algoritma yang baik dari data pengukuran fisis untuk aplikasi kontrol, prediksi, diagnosa dan lain sebagainya. Namun sekarang paradigmanya berubah, bukan bagaimana meng-improve algoritma, tapi mempebesar jumlah data. Tidak sepenuhnya benar memang, namun ini jauh lebih mudah. Akan lebih mudah mengakuisisi lebih banyak data daripada mengimprove/memodifikasi algoritma yang biasanya membutuhkan matematika yang cukup rumit.

Benar adanya, tak semata-mata algoritma/metode yang baik, tapi juga data yang banyak. Gampangannya, orang yang yamg "pintar" tapi jarang belajar dibanding dengan orang yang "rajin" belajar dari banyak data. Pengalaman menunjukkan, tipe orang disebut terakhir lebih banyak berhasilnya daripada tipe orang yang disebut pertama.

Analogi lagi, data vs algoritma: mana yang lebih penting adalah seperti membandingkan mana yang lebih dulu: telur atau ayam. Awalnya saya, mungkin seperti kebanyakan orang juga, berpikiran telur lebih dahulu. Alasannya: telur lebih rigid, lebih statis, dan lebih kecil daripada ayam. Namun hasil penelitian membuktikan bahwa ayam lebih dahulu daripada telur (artinya Tuhan menciptakan ayam dulu, ini lebih masuk akal). Begitu juga dengan data vs algoritma: data-lah akhirnya yang menang, tentunya data yang banyak, big atau bahkan very big.

Jadi tunggu apa lagi? Cari data sebanyak-banyaknya, seakurat mungkin! Mengumpulkan data tidak sesulit membangun algortima. Kalau membangun algortima, kita butuh mikir exktra, menurunkan rumus matematik, dan mengimplementasikannya dalam bahasa pemrograman. Sedangkan untuk mengumpulkan data, kita cuma butuh waktu, keuletan, dan ketekunan. Contohnya untuk data teks, kita perlu sabar dan rajin mengumpulkan kalimat, tokenisasi, mengetik dan sebagaiknya. Untuk data suara, kita perlu merekam, mengedit dan memanipulasi (tambahkan noise, hilangkana noise, dsb). Jauh lebih mudah untuk memperbanyak data daripada memperbaiki algoritma.

Garbage In Garbage Out
Salah satu prinsip yang penting dalam machine learning dan pengenalan pola adalah "data yang baik", berkualitas. Jika data yang kita masukkan adalah sampah, maka hasilnya juga sampah. Maka, selain memperbanyak data, yang harus kita perhatikan adalah kualitas data tersebut. Jangan sampai data yang kita latih, misal dengan deep learning, merupakan data sampah, sehingga hasilnya juga sampah. Disinilah pentingnya preprocessing.

Berapa data yang "besar" itu?

Pertanyaanya selanjutnya, jika data yang besar mengalahkan algoritma yang baik, seberapa besar data yang besar itu? Ian Goodfellow et al. dalam bukunya "Deep learning" berargumen sebagai berikut,
As of 2016, a rough rule of thumb is that a supervised deep learning algorithm will generally achieve acceptable performance with around 5,000 labeled examples per category, and will match or exceed human performance when trained with a dataset containing at least 10 million labeled examples. Working successfully with datasets smaller than this is an important research area, focusing in particular on how we can take advantage of large quantities of unlabeled examples, with unsupervised or semi-supervised learning.
 Jadi, 5000 data yang terlabeli dengan benar merupakan data minimal dari sisi best practice. Tenju saja, semakin besar semakin baik.

Referensi:
  1. Alon Halevy, P. Norvig, F. Pereira, "The Unreasonable Effectiveness of Data". Available online:https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/35179.pdf
  2. https://www.datasciencecentral.com/profiles/blogs/data-or-algorithms-which-is-more-important

Friday, June 29, 2018

Mengenal arsitektur MIPS: single-cycle vs pipelining

Arsitektur komputer merupakan hal yang menarik untuk dipelajari. Dengan memahami cara kerja komputer, khususnya processor, kita akan lebih mudah belajar IT, khususnya pemrograman dan komputasi. Masalahnya processor era modern menggunakan sistem yang kompleks, contohnya seperti i9, i7, m3 maupun processor buatan AMD dan IBM. Untuk mempelajari cara kerja processor, kita bisa memakai MIPS (Microprocessor without Interlocked Pipelined Stages), processor jaman baheula yang sudah tidak diproduksi di zaman ini [2]; namun konsepnya tetap digunakan oleh processor modern yang sekarang kita gunakan.

Secara umum, cara kerja processor dilihat dari data pathnya dapat dibagi menjadi dua yakni single-cycle dan pipelining.

Gb 1. Simple data path pada arsitektur MISP

Berdasarkan gambar diatas, bisa dijelaskan tahapan datapath pada eksekusi single-cycle sebagai berikut:
  1. PC (program counter): menahan alamat dari instruksi yang akan dieksekusi.
  2. Add: Menambahkan nilai dari PC(alamat saat ini) dengan nilai konstan 4, dan menghasilkan alamat tentatif untuk instruksi selanjutnya. (jika instruksi selanjutnya adalah percabangan dan syaratnya terpenuhi, maka alamat tersebut tidak dipakai).
  3. Add/ALU result: bagian ini menghitung alamat target selanjutnya (branch target address). Inputnya adalah PC+4 dan output dari konstan 16 bit yang di-sign extend menjadi 32 bit dan digeser kiri (left shifted) 2 bits.
  4. Mux: bagian ini menghasilkan alamat selanjutnya. Jika instruksi selanjutnya adalah conditional branch, maka output dari 3 dipilih, selainnya digunakan outout dari 2.
  5. Sign-extend: bagian ini meng-extend/memperluas input 16 bits menjadi 32 bit (dengan menambahkan 16 bit baru dengan "tanda" yang sama dengan bit paling kanan).
  6. Mux: memilih data yang akan ditulis pada register tujuan dari data yang dibaca dari memory dan data hasil perhitungan ALU.

Meskipun cara kerja processor single cycle diatas dapat bekerja dengan baik namun tidak dipakai di komputer modern karena:
  • Semua instruksi harus dieksekusi dalam satu siklus.
  • Lama waktu eksekusi merupakan jumlahan dari tiap instruksi, artinya jika ada instruksi yang dieksekusi cukup lama, maka instruksi lain akan menunggu,
Sebagai solusinya, diperkenalkan pipelining. Analogi yang cukup sederhana adalah proses mencuci, mengeringkan, menyetrika dan melipat/memasukkan lemari. Pada teknik single-cycle (satu siklus), semua tahapan dilakukan berurutan, mencuci dulu, setelah selesai baru dikeringkan, kemudian disetrika dan dimasukkan lemari, baru mencuci lagi. Pada teknik pipelining, sambil mengeringkan, kita bisa mencuci lagi, saat cucian pertama disetrika, cucian kedua dikeringkan, dan cucian baru (ketiga) bisa mulai dicuci. Dengan cara pipelining seperti ini, waktu pemrosesan menjadi jauh lebih sedikit. Gambarnya ditunjukkan seperti di bawah.

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

Related Posts Plugin for WordPress, Blogger...