Konferensi Nasional Sistem Informasi 2015
26-28 Februari 2015
PARALELISASI ALGORITMA K-MEDOID PADA GPU MENGGUNAKAN OPEN CL Muhammad Tanzil Furqon1, Achmad Ridok2, Wayan Firdaus Mahmudy3 1,2,3 PTIIK, Universitas Brawijaya Jl. Veteran no. 8, Malang, Jawa Timur 65145 1
[email protected], 2
[email protected], 3
[email protected]
Abstrak k-Medoid banyak digunakan karena kemampuannya dalam mendeteksi outlier dalam proses clustering-nya. Namun demikian, kelemahan algoritma ini adalah kompleksitas komputasinya yang tinggi sehingga berdampak pada performa clustering secara keseluruhan. Selain itu, proses pemilihan k jumlah pusat cluster awal secara random membuat hasil proses clustering menjadi tidak stabil. Oleh sebab itu, dalam penelitian ini dirancang algoritma paralel k-Medoid untuk meningkatkan performa serta melakukan optimasi terhadap kelemahan yang ada pada algoritma k-Medoid tradisional. Optimasi yang dilakukan menggunakan metode Cluster Validity Index untuk menentukan jumlah pusat cluster awal dan paralelisasi algoritma k-Medoid menggunakan Open CL. Hasil eksperimen menunjukkan bahwa algoritma paralel k-Medoid mempunyai kualitas hasil clustering yang stabil dan memiliki tingkat performa tinggi, yaitu mencapai 364 kali lebih cepat dibandingkan algoritma k-Medoid tradisional. Kata kunci : k-medoid, clustering, paralel, open cl.
1.
Pendahuluan [Times New Roman 10, bold]
GPU saat ini tidak hanya digunakan sebagai mesin grafis yang handal tetapi sekaligus sebagai prosesor paralel yang dapat diprogram sesuai dengan kebutuhan tertentu, biasa disebut sebagai GP-GPU (General Purpose GPU), dengan karakteristik: kebutuhan komputasi besar, paralelisme, dan berorientasi pada output dibanding latensi [1]. Semua karakteristik tersebut menjelma sebagai sebuah programmable prosesor yang handal yang diprogram dengan menggunakan bahasa pemrograman tertentu menggunakan Application Programming Interface (API), seperti Open CL, yang digunakan untuk mendefinisikan dan mengendalikan platform. Lebih jauh lagi, Open CL dapat meningkatkan kecepatan dan responsifitas berbagai macam aplikasi, mulai dari jenis aplikasi game dan hiburan hingga perangkat lunak untuk keperluan ilmiah dan medis [2]. Dengan lahirnya GP-GPU seolah memberikan harapan baru bagi bidang/area yang banyak melibatkan proses pengolahan informasi didalamnya, seperti Information Retrieval (IR), yang pada umumnya melibatkan data dalam jumlah yang besar dan jumlah fitur yang banyak (dimensi tinggi). Data tersebut diproses dan dikumpulkan untuk kemudian diubah menjadi pengetahuan dalam proses
408 Universitas Klabat, Airmadidi, Minahasa Utara, Sulawesi Utara
data mining [3]. Dalam data mining, k-Medoid merupakan salah satu algoritma yang cukup populer yang digunakan dalam proses clustering dimana menggunakan obyek sebagai pusat cluster-nya. Metode tersebut menghitung kesamaan atau jarak antara obyek ke pusat cluster dengan meminimalkan nilai sum of error antara setiap objek dan pusat cluster yang sesuai. Hal ini membuat k-Medoids lebih handal dari varian sejenisnya, yaitu k-Means, dalam hal kepekaan terhadap outlier dan noise. Namun demikian, metode ini juga memiliki kekurangan yaitu dari sisi kompleksitas komputasinya yang tinggi, yaitu O(k(n - k)2) [3]. Oleh sebab itu, dalam penelitian ini nantinya akan dihasilkan metode untuk meningkatkan performa dari algoritma k-Medoid dengan menggunakan bantuan GPU sebagai prosesor paralel menggunakan bahasa pemrograman Open CL khususnya untuk dataset dengan dimensi tinggi. 2.
Algoritma k-Medoid
K-Medoid menggunakan k sebagai jumlah pusat cluster awal yang dihasilkan secara acak di awal proses clustering. Setiap obyek yang lebih dekat dengan pusat cluster akan dikelompokkan dan membentuk cluster baru. Algoritma kemudian secara acak menentukan cluster center baru dari
Konferensi Nasional Sistem Informasi 2015
26-28 Februari 2015
setiap cluster yang terbentuk sebelumnya dan menghitung ulang jarak antara obyek dan pusat cluster baru yang dihasilkan. Jarak antar obyek i dan j dihitung dengan menggunakan dissimilarity measurement function, dimana salah satunya adalah Euclidean Distance Function yang ditunjukkan dalam persamaan berikut:
(1)
dimana Xia adalah variabel ke-a dari obyek i (i=1, ..., n; a=1, ..., p) dan dij adalah nilai Euclidean Distance. Algoritma juga menghitung probabilitas penukaran setiap obyek dengan pusat cluster yang lain menggunakan fungsi kriteria. Salah satu fungsi kriteria yang digunakan adalah absolute-error [4] seperti pada persamaan berikut:
2.2 Optimasi Algoritma k-Medoid Beberapa studi telah dilakukan untuk meningkatkan kinerja dan kualitas algoritma. Dari segi kualitas, dalam studi literatur mengungkapkan dua metode optimasi untuk mengatasi kelemahan dari algoritma k-Medoid: metode generasi k pusat cluster awal [7,8], yang memberikan hasil akhir yang stabil, dan jumlah cluster yang sesuai [8,9], dimana obyek dikelompokkan lebih alami. Pemilihan pusat cluster awal sangat berpengaruh terhadap hasil akhir proses clustering. Jika terlalu banyak cluster yang dipilih, hasilnya dapat terduplikasi, dan jika terlalu sedikit cluster yang dipilih, data yang berarti akan hilang karena kombinasi atau penghapusan cluster yang berbeda. Metode yang digunakan oleh Park [7] ditunjukkan pada persamaan berikut:
(3) (2)
di mana E adalah jumlah dari absolut error untuk semua objek dalam dataset; p adalah titik dalam ruang yang mewakili suatu objek dalam kluster Cj, dan oj adalah obyek didalam cluster Cj. 2.1 Analisa terhadap Algoritma k-Medoid k-Medoid menggunakan medoid, obyek pusat dalam cluster, sebagai pusat klaster sedangkan kMean menggunakan perhitungan jarak ratarata/mean dalam menentukan pusat clusternya. Metode ini yang membuat k-Medoid lebih unggul dibandingkan k-Means dalam mendeteksi outlier. KMedoid juga dapat digunakan untuk dataset dengan nilai domain kontinyu maupun diskrit sedangkan kMean hanya cocok untuk kasus domain kontinyu [5]. Keuntungan lain dari algoritma k-Medoid adalah hasil proses clusteringnya tidak tergantung pada urutan masukan dataset [6]. Terlepas dari beberapa keunggulan dari kMedoid diatas, beberapa kelemahan juga ditemukan, terutama berkaitan dengan inisialisasi pusat cluster [5,6]. k-Medoid tradisional menghasilkan nilai awal cluster k secara acak. Nilai awal k ini kemudian digunakan untuk membangun cluster awal dalam proses clustering. Hasil dari proses ini akan digunakan untuk menentukan calon cluster berikutnya berdasarkan perhitungan fungsi kesamaan dalam cluster, sehingga membuat algoritma k-Medoids mendapatkan hasil yang berbeda setiap kali dijalankan. Kelemahan lain dari algoritma k-Medoid adalah proses komputasinya yang sangat memakan waktu sehingga tidak efisien diterapkan pada dataset besar [4,6].
409 Universitas Klabat, Airmadidi, Minahasa Utara, Sulawesi Utara
dimana vj merupakan cluster coefficient, dij jarak antar titik i dan j, dan dil juga jarak antara i dan l. Selain itu, Park [7] juga menggunakan matriks jarak untuk menyimpan kalkulasi jarak antar obyek dalam dataset yang nantinya digunakan dalam proses clustering untuk meningkatkan performa algoritma. Pendekatan lain dalam rangka meningkatkan kualitas algoritma k-Medoid adalah dengan memilih metode yang tepat untuk menentukan jumlah cluster awal (k). Sebagai suatu pembelajaran tanpa pengawasan (unsupervised learning), kelas dari dataset dalam proses clustering tidak diketahui. Dengan demikian, menemukan jumlah cluster awal yang tepat adalah masalah yang masih belum diketahui solusi terbaiknya. Namun, ada suatu pendekatan yang digunakan oleh Pardeshi [8] untuk menemukan jumlah cluster yang tepat dalam suatu dataset yaitu menggunakan cluster validity index dengan persamaan:
(4)
3.
Open CL
Open CL merupakan bahasa pemrograman yang open, vendor-neutral, dan multi-platform yang dikembangkan oleh Khronos Group untuk mendukung aplikasi paralel pada lingkungan dan piranti yang heterogen, termasuk Central Processing Unit (CPU) dan GPU [9]. Ada tiga keuntungan yang bisa didapatkan ketika menggunakan Open CL, yaitu portabilitas, standar proses vector, dan kemampuan pemrograman paralel yang dimiliki. Open CL merupakan bahasa pemrograman yang portabel karena dapat dijalankan pada multi-
Konferensi Nasional Sistem Informasi 2015
26-28 Februari 2015
platform device, termasuk Nvidia dan AMD sebagai dua platform GPU terpopuler saat ini. Keuntungan Open CL lain yang paling penting adalah kemampuan untuk membuat program paralel. Pada program paralel, instruksi-instruksi diproses secara bersamaan menggunakan prosesor-prosesor paralel untuk meningkatkan performa aplikasi secara signifikan. Program-program yang diproses secara paralel disebut sebagai kernel.
berbeda. Selain itu, beberapa work-item yang mengakses resource yang sama disebut work-group. Dalam work-group, work-item dapat mengakses blok memori berkecepatan tinggi yang sama, atau disebut dengan local memory. Selain itu, work-item juga dapat disinkronisasi dengan menggunakan fence dan barier dalam work-group. Akhirnya, hirarki level komputasi "tertinggi" Open CL disebut compute unit, yang hanya mampu mengeksekusi satu work-group pada suatu waktu.
3.1 Model Komputasi Open CL 3.2 Model Memori Open CL Dalam model pemrograman Open CL (gambar 1), proses komputasi dibagi menjadi dua jenis berdasarkan bagaimana dan dimana proses tersebut dijalankan. Proses yang dijalankan secara sekuensial disisi host disebut program host, sementara proses yang dijalankan secara paralel pada sisi perangkat (GPU atau bahkan CPU) dikenal sebagai program kernel. Program host berupa program sekuensial biasa, seperti C, C++, java, dll, yang dapat menjalankan/ memanggil fungsi paralel, yaitu program kernel. Dalam pemrograman paralel, kernel dikirim ke perangkat yang dituju untuk dieksekusi menggunakan program host [9]. Selain itu, perangkat yang terhubung yang digunakan untuk menjalankan kernel diorganisasi oleh aplikasi host menggunakan wadah yang disebut context. Dengan kata lain, host memilih perangkat dan menempatkan mereka dalam context. Selain itu, Open CL menggunakan program untuk menampung kernel untuk dipanggil oleh aplikasi host. Sebelum mengeksekusi kernel, struktur yang disebut command queue dibuat pada aplikasi host untuk memberitahu perangkat mana yang digunakan untuk mengeksekusi fungsi kernel tersebut.
Model memori Open CL diorganisasi dalam suatu struktur hirarki (gambar 2). Pemahaman yang baik tentang struktur memori dan penggunaannya sangat penting untuk mendapatkan hasil yang optimal dan efisien. Struktur memori Open CL terdiri dari: global memory, yaitu memori berkapasitas besar, tetapi kecepatannya yang paling lambat dalam memproses work-item; local memory, yaitu memori dengan kapasitas terbatas, tetapi cepat dan tempat yang tepat bagi work-item untuk menyimpan hasil eksekusi kernel; dan private memory, lebih cepat dari local memory, tetapi dengan kapasitas yang jauh lebih kecil daripada struktur memori lainnya. Selain itu, struktur hirarki ini mencerminkan aksesibilitas setiap jenis memori, dimana global memory dapat diakses oleh setiap work-item, local memory dapat diakses oleh beberapa work-item didalam work-group, dan private memory hanya dapat diakses oleh satu work-
item. Gambar 2. Model Memori Open CL [9] 4.
Gambar 1. Model Komputasi Open CL [9] Pada Open CL, sebuah kernel dapat terdiri dari beberapa perintah proses/komputasi. Setiap eksekusi komputasi dalam kernel disebut work-item, unit komputasi "terendah" Open CL. Setiap work-item memiliki nomor identifikasi yang unik untuk mengidentifikasi tiap-tiap proses komputasi selama eksekusi kernel, yang disebut sebagai global_ID. Setelah work-item selesai dieksekusi, work-item berikutnya akan dieksekusi dengan global_ID yang
410 Universitas Klabat, Airmadidi, Minahasa Utara, Sulawesi Utara
Paralelisasi Algoritma k-Medoid
Proses paralelisasi k-Medoid dilakukan berdasarkan beberapa langkah berikut: 1. Identifikasi operasi-operasi paralel. Proses identifikasi dilakukan dengan mengenali operasi-operasi yang independen, sehingga dapat dijalankan secara paralel. 2. Membuat kernel. Kernel merupakan suatu prosedur/fungsi yang dijalankan secara paralel
Konferensi Nasional Sistem Informasi 2015
3.
4.
26-28 Februari 2015
menggunakan bahasa pemrograman yang mendukung pemrograman paralel (Open CL). Sinkronisasi hasil proses paralel. Proses sinkronisasi berfungsi untuk menggabungkan hasil dari proses paralel untuk diproses pada operasi selanjutnya. Memetakan proses paralel dengan prosesor. Pemetaan ini dilakukan untuk dapat mengoptimalkan antara jumlah proses paralel dengan jumlah prosesor yang ada sehingga proses paralel secara keseluruhan dapat berjalan lebih efisien.
Berdasarkan analisa terhadap seluruh proses yang ada pada algoritma k-Medoid, maka didapatkan beberapa kesimpulan: 1. Proses perhitungan jarak antar obyek merupakan proses paralel yang saling independen satu dengan yang lainnya. 2. Fungsi kernel pada algoritma k-Medoid adalah fungsi perhitungan jarak antar obyek yang kemudian disimpan dalam matriks jarak ketetanggaan. 3. Sinkronisasi proses dilakukan setelah proses perhitungan jarak antar obyek sebagai proses paralel hasil eksekusi kernel. Pemetaan proses paralel dilakukan dengan menentukan proses mana yang akan dijalankan dengan menggunakan prosesor pada GPU dan mana yang akan diproses dengan menggunakan prosesor CPU. Proses perhitungan jarak dilakukan pada GPU sedangkan proses update cluster dilakukan pada lingkungan host menggunakan CPU.
menggunakan metode sinkronisasi work-item, barrier(CLK_LOCAL_MEM_FENCE), ketika beberapa work-item perlu untuk mengakses data yang sama. Metode ini memastikan bahwa setiap work-item telah mencapai titik proses yang sama. Hal ini menjadi penting ketika work-item harus menyelesaikan komputasi dengan hasil intermediate yang akan digunakan dalam perhitungan selanjutnya, yaitu proses pembentukan cluster. 5.
Pengujian
Data uji yang digunakan adalah data yang memiliki variasi dimensi/fitur, mulai dari data dengan dimensi rendah (dibawah 100) hingga data berdimensi tinggi (diatas 1000). Selain itu, data uji juga dipilih berdasarkan jumlah data yang diproses, yaitu mulai dari jumlah data rendah (dibawah 1000) hingga dataset dengan jumlah data tinggi (diatas 10000). Data didapatkan dari situs Speech and Image Processing Unit School of Computing, University of Eastern Finland [10] yang menggunakan dataset dari hasil penelitian beberapa jurnal. Tujuan dari pemilihan data uji ini adalah untuk mengetahui performa dari algoritma paralel yang dihasilkan terhadap data yang memiliki variasi dimensi dan jumlah data yang berbeda. Evaluasi yang digunakan pada penelitian ini adalah dengan menggunakan metode validasi Silhouette [4] untuk mengetahui kualitas hasil proses clustering algoritma paralel k-Medoid. 6.
Hasil Pengujian
Eksperimen dibagi menjadi dua bagian. Pertama, eksperimen dengan jumlah data dan dimensi untuk mengetahui seberapa besar pengaruhnya terhadap algoritma. Kedua, mengukur lama waktu eksekusi algoritma dari fungsi kernel DistanceMatrix untuk mengetahui performa dari fungsi kernel yang melakukan proses paralel. Tabel 1 dan 2 menunjukkan lama waktu eksekusi algoritma (running time) paralel k-Medoid dan sekuensial k-Medoid (dalam satuan detik). Sedang tabel 3 dan 4 menunjukkan lama waktu eksekusi fungsi kernelnya. Tabel 1. Waktu eksekusi dengan data sedikit dan dimensi tinggi Algoritma Paralel kMedoid Sekuensial k-Medoid Performa
Gambar 3. Algoritma Kernel Matriks Jarak Fungsi matrik jarak pada gambar 3 menggunakan local memory GPU (locFeatures) untuk menyimpan semua fitur dalam dataset dalam bentuk array berdimensi satu. Kernel ini juga
411 Universitas Klabat, Airmadidi, Minahasa Utara, Sulawesi Utara
Jumlah data: 1024 Dimensi data 32 64 128 7,37 7,37 7,45
256 7,49
512 7,54
227,73
441,52
726,90
1395,50
2744,74
30,92
59,92
97,53
186,22
364,07
Konferensi Nasional Sistem Informasi 2015
26-28 Februari 2015
Tabel 2. Waktu eksekusi dengan data banyak dan dimensi rendah 240 0,19
399 0,52
Dimensi data: 2 Jumlah data 788 3100 3,37 200,01
0,94
3,60
27,33
1694,25
12206,80
4,99
6,87
8,12
8,47
8,27
Algoritma Paralel kMedoid Sekuensial k-Medoid Performa
6014 1476,79
Tabel 3. Waktu eksekusi kernel dengan data sedikit dan dimensi tinggi Jumlah data: 1024 Dimensi data 32 64 128 256 512 0,2 0,04 0,06 0,09 0,16
Sedangkan untuk dataset dengan jumlah data banyak dan dimensi data rendah, algoritma paralel optimasi k-Medoid unggul 4-8 kali lebih cepat seperti terlihat pada tabel 2.
Gambar 6. Waktu eksekusi algoritma paralel kMedoid dengan jumlah data banyak
Tabel 4. Waktu eksekusi kernel dengan data banyak dan dimensi rendah Dimensi data: 2 Jumlah data 240 399 788 3100 6014 0,02 0,02 0,02 0,09 0,28 7.
Pembahasan dan Analisa Hasil Pengujian
Performa algoritma paralel optimasi k-Medoid unggul jauh dibanding algoritma sekuensial kMedoid dengan waktu eksekusi 30-364 kali lebih cepat untuk jumlah data sedikit dan dengan dimensi data tinggi seperti yang terlihat pada tabel 1.
Gambar 7. Performa algoritma paralel k-Medoid dengan jumlah data banyak 7.1. Analisa Pengaruh Jumlah Data
Gambar 4. Waktu eksekusi algoritma paralel kMedoid dengan dimensi data tinggi
Gambar 5. Performa algoritma paralel k-Medoid dengan dimensi data tinggi
412 Universitas Klabat, Airmadidi, Minahasa Utara, Sulawesi Utara
Banyaknya jumlah data sangat berpengaruh terhadap performa algoritma sekuensial k-Medoid. Hal tersebut dikarenakan kompleksitas waktu komputasi yang berderajat dua/kuadrat. Sedangkan pada algoritma paralel optimasi k-Medoid diuntungkan dengan kemampuan proses paralel yang melakukan kalkulasi jarak secara paralel menggunakan bantuan prosesor pada GPU. Hal tersebut ditunjukkan pada tabel 2 dan gambar 6, yaitu ketika jumlah data dinaikkan dua kali lipat maka running time algoritma menjadi naik hampir 8 kali. Untuk fungsi kernel algoritma optimasi kMedoid, fungsi DistanceMatrix memiliki performa yang relatif bagus untuk jumlah data banyak dengan hanya sedikit kenaikan waktu eksekusi. Meskipun demikian, performa fungsi paralel kernel tersebut masih bisa dikatakan belum optimal dimana waktu eksekusi menunjukkan peningkatan 3 kali lipat dari 0,09 ke 0,28 detik ketika jumlah data dinaikkan 2 kali lipat dari 3100 ke 6014 sebagaimana yang tertera pada tabel 4 dan gambar 7.
Konferensi Nasional Sistem Informasi 2015
26-28 Februari 2015
7.2. Analisa Pengaruh Dimensi Data Eksperimen algoritma paralel optimasi kMedoid dengan data berdimensi tinggi menunjukkan hasil performa yang sangat baik. Tingkat performa ini lebih baik dibandingkan ketika algoritma tersebut digunakan untuk melakukan clustering dengan jumlah data besar. Hal tersebut dibuktikan dengan menaikkan dimensi data 2 kali (256 ke 512) menghasilkan kenaikan waktu eksekusi kurang dari 2 kali (7,49 ke 7,54) seperti ditunjukkan pada tabel 1 dan gambar 4. Hal tersebut dikarenakan proses paralel pada waktu kalkulasi jarak menggunakan fungsi DistanceMatrix, yaitu tiap fitur pada tiap titik/obyek dikalkulasi secara paralel dan dijumlahkan untuk mendapatkan nilai Euclidean Distancenya. Detailnya, work-item dalam program kernel mengkalkulasi tiap jarak fitur masing-masing titik/obyek. Oleh sebab itu, semakin banyak jumlah fitur/dimensi dari suatu obyek semakin banyak proses kalkulasi paralel yang dieksekusi oleh kernel yang menunjukkan penggunaan arsitektur paralel secara optimal. Dari sisi performa, fungsi paralel DistanceMatrix semakin tinggi performanya seiring dengan semakin tingginya dimensi data seperti yang ditunjukkan pada gambar 5 dan tabel 3. Kembali, hasil tersebut menunjukkan bahwa fungsi paralel kernel DistanceMatrix lebih optimal digunakan untuk data dengan dimensi tinggi dibandingkan dengan jumlah data yang banyak. 8.
Kesimpulan
Pada penelitian ini dapat disimpulkan mengenai beberapa hal, diantaranya adalah: · Permasalahan stabilitas hasil clustering dan performa algoritma k-Medoid dapat diselesaikan dengan menggunakan cluster coefficient untuk mendapatkan pusat cluster awal dan fungsi matriks jarak untuk mengurangi jumlah komputasi. · Algoritma paralel k-Medoid terbukti dapat meningkatkan performa proses clustering hingga mencapai 364 kali lebih cepat dibanding algoritma sekuensial k-Medoid. · Algoritma paralel k-Medoid lebih optimal digunakan untuk memproses data dengan dimensi tinggi dibandingkan dengan jumlah data yang banyak. Daftar Pustaka: [1] Owens, J.D., ”GPU Computing”, Proceedings of the IEEE, Vol. 96, No. 5, May 2008. [2] Khronos Group, ”OpenCL - The open standard for paral- lel programming of heterogeneous systems”, [Online], Available: http://www.khronos.org/opencl/. [diakses tanggal 11 Aug 2014].
413 Universitas Klabat, Airmadidi, Minahasa Utara, Sulawesi Utara
[3] Han, J. and Kamber, M., ”Data Mining Concept and Technique”, 2nd ed., MorganKaufmann, 2006. [4] Kaufman, L., and Rousseeuw, P. J., Finding groups in data: An introduction to cluster analysis. New York: Wiley, 1990. [5] Theodoridis, S., and Koutroumbas, K., Pattern Recognition. Academic Press, 2008. [6] Barioni, M. C. N., et al., An e_cient approach to scale up k-medoid based algorithms in large databases. [Online], Available: http://www.lbd.dcc.ufmg.br/colecoes/sbbd/2006 /018.pdf. [diakses tanggal 10 Sept 2012]. [7] Park, H. S., and Jun, C. H., A simple and fast algorithm for K-medoids clustering, Expert Systems With Applications, 2009, Vol.36(2), pp.3336-3341. [8] Pardeshi, B., and Toshniwal D., Improved KMedoids Clustering Based on Cluster Validity Index and Object Density, Advance Computing Conference, Feb. 2010, pp.379-384. [9] Scarpino, M., ”OpenCL in Action,” Manning publications, 2011. [10] Speech and Image Processing Unit, School of Computing University of Eastern Finland, datasets", [Online], "Clustering Available:http://cs.joensuu._/sipu/datasets/. [diakses tanggal 12 Mar 2013].