You are on page 1of 8

Paralel CLOSET+ Algoritması ile Sık Nesne Kümelerinin Bulunması

Tayfun Şen, Cevat Şener, İsmail Hakkı Toroslu


Bilgisayar Mühendisliği Bölümü
Orta Doğu Teknik Üniversitesi
{tayfun.sen, sener, toroslu}@ceng.metu.edu.tr

Öz saklama yönteminde Han ve diğerleri tarafından geliştirilen


fp-tree [5] biçimi kullanılmıştır. CLOSET+'da aynı zamanda
Veri madenciliği alanında ilişkisel kural madenciliği aday budama yöntemi gibi çeşitli iyileştirmeler de
özellikle pazar sepeti uygulamaları ve ağ ziyaret kullanılarak algoritma hızlandırılmıştır.
çözümlemeleri gibi yaygın kullanımları olması nedeniyle Makalenin geri kalanı şöyle ayrılmıştır: Bunu izleyen
sıklıkla incelenmiştir. Çoğu zaman daha ileri bir uygulama bölümde sık nesne kümeleri madenciliği ana hatlarıyla
inşa edilirken ilk adım olarak ilişki kuralları bulunmakta, bu tanıtılacak, çözüm çerçevesi sunulacaktır. 3. bölümde
bilgi kullanılarak katma değerli servisler hazırlanmaktadır. CLOSET+ algoritması genel yapısı itibariyle tanıtılacak, 4.
İşte bu nedenle ilişki kurallarını ortaya çıkarmak için bölümde ise algoritmayı paralelleştirmede kullanılan araçlar
geliştirilen birçok algoritma bulunmaktadır. Sık nesne tanıtılacaktır. İki faz halinde gerçekleştirilen paralel
kümelerinin bulunması ise ilişki kuralları ortaya çıkarılırken algoritma 5. bölümde detaylarıyla açıklanacaktır. Performans
ilk yapılması gereken iş olmuştur. testlerinin yer aldığı 6. bölümden sonra sonuçların
Bu makalede sık nesne kümelerinin bulunmasında açıklandığı bölüm gelmektedir. Makale teşekkür ve
kullanılan seri bir veri madenciliği algoritması olan kaynakça ile son bulacaktır.
CLOSET+ algoritmasının paralel sürümünden
bahsedilecektir. Bu algoritma birden fazla hesaplama 2.Sık nesne kümeleri madenciliği arka planı
elemanı üzerinde aynı anda çalışacak şekilde tasarlanmış,
daha hızlı sonuçlar elde etmek amaçlanmıştır. Algoritmanın İlişkisel kural madenciliği temel olarak belirli bir alana
uygulanmasında hesaplama uçları arasında iletişim için özgü elemanların birbirleriyle ilişkilendirilmesi, bu konuda
MPI kütüphanesi kullanılmış ve uygulama çeşitli sayılardaki kuralların ortaya çıkarılması ile ilgilenir. İlişkisel kural
uçlara sahip kümelerde test edilmiştir. Sonuçlar madenciliğinin ilk koşulu sık nesne kümelerinin
algoritmanın belirli eşik sınırdan yoğun veriler için seri bulunmasıdır. Sık nesne kümelerinin bulunmasından sonra,
sürümden oldukça hızlı çalıştığını göstermektedir. bu kümelerden faydalanarak küme içindeki elemanlar
arasındaki, yani sık nesne kümelerinin alt kümeleri
1.Giriş arasındaki ilişkiler ortaya çıkarılır. İlişkisel kural
madenciliğinin en fazla zaman alan parçası sık nesne
Yaklaşık 15 sene önce ciddi olarak araştırılmaya kümelerinin bulunması parçasıdır. Makalenin bu bölümünde
başlanmasından itibaren [1] veri madenciliği alanında çok ilişkisel kural madenciliği ile ilgili “güven” gibi terimlere
çeşitli gelişmeler yaşanmıştır. Örneğin, ilk ilişkisel kural değinilmeyecek, ancak sık nesne kümelerinin bulunmasında
madenciliği algoritmasının geliştirilmesinden sadece birkaç kullanılan “destek” gibi terimlerden ise bahsedilecektir.
yıl sonra paralel bir sürümü çıkarılmıştı [2]. Bilgisayarların Sık nesne kümeleri açıklanırken en çok kullanılan ve
ve bilgi işlem birimlerinin işletmelerde giderek daha da anlaşılması en kolay olan örnek pazar sepeti analizi
yaygınlaşmasıyla birlikte, bu alanda hiç olmadığı kadar alanındadır:
araştırma ve geliştirme yapıldı.
Sık nesne kümelerinin bulunması, ilişkisel kural TID (sepet Sepet içeriği
madenciliğinin ilk olarak yapılması gereken ve en fazla tanımlayıcısı)
zaman alan parçasıdır. Bundan dolayı bu bölüm
araştırmalarda genellikle öne çıkarılmıştır. Birçok algoritma 1 Bisküvi, ekmek, su, süt
sık nesne kümelerinin bulunması bölümünü geliştirmek için 2 Ekmek, su
çeşitli iyileştirmeler önermiş, böylece zaman ve bellek
kaynaklarını daha verimli kullanmayı amaçlamıştır. Bunun 3 Bisküvi, gazete, süt
yanında verinin saklanma biçimi ile ilgili olarak da yeni 4 Gazete, meyve, reçel
teknikler geliştirilmiştir, buna örnek olarak dikey veri
saklama biçimi kullanan CHARM algoritması [3] 5 Ekmek
gösterilebilir. Son zamanlarda fp-tree (sık örüntü ağacı)
biçimi özellikle yoğun (dense) veri kümelerinde yüksek
sıkıştırma oranı sağlaması nedeniyle tercih edilmeye Tablo 1: Örnek bir pazar sepeti
başlanmıştır.
Bu makalede yüksek performanslı bir sık nesne kümeleri Tablo 1'de görülen veri herhangi bir işletmenin satış veri
madenciliği algoritması olan CLOSET+ [4] algoritmasının tabanı incelenerek çıkarılabilir. Bununla birlikte sık nesne
paralel bir uygulamasından bahsedilecektir. CLOSET+ kümeleri madenciliği pek çok başka alanda da
algoritması 2003 yılında Wang, Han ve diğerleri tarafından kullanılmaktadır.
ileri sürülmüş ve şu ana kadar paralel bir uygulaması Tablodaki ilk alan her tablo satırının tanımlayıcısını,
bildiğimiz kadarıyla yapılmamıştır. CLOSET+ algoritması ikinci alan ise herhangi bir satın alma kümesini, yani pazar
geçmiş çalışmalar da dikkate alınarak geliştirilmiş, veri sepetini göstermektedir. Sepet içerikleri herhangi bir
sıralamaya tabi değildir, düz bir küme yapısında gösteriliş biçimi oldu. Veri tabanları çeşitli şekillerde
gösterilebilir. Sıralı örüntü madenciliğinden farklı olarak gösterilmeye başlandı (dikey format bunlardan biri), sorun
sepet-müşteri ilişkisi bulunmamaktadır, sık nesne kümeleri farklı çözüm uzaylarına aktarılmaya çalışıldı. Bunlardan en
madenciliği için önemli olan herhangi bir satın alma dikkat çeken gelişmelerden biri küme biçimi ile sunulan
işleminin kendisidir. İşlemlerin sırası ve dolayısıyla hangi problemin zaman geçtikçe ağaç ve sonra da çizge (graph)
müşteriye ait oldukları önemsizdir. yapılarına dönüşmesi, sorun düzleminin matematiğin daha
Herhangi bir e elemanının veri tabanında bulunduğu sepet geniş ifade gücü bulunan alanlarına kaydırılması oldu.
sayısına “destek” değeri denmektedir. Çıkacak sonuç sayısını CLOSET+ algoritması da bu evrimden ayrı bir yönde
azaltmak için belirli bir minimum destek değeri kullanılarak ilerlememiştir. Hem veri tabanının biçimi hem de çözüm için
sepet elemanlarından destek değeri bu eşik değerin üstünde kullanılan araç uzayı ilk kullanılan küme yapılarından
olanlar dikkate alınmaktadır. Buna göre eşik değerin üstünde oldukça gelişmiştir. Veri tabanı temel olarak bir ağaç
destek değerlerine sahip olan nesne kümeleri sık nesne şeklinde tutulmakta, çözüm bulunurken çizge algoritmaları
kümeleri olarak adlandırılırlar. ile veri üzerinde gezinilmekte ve madencilik yapılmaktadır.
Yukarıdaki tabloyu veri tabanımız olarak alırsak ve İleriki bölümlerde paralel CLOSET+ anlatılmadan önce
minimum destek değerini iki kabul edersek sık nesne bu bölümde algoritmanın seri halinin özetlenmesi faydalı
kümelerimiz ve destek değerleri şu şekilde çıkar: olacaktır.

{ ekmek : 3 }, { süt : 2 }, { su : 2 }, { bisküvi : 2 }, 3.1.Kapalı sık nesne kümelerinin hızlı bir şekilde
{ gazete : 2 }. bulunması: CLOSET+
{ ekmek, su : 2 }, { bisküvi, süt : 2 }.
CLOSET+ algoritması ilk olarak Pei ve diğerleri
tarafından önerilen CLOSET algoritmasına [7] iyileştirmeler
Parantezlerin içindeki rakam parantez içerisinde bulunan
yapılarak Wang ve diğerleri tarafından [4] yayınlanmıştır.
nesnelerin birlikte destek değerini vermektedir. Örneğin
Kullanılan veri saklama biçimi olan fp-tree (sık örüntü
{ ekmek, süt : 2 } değeri bize ekmek ve süt'ün birlikte
ağacı) şekli, veri tabanını oldukça büyük miktarlarda
olduğu sepetlerin sayısının 2 olduğunu söylemektedir.
sıkıştırabilmesi nedeniyle tercih edilmiştir. Fp-tree biçimi
Bazen destek değerleri yüzde olarak veri tabanındaki işlem
özellikle yoğun veri tabanlarında büyük sıkıştırma oranları
sayısına oranlanarak verilir. Burada 2 olarak görünen destek
sağlamakta, algoritma da özellikle bu tür verilerde hızlı
değeri bu şekilde verildiğinde 2 / 5, yani %40'lık bir desteği
çalışmaktadır. CLOSET+ algoritması esas olarak iki fazdan
ifade eder.
oluşmaktadır. İlk fazda veri tabanı sıkıştırılıp fp-tree inşa
Destek değerinin büyük olması bir nesne kümesinin sık
edildikten sonra asıl veri madenciliği ikinci fazda ağaç
olarak veri tabanında geçtiğini gösterir. Bunun yanında,
üzerinde gezinerek yapılmaktadır. Bundan sonraki iki
destek değerlerinde görülen doğal bir özellik de nesne sayısı
bölümde bu iki faz kısaca açıklanacaktır.
arttıkça destek değerinin ya aynı kaldığı ya da azaldığıdır.
Buradan, ilk olarak Pasquier ve diğerleri tarafından ortaya 3.2.İlk faz: fp-tree'lerin inşası
atılan [6] kapalı sık nesne kümelerinin tanımına geçebiliriz.
İlk fazın amacı veri tabanını sıkıştırmak ve böylece belki
Tanım 1. Kapalı sık nesne kümeleri, herhangi bir alt belleğe sığabilecek büyüklüğe indirmek, ve aynı zamanda
kümesi aynı destek değerine sahip olmayan sık nesne üzerinde işlem yapabilmeyi kolaylaştırmaktır. Fp-tree yapısı
kümeleridir. Bu kümelerin önemi kapsayıcı olmalarından ve önek (prefix) ağaç yapısı şeklindedir, yani benzer nesneleri
sonucu büyük ölçüde sıkıştırmalarından gelir. içeren nesne kümeleri bu ağaçta aynı ana dal üzerinde
Örnek 1. Tablomuza geri dönecek olursak, kapalı sık bulunurlar. Ağaçtaki uçlar nesneleri temsil ederler ve uçlarda
nesne kümelerimiz şöyle bulunurdu: aynı zamanda destek değerleri de bulunur. Destek değerleri
kökten bir uca kadar inildiğinde rastlanan nesnelerin birlikte
{ ekmek : 3 }, { gazete : 2 }, { bisküvi, süt : 2 }, { ekmek, bulunma destek değerleridir. Kökten aşağıya inildikçe nesne
su : 2 }. kümeleri ortak uçları paylaşırlar, dolayısıyla nesnelerin
farklı kümelerde tekrarlanması azaltılmış olur. Sonuç
Görüldüğü üzere nesne kümelerinin sayısı azaldı, özellikle yoğun verilerde çok büyük sıkıştırma oranlarıdır.
“bisküvi”, “su” ve “süt” nesneleri daha geniş nesne kümeleri Fp-tree yapıları oluşturulurken atılan adımlar şunlardır:
tarafından aynı destek değeri ile kapsandıkları için
budandılar ve sonuçtan çıkarıldılar. Kapalı sık nesne 1. Veri tabanı bir kez taranır, her nesnenin destek
kümelerinden sık nesne kümelerine erişilebileceğine dikkat değeri bulunur.
ediniz. { bisküvi, süt : 2 } kümesinden hem { bisküvi : 2 } 2. Destek değeri eşik değerin altında olan nesneler
hem de { süt : 2 } çıkarılabilir. Hem daha az yer kaplaması, veri tabanından atılır.
hem de cevabın tamamını kapsaması nedeniyle kapalı sık 3. Destek değerleri sıralanır ve bu temel alınarak veri
nesne kümeleri son yıllardaki araştırmaların temel sonuç tabanındaki nesne listeleri destek değerleri
ifade biçimi haline geldiler. artandan azalana doğru olmak üzere sıralanır.
4. Sıralı nesne listeleri ağaca yerleştirilir.
3. CLOSET+ algoritması
Ağaca yerleştirme işlemi sırasında nesnelerin ilk olarak
Agrawal ve diğerleri [1] ilişkisel kural madenciliği hangi uca yerleştirildiği bilgisi bir işaretçi dizisi ile başlık
araştırmalarının yolunu açan makalelerini yayınladıklarında tablosunda saklanmaktadır. Bunun yanında aynı nesne tekrar
algoritmalarını ikiye bölmüşlerdi: sık nesne kümelerinin başka bir ağaç ucu olarak yerleştirildiğinde bir önceki uçtan
çıkarılması ve bundan yola çıkarak ilişkisel kuralların bir işaretçi ile bağlantı sağlanmaktadır. Yani, herhangi bir
bulunması. Bu teknik halen büyük ölçüde kullanılmaktadır. nesnenin ağaçta hangi uçlarda olduğu bilgisi hızlı bir şekilde
Yeni algoritmalar ortaya çıktıklarında, eskiye oranla gelişim erişilebilir şekilde saklanmaktadır.
için kullandıkları en önemli tekniklerden biri problemin
Fp-tree biçimi hakkında daha detaylı bilgiyi kaynak seviye C dilinden daha rahat programlama yapıldı. Bununla
makaleden [5] elde edebilirsiniz. birlikte C++ kullanıldığı için MPI konusunda oldukça
esneklik sağlandı.
3.3.İkinci faz: asıl madencilik
4.2.Telden (veya havadan) nesne geçirmek?
İlk fazda inşa edilen fp-tree veri tabanının sıkıştırılmış bir
kopyasıdır, fp-tree inşa edildikten sonra bir daha veri C dili ile programlama yapıldığında çoğu işlem için
tabanına bakmaya gerek yoktur. Fp-tree, yapısı itibariyle seçenekleriniz bellidir. Nesneleri direk olarak iletemezsiniz
ikinci fazdaki madenciliği yönlendirecektir. Bu açıdan veri ve MPI_Pack gibi metodları kullanmak, nesnelerinizi
biçimi ve madencilik ayrı düşünülemez. kendiniz serialize edip diğer işlem uçlarına iletmeniz gerekir.
Kapalı sık nesne kümeleri bulunurken ağaç üzerinde C++ ile nesneye yönelik programlama yaparken alt seviye
aşağıdan yukarıya bir gezinme yapılmakta, nesnelere özel fp- sihirbazlıklara başvurmak uygun olmazdı, ve bu yüzden
tree'ler ana ağaçtan yansıtılmaktadır. Nesnelerin hangi bunun için bir kütüphane kullanıldı: Boost kütüphaneleri.
sırayla çıkarılmaya başlanacağı başlık tablosundan tespit Tansey ve diğerleri 2008'de yayınladıkları makalelerinde
edilmektedir, başlık tablosu aşağıdan yukarıya doğru [8] serialization zorluklarına dikkat çekmekte, var olan
çözülmektedir. Ağacın yapısından dolayı, aşağıdan yukarıya çözümlerin karşılaştırmasını yapmaktadırlar. Varılan
doğru bir çözümleme yapıldığı sürece bulunan sık nesne sonuçlara göre Boost kütüphanesi bu işi en iyi yapan
kümeleri öncekiler tarafından kapsanıyor olabilir, ama asla kütüphanelerdendir. Tansey ve diğerleri makalelerinde kendi
öncekileri kapsıyor olamaz. Bu özellik kullanılarak alt küme geliştirdikleri bir araçtan bahsetmektedirler, makalede
kontrolü yapılmakta, böylece bulunan kapalı sık nesne anlatıldığına göre bu araç serialization için gerekli kodu
kümelerinin gerçekten kapalı olması sağlanmaktadır. otomatik olarak üretebilmektedir. Ancak bu program Ocak
Fp-tree'deki gezinme sonucu ortaya çıkan sık nesne 2009 itibariyle halen genel kullanıma sunulmamıştır.
kümeleri ne yapılmaktadır? Bunlar fp-tree'ye benzer bir Boost kütüphaneleri [9] C++'nın STL ile
ağaçta tutulmaktadır. Sonuç ağacının fp-tree benzeri bir tamamlanamamış noktaları için kaliteli ve sıkı standartlara
yapıda olması sayesinde bu sonuç kümesi de sıkıştırılmış bir sahip kütüphaneler içermektedir. Boost'ta yer alan
biçimde olmaktadır. Fp-tree yapısındaki başlık tablosundan kütüphanelerin bir kısmı ileride C++ standartlarına eklenmek
farklı olarak burada iki seviyeli bir hash indeks üzere kabul görmüştür.
bulunmaktadır. Bu iki indeks sık nesne kümesindeki en son Boost kütüphaneleri içinde yer alan MPI kütüphanesi
nesneden ve onun destek değerinden oluşmaktadır. Bu indeks nesneye yönelik programlama yöntemlerini C++ diline
sayesinde aynı destek değerine sahip olan ve kapsayan bir getirmiştir. Örneğin
kümenin varlığı kontrol edilebilmektedir.
Asıl madencilik hakkında daha detaylı bilgiyi kaynak MPI_Init(&argc, &argv);
makaleden [4] elde edebilirsiniz. MPI_Comm_rank(MPI_COMM_WORLD, &procID);

4.Paralel CLOSET+: Arka plan gibi fonksiyon çağrıları yerini şunlara bırakmaktadırlar:
Bu makalenin ana konusu olan paralel CLOSET+ mpi::environment env(argc, argv);
uygulamasındaki bazı tasarım seçimleri ve nedenleri bu mpi::communicator world;
bölümde anlatılacaktır.
if (world.rank() == 0) {
4.1.Hangi dil? ...
CLOSET+ algoritması ağaç ve çizge benzeri yapılar
içermekte olduğu için üst seviyeden bir programlama dili Boost kütüphanesi üst seviye özellikler sağlarken
programcının işini kolaylaştıracaktır. Ama seviye esneklikten ödün vermemektedir. C'de bulunan hemen
yükseldikçe dilin sunduğu esneklik de azalmaktadır. Ruby, hemen tüm MPI özellikleri Boost kütüphanelerinin C++
Python, Java gibi dillerin sağladığı nesneye yönelik arayüzünde de bulunmaktadır. Eğer bunları kullanmak
programlama deneyimi oldukça iyidir, ama bu diller MPI istemezseniz, C'deki MPI fonksiyonlarına da geri dönme
konusuna ne kadar destek vermektedirler? MPI'ın bütün şansına sahipsiniz.
büyük uygulamaları -doğal olarak- C'de yazıldılar. Bundan Boost kütüphanesi ile C++'da var olan pek çok üst seviye
dolayı C ve C++ dilleri ile MPI standartlarında bulunan veriyi otomatik olarak karşıya yollayabilirsiniz. Buna örnek
hemen hemen her özellik kullanılabilmektedir. Diğer üst olarak string, hash_map, vector, list gibi veri yapıları
seviye dillerin MPI uygulamaları çeşitli şekillerde vardırlar. verilebilir. Ağaç gibi kendinize özgü veri yapılarınız varsa
Bir kısmı tamamen o dille yazılmışken (native) bir kısmı bu yapılara çok küçük değişiklikler ekleyerek bunların da
sadece C kütüphanesi uygulamasını sarma (wrapper) iletilebilir olmasını sağlayabilirsiniz. Boost otomatik olarak
görevini görmekteler. İncelenen birçok kütüphanede sadece işaretçileri izleyecek, tüm ağaç yapınızı doğru olarak karşıya
MPI standardının alt kümesi kadar özelliğe destek verildiği ulaştıracaktır. Boost tüm bunları yaparken kendi MPI
görüldü. Bu dillerin C ve C++'dan daha yavaş olacağını da kütüphanesinin yanında yine Boost'a dahil başka bir
hesaba katmak gerek. Hızın ana ölçüt olduğu yüksek kütüphane olan Serialization kütüphanesini kullanır.
performanslı uygulamalarda bu çok büyük bir dezavantaja Serialization kullanarak serialize edebileceğiniz tüm
sebep olmaktadır. Öte yandan programlamaya yeni başlayan nesneleri tel üzerinden karşıya geçirebilirsiniz.
birisi için C ve C++ zor bir giriş yaşatabilir ve deneyimli bir
programcı bile ruby veya python gibi bir dilde yazmayı 4.3.Hangi MPI?
tercih edebilir. Boost kütüphanelerinin esnek olduğundan bir önceki
Bu iki düşüncenin de kendine has avantajları ve bölümde bahsetmiştik. Boost kütüphaneleri için alt katmanda
dezavantajları var. Bu makalede anlattığımız uygulama için hangi MPI kütüphanelerinin kullanıldığının hiçbir önemi
seçim C++ oldu, nesneye yönelik programlama yaparak alt yoktur. C'de yazılmış MPI kütüphaneleri sıkı bir şekilde
standarda uydukları için Boost birçok popüler MPI oldukça artırır. Kaba bir hesaplama ile hareket sayısının
kütüphanesini arka planda kullanabilmektedir. Tek yapmanız işlemlere bölünmesi tam adil bir işbölümü sağlamasa da
gereken Boost::MPI derlenmeden önce istediğiniz MPI rastgele hareketlerin bulunduğu bir veri tabanında yeterince
uygulamasının GCC sargısının (wrapper: mpicc gibi) PATH adil bir iş bölümü sağlamaktadır.
değişkeninizde önde olmasını sağlamaktır. Gerisini Boost Sonuç olarak, bazı işlemler diğer işlemlerden önce işlerini
halledecek, kütüphane doğru MPI kütüphanesine bağlanarak bitirip beklemeye başlayabilirler, ama bu daha az beklemeye
derlenecek ve çalışacaktır. sebep olmak için gereken ön işten daha verimlidir.
MPI kütüphane uygulamaları genel ağda çok sayıda
bulunmaktadır. Paralel CLOSET+ için ihtiyaçlar belirlendi 5.1.2.Ağaç yapıları ve birleştirme işlemi
ve en uygun seçenek olarak OpenMPI'da karar kılındı.
Yukarıda da anlatıldığı üzere her işlemin üzerinde belirli
OpenMPI kütüphanesi temel olarak lam/mpi ve mpich
miktarda hareketi işleme işi vardır. İşlemler verinin
kütüphanelerinin başka MPI kütüphanelerinden de
üzerinden iki kez geçerler: İlk geçişte her nesnenin destek
etkilenerek bir araya gelmesi ve iyi özelliklerinin toplanması
değerleri bulunur, ikinci geçişte ise bu kullanılarak fp-tree
ile oluşturulmuş bir kütüphanedir.
yapısı oluşturulur.
OpenMPI kütüphanesinin birçok alt seviye ayar özellikleri
İşlemler ilk geçişlerini bitirdikten sonra ellerinde yerel
vardır. Arka planda birden fazla ağ bağlantısı bulunduğunda
destek değerleri bulunur. Yani işlemlerde sadece kendi yerel
hangilerinin kullanılacağı gibi özelleşmiş ayarlamalara izin
veri tabanlarına göre hazırlanmış destek değerleri
vermektedir. Bunun yanında OpenMPI aynı belleği kullanan
bulunmaktadır. Tüm işlemlerde bulunan yerel destek
işlemlerin belleği ortak kullanmasına (shared memory) izin
değerleri birleştirilerek genel destek değerleri bulunur. Tablo
vermektedir. Örneğin 8 çekirdekli bir işlemcide 8 tane işlem
2'de bu yöntem hayali bir veri tabanı üzerinde, iki işlem için
varsa ve bir işlemden diğerine veri yollanırsa bu veri direk
gösterilmiştir.
olarak belleğin gerekli bölümleri diğer işlemin bellek
bölgesine kopyalanarak iletilir. Bu yöntemle OpenMP [10]
kadar olmasa da sıradan MPI iletiminden daha hızlı bir veri Nesne Süt Ekmek Gazete Su
iletimi gerçekleştirilir. Burada akılda tutulması gereken Destek 5 18 9 15
nokta OpenMP'de belleğin kopyalanmaya gerek kalmadan
iplikler (thread'ler) tarafından ortak kullanıldığı; genel olarak +
MPI'da ve bir MPI kütüphanesi olan OpenMPI'da ise her
Nesne Süt Ekmek Gazete Su
işlemin kendi adres uzayının olduğu ve belleğin bu nedenle
en azından kopyalanmasının gerektiğidir. İşlemlerin kendi Destek 7 12 19 6
adres uzaylarının olması veri paylaşımına kopyalama yükü
getirirken kilitlenme (race condition ve locking) gibi olayları =
ise engeller. Nesne Süt Ekmek Gazete Su
5.Paralel CLOSET+: Uygulama Destek 12 30 28 21

CLOSET+ algoritması paralelleştirilirken kullanılan


Tablo 2: Destek değerlerinin birleştirilmesi
araçlardan bir önceki bölümde bahsedildi. Bu bölümde
paralel algoritmanın kendisi anlatılacaktır. Bundan sonra işlemler yine kendi ellerinde bulunan
Paralel CLOSET+, seri olan sürümündekine benzer bir hareketleri işlemeye devam edeceklerdir. İlk geçiş sırasında
şekilde iki fazdan oluşmaktadır. İlk fazda fp-tree yapıları veri tabanının o işleme ait olan kısmı belleğe aktarıldığı için
kurulmakta, ikinci fazda ise bunlar işlenerek kapalı sık nesne tekrar dosyadan okumaya gerek yoktur. İşlemler veri
kümeleri bulunmaktadır. Bu iki faz bundan sonraki tabanındaki hareketlerde minimum destek değerine sahip
bölümlerin konusu olacaktır. olmayan nesneleri çıkarırlar ve budanmış bu hareketlerdeki
nesneleri destek değeri azalan bir şekilde tekrar sıralarlar. Bu
5.1.Fp-tree'lerin oluşturulması
CLOSET+'daki sıradan işlerdendir. Fp-tree yapısı daha sonra
Bu fazın amacı paralel bir şekilde fp-tree ağaç yapısının bu hareketler kullanılarak oluşturulur.
çıkarılmasıdır. İlk yapılan iş veri tabanının işlem sayısı kadar Fp-tree ağaç yapısı özellikle yoğun veri tabanlarındaki
parçaya bölünmesi ve böylece her işlemin kendi yerel fp-tree verileri oldukça yüksek oranda sıkıştırmaktadır (uygun
yapısını oluşturmaya olanak sağlamasıdır. Veri tabanı verilerde binlerce kat sıkıştırma sağlanabilir). Bunu
bölünürken direk olarak hareket (transaction) sayısı işlem sağlamak için fp-tree yapıları ortak nesne kümelerini
sayısına bölünür ve her işlemci kendisine düşen miktarda tekrarlama yapmadan kullanmaktadır. Veri tabanındaki
hareketten ağaç yapısı oluşturur. hareketlerde, ortak olan nesneler olduğu sürece aynı dal
Örnek olarak Tablo 1'deki 5 hareket iki işlem için üzerinde gezinilmekte, farklı nesnelerin çıkması ile birlikte
parçalandığında 1. ve 2. hareketleri ilk işlemci, 3,4 ve 5. çatala ayrılıp o nesne ağaç ucu olarak eklenmektedir. Bu
hareketleri ise ikinci işlemci alır. 5 işlemci olduğunda her yapı Huffman Coding türü sıkıştırma algoritmalarını
işlemciye bir hareket düşmektedir. Bu basit örnek aklımıza andırmaktadır, gerçekten de her iki teknik de öneklerden
bir sonraki soruyu getirir: (prefix code) yararlanmaktadır.
Dikkat edilmelidir ki oluşturulan fp-tree yapıları da
5.1.1.İş bölümü ne kadar adildir? -aynen destek değerlerinde olduğu gibi- yereldirler.Yine aynı
şekilde tüm işlemlerin ellerindeki fp-tree yapıları paylaşılır
İş bölümlerinin en iyi şekilde parçalanması belirli ve birleştirilir. Veri tabanını temsil eden fp-tree yapılarının
hesaplamalara bağlıdır. Burada pek çok konuda olduğu gibi birleştirilmesi ilk olarak Zaiane ve diğerleri tarafından
bir değiş tokuş (trade-off) vardır. Mümkün olan en iyi iş yayınlanan makalede [15] işlenmiştir. Genel fp-tree yapısı
bölümünü sağlamak için her hareketin içinde bulunan nesne tüm uçlarda bulunmak zorundadır çünkü fp-tree işleme
sayılarının da hesaba katılması gerekir. Bu ise işlem yükünü fazında bu gereklidir. Fp-tree yapısı veri tabanının çok
sıkıştırılmış bir biçimi olduğundan dolayı çoğunlukla belleğe Bu uçlar başlık dizisinin var olan işlem sayısında bölünmesi
sığabilmektedir ve MPI ile hızlı bir şekilde gönderilebilmek ve işlemlere atanması ile elde edilir ve her işlem ağaç
amaçlanmaktadır. yapısında aşağıdan yukarıya doğru madencilik yapar.
Madencilik seri CLOSET+ algoritmasinin tekniklerini
kullanır. Paralel algoritmada eklenenler iş bölümü ile yerel
sonuçların birleştirilip genel sonuca ulaşma işidir.
İş bölümü yine ilk fazdaki gibi tamamen adil bir iş
bölümü değildir. İşlemlerin madencilik yapacakları nesne
sayıları hemen hemen eşit olmasına rağmen (son işlem arta
kalan nesneleri de işleyecektir) bu nesnelerin işlenmesi için
gereken iş miktarı farklıdır. Paralel algoritmada daha adil bir
Resim 1: İki işlemde ayrı fp-tree örnekleri iş bölümü için yapılacak hesaplamaların kendisi pahalı
olacağı ve işi yavaşlatacağı için yapılmamıştır. Bundan
dolayı bazı işlemler işlerini erken bitirip diğer işlemleri
bekleyebilirler.
Her işlemde yerel sonuç ağaçları oluşturulduktan sonra bu
ağaçlar birleştirilir. Bu birleştirme fp-tree yapılarının
birleştirilmesinden farklılıklar içermektedir. Fp-tree yapıları
birleştirilirken destek değerleri toplanıyor, ağaçta
Resim 2: Fp-tree yapıları birleştirildikten sonra bulunmayan yapılar ise ekleniyordu. Sonuç ağaçlarının
birleştirilmesinde ise aynı destek değerlerine sahip nesne
uçları ağaca eklenmez, destek değeri fazla ise o nesne
Resim 1 ve Resim 2'de iki ayrı işlemdeki basit fp-tree
ucunun destek değeri bu değer ile güncellenir. Örnek iki
yapılarının birleştirilmelerini görmektesiniz. Fp-tree
sonuç ağacının birleştirilmesini aşağıdaki şekilde
yapılarının birleştirme işlemi basit bir şekilde iki yapıda
görebilirsiniz.
bulunmayan uçların eklenmesi ve bulunanlarda ise destek
değerlerinin toplanmasını kapsar. Buna göre, her iki ağaç
yapısında da bulunan “süt” nesnesi için destek değerleri
toplanmış, iki uçta da tek başına bulunan “ekmek” ve “su”
nesneleri ise birleştirilmiş ağaca eklenmiştir.
Fp-tree yapılarının birleştirilmesinde MPI nasıl
kullanıldı? MPI içerisinde direk all_reduce fonksiyonu
kullanarak birleştirme yapılabilir. Bu durumda MPI
uygulaması biten yerel ağaç yapılarını alacak, ikişer ikişer
birleştirecek ve tüm uçlara yollayacaktır. Bundan farklı bir
yöntem ise bir ucu “yönetici” kabul etmek, tüm ağaçları o
uçta reduce ettikten sonra diğer uçlara broadcast etmek
Resim 3: İki işlemde ayrı yerel sonuç ağaçları
olabilir. Bu iki yöntemin yanında diğer bir yöntem ise daha
basit send ve recv fonksiyonlarının kullanılarak ağaç
yapılarının birbirlerine gönderilmesi, birleştirilmesi ve diğer
uçlara gönderilmesidir.

5.2.Fp-tree yapılarının madenciliği


İlk fazda paralel olarak veri tabanı üzerinde yerel fp-tree
yapıları oluşturulmuştu. Herhangi bir işlem sadece
kendisinin üzerindeki hareketleri işlediği için yerel olan fp-
tree'ler en sonda birleştirilmişti. Birleştirilen genel fp-tree
yapısı üzerinde ilk fazdakine benzer bir şekilde işlemler
tarafından paralel madencilik yapılacaktır. Asıl CLOSET+ Resim 4: Birleştirilmiş sonuç ağacı
algoritmasında bulunan başlık dizisi, destek değeri minimum
Resimlerden de görüldüğü üzere, sonuç ağacı yapı
değerden büyük her nesne için ağaçta geçtiği ilk uca birer
itibariyle fp-tree yapısına benzese de birleştirme işlemi temel
işaretçi tutmaktadır. Paralel algoritmada bu bilgi kullanılarak
olarak farklıdır. Fp-tree'ye benzer olarak önekler burada da
iş bölümü yapılmıştır.
kullanılmakta, kapalı sık nesne kümeleri sıkıştırılmış bir
Asıl CLOSET+ algoritması incelendiğinde madencilik
şekilde tutulmaktadır.
yapılırken aşağıdan yukarıya bir uç sırası izlenmesinin
Sonuç ağaçları birleştirilirken kapalı sık nesne
önemli olduğu görülür. Bunun nedeni ağaç yapısında aşağıda
kümelerinin özellikleri dikkate alınmıştır. Bir işlemde var
yer alan uçların madenciliğinde daha kapsamlı sık nesne
olan bir dal ucu diğer ağaçta aynı şekilde (aynı dal üzerinde)
kümelerinin bulunmasıdır. Dolayısıyla üstlerdeki uçlara
varsa destek değeri büyük olanın destek değeri alınmaktadır.
doğru gidildikçe daha önce bulunmuş olan sık nesne
Bir işlemin sonuç ağacında olmayan nesne ucu diğer işlemin
kümeleri tarafından kapsanmış olma durumu sonuç ağacında
sonuç ağacı ile geliyorsa bu uç birleştirilirken eklenmektedir.
kontrol edilecek, kapsanmışlık varsa sonuca
Resim 3 ve Resim 4'de görüldüğü üzere “süt” nesnesi her
eklenmeyecektir. Paralel CLOSET+'de tüm işlemler yerel
iki sonuç ağacında da yer aldığı için büyük olan destek
olarak aşağıdan yukarıya doğru bir madencilik
değeri birleştirilmiş sonuç ağacına alınmıştır. Diğer taraftan
yapmaktadırlar.
bir ağaçta olup diğerinde olmayan nesneler (“su” ve “gazete”
İlk fazdakine benzer olarak işlemlere üzerlerinde
gibi) birleştirilmiş ağaca direk olarak eklenmiştir.
çalışmaları için genel fp-tree ağacından nesne uçları verilir.
6.Performans testleri oldukça düşük kalmıştır.

Performans testleri ODTÜ Bilgisayar Mühendisliğindeki


grid hesaplama ortamında [11] çalıştırılmıştır. Bu kümenin
her bir hesaplama ucunun donanımsal özellikleri şöyledir:
● 2 x Intel Xeon E5430 Quad-Core CPU (2.66 GHz,
12 MP L2 Cache, 1333 MHz FSB)
● 16 GB Bellek
● 2 x 3Com 4200G 24-port Gigabit Ethernet Switch
● 1 x Voltaire 9240D 24-port Infiniband Switch
Testler yapılırken çekirdek sayısından fazla işleme
(oversubscribe durumuna) izin verilmemiştir. Tek çekirdeğe
birden fazla işlem verilmesi daha sonraki araştırmalar için
ayrılmıştır. Testlerde iki tür veri kullanılmıştır. Bunlardan
birincisi IBM Quest programı [12] tarafından oluşturulan
yoğun ve yapay bir veri tabanıdır. Testlerde kullanılan ikinci
veri tabanı gerçek satış bilgileri içeren seyrek bir veri
tabanıdır [13]. Veri tabanları hakkında karşılaştırmalı bilgiyi
aşağıdaki tabloda bulabilirsiniz. Resim 6: Quest veri tabanı üzerinde MPI
çalıştırmaları (4 işleme kadar)
Veri tabanı Nesne Hareket ASCII boyutu
sayısı (transaction)
sayısı
Quest 100 125155 180 MB
Retail 16470 88163 4 MB

Tablo 3: Performans incelemesi yapılan iki veri


tabanının özellikleri

İnceleyeceğimiz ilk test sonucu sık nesne kümelerinin


sayısı hakkında olacak.

Resim 7: Quest veri tabanı üzerinde MPI çalıştırmaları


(16 işleme kadar)

Resim 6 ve Resim 7'de görülen temel nokta yüksek destek


değerlerinde fazla işlem sayısının kullanılan zamanı
azalttığıdır. İlk resime bakılırsa %90'lık bir destek değerinde
Resim 5: Destek değeri ve sık nesne kümeleri sayısı tek işlemli uygulama 20 saniye sürmüş, bu süre 2,3 ve 4
arasındaki ilişki işlemlerde ise sırasıyla 11, 9, ve 7 saniye olmuştur. 4 işlemli
uygulamada neredeyse 3 kat bir zaman kazancı vardır.
Resim 5'te ilk olarak yoğun veri tabanının, sonra sağ Destek değerlerinin diğer ucuna, yani düşük değerlere
tarafında karşılaştırma yapılmasına olanak verecek şekilde bakıldığında 8, 12 ve 16 işlemli çalıştırmalarda çalışma
seyrek veri tabanının destek ve kapalı sık nesne kümeleri zamanının büyük miktarda arttığını ve tek işlemcili
sayıları arasındaki ilişki görülmektedir. Yoğun veri tabanının çalıştırmadan fazla çıktığını görmekteyiz. Uçlarda dört
kapalı sık nesne kümeleri sayısı destek değeri %90 ile %40 çekirdekli çift işlemci bulunduğundan dolayı 8 işlem sonrası
arasında çok büyük miktarda artmıştır, ve %40'lık seviyede için ikinci uç kullanıldı. Bu, iletişim maliyetinde artış
60 bine yaklaşmıştır. Unutulmamalıdır ki sık nesne kümeleri demektir. Resim 6 ve Resim 7 incelendiğinde işlem sayısı
sayısı bu sayıların çok üstündedir. Bunun nedeni sık nesne arttıkça hızlanmanın yavaşladığı da görülmektedir. En fazla
kümelerinin, kapalı sık nesne kümelerinin aynı desteğe sahip hızlanma tek işlemciden iki işlemciye çıkarıldığında
birçok alt kümesini de içinde bulundurmalarıdır. Dolayısıyla görülebilir. Bunun nedeni olarak yine iletişim maliyetleri
%40'lık bir minimum destek değerinde yoğun veri görülmektedir.
tabanlarında çok miktarda sık nesne kümeleri çıkmaktadır.
Seyrek veri tabanına baktığımızda kapalı sık nesne
kümeleri sayısının düşük olduğunu ve destek yüzdesinin
oldukça aşağıya inmesiyle bu sayının arttığını görüyoruz.
Veri tabanı özelliklerini hatırlarsak bu veri tabanında nesne
sayısı oldukça fazlaydı. Bundan dolayı sık nesne kümeleri
sayısı aynı destek değerlerinde yoğun veri tabanına göre
Çok işlemli uygulamaların destek değerinin azalması ile
birlikte geri kalmasını daha fazla işlemli testlerde de
görebiliriz. İlk incelediğimiz veri tabanı testlerine benzer
şekilde, daha fazla işlemli test grafiklerini yukarıdaki
grafikte görebilirsiniz. Resim 10'da görülen sonuç düşük
destek değerlerinde az işlem sayılı uygulamaların daha hızlı
sonuç verdiğidir.
Şimdiye kadar incelediğimiz tüm test sonuçlarında tek
işleme baksak bile aslında hep MPI kullanan bir uygulamayı
kullandık. Geliştirdiğimiz uygulamanın MPI kodundan
arınmış, tamamen seri kodlardan oluşan bir sürümünü
derleyici tanımları (ifdef'ler) kullanarak oluşturduk. Böylece
MPI'ın ilk kurulumu ve başlatılması ile ne kadarlık bir yük
bindiğini görebiliriz. MPI kullansa bile hiç iletişim
Resim 8: Retail veri tabanı üzerinde MPI yapmayan tek işlemli uygulamanın çok fazla geri kalmasını
çalıştırmaları (4 işleme kadar) beklemiyorduk, nitekim testlerde bizi destekleyici bir sonuç
çıktı.

Resim 9: Retail veri tabanı üzerinde MPI Resim 11: Seri ve MPI uygulamalarının
çalıştırmaları (detay) karşılaştırılması – Quest verisi üzerinde
Resim 8 ve Resim 9'da kullandığımız ikinci veri
tabanında yapılan çalışmaların grafikleri bulunmakta. İlk
incelediğimiz grafiklere benzer bir şekilde yüksek destek
değerleri için zaman kazancı birkaç kat olabiliyor. Destek
değerleri azaldıkça aradaki fark giderek kapanıyor ve bir
süre sonra tek işlemli uygulama öne geçiyor. Bu durumun
nedenine bir sonraki konumuz olan sonuçlarda tekrar
değineceğiz.

Resim 12: Seri ve MPI uygulamalarının


karşılaştırılması - Retail verisi üzerinde

7.Sonuçlar
Bir önceki bölümde bazı test grafikleri sunuldu. Hem
farklı verilerle test etme zorunluluğu ve bunların çeşitliliği
hem de farklı MPI uygulamaları ve bu uygulamaların içinde
farklı tekniklerle çözüm üretebilme esnekliği çok fazla
değişkenin incelenmesini gerektirmektedir.
MPI kütüphanesi olarak OpenMPI yerine mvapich ile
testler yapmak, arka plandaki farklı ağ bağlantılarını hız
yönünden test etmek (OpenMPI tarafından otomatik olarak
Resim 10: Retail veri tabanı üzerinde MPI çalıştırmaları en gelişmiş bağlantı kullanılmakta, burada Infiniband [14])
(16 işleme kadar) ve tabii ki oldukça farklı çeşitlerde gelebilen verilerle testler
yapmak gelecekteki araştırma konuları olabilir.
Bazı temel teoriler bize olacakları tahmin etmemizde 9.Kaynakça
yardımcı oluyor. Örneğin Amdahl Yasasına göre
paralelleştirilemeyen parçalardan dolayı işlem sayısına [1] R. Agrawal, T. Imielinski ve A. Swami. Mining
lineer bir hızlanma beklenmez. Yapılan testlerde işlemci association rules between sets of items in large
sayısı arttıkça zamanda belirli bir oranda düşüş databases. Proc. 1993 ACM-SIGMOD Int. Conf.
görülmektedir. Management of Data, sayfa 207-216, 1993.
Son olarak tahminlerimizde biraz şaşırmamıza neden [2] R. Agrawal ve J. Shafer. Parallel mining of association
olan bir düşünceye burada yer vermek faydalı olacaktır. rules: Design, implementation, and experience. IEEE
MPI uygulamalarında en iyi çözülen problemler çok Trans. Knowledge and Data Engineering, sayfa 962-
hesaplama gücü ama az iletişim gerektiren problemler 969, 1996.
olarak gösterilmektedir. Bunun nedeni hesaplama gücünün [3] M. Zaki and C. Hsiao. CHARM: An efficient algorithm
dağıtılması ile sağlanan fayda ve iletişim nedeniyle olan for closed itemset mining. SDM'02, 2002.
zarardır. Ancak çoğu problemin çözümü için gereken ara [4] J. Wang, J. Han ve J. Pei. CLOSET+: searching for the
sonuçlar hesaplama miktarı ile doğru orantılı olarak best strategies for mining frequent closed itemsets.
artmaktadırlar. Bunun bir nedeni hesaplamayı arttırmanın Proceedings of the ninth ACM SIGKDD international
paralelleştirmeye uygun en iyi yolunun işlenecek veri conference, 2003.
miktarının arttırılması olmasıdır. CLOSET+ ve başka birçok [5] J. Han, H. Pei ve Y. Yin. Mining frequent patterns
veri madenciliği algoritmasında durum aynıdır. Dolayısıyla without candidate generation. SIGMOD'00, 2000.
araştırmacı veri ve hesaplama büyüdükçe paralel kazancın [6] N. Pasquier, Y. Bastide, R. Taouil, ve L. Lakhal.
artmasını bekler ama bu çoğunlukla tam olarak bu şekilde Discovering frequent closed itemsets for association
gelişmez. Veri ve hesaplama büyüdükçe uçların birbirine rules. ICDT'99, 1999.
iletmesi gereken ara sonuç miktarları da artar. Burada bir [7] J. Pei, J. Han, ve R. Mao. CLOSET: An efficient
değiş tokuş vardır. Optimum bir paralel işlem sayısında algorithm for mining frequent closed itemsets.
paralel hesaplama ile elde edilen kazanç ara çözümlerin DMKD'00, Mayıs 2000.
iletişim gereklerinden dolayı oluşan kayıplardan çok daha [8] W. Tansey ve E. Tilevich. Efficient Automated
fazla olacaktır. Bu en uygun işlem sayısı, çalışılan alana ve Marshaling of C++ Data Structures for MPI
veriye bağlı olarak değişiklik gösterecektir. Applications, In Proceedings of the 22nd Annual IEEE
International Parallel and Distributed Processing
8.Teşekkürler Symposium (IPDPS 2008).
[9] Boost kütüphaneleri anasayfası için:
Uygulamanın geliştirilmesinde kullanılan altyapı, http://www.boost.org/
eğitimler ve çeşitli destekleri için TÜBİTAK'a ve ODTÜ [10] OpenMP anasayfası için. http://openmp.org/
Bilgisayar Mühendisliği bölümüne teşekkürlerimizi sunarız. [11] Daha fazla bilgi için http://hpc.ceng.metu.edu.tr/
Bu araştırmanın bir bölümü TÜBİTAK BİDEB 2210 [12] IBM Quest programını indirmek için:
Yüksek Lisans Burs Programı ile desteklenmiştir. http://www.almaden.ibm.com/cs/projects/iis/hdb/Project
Grafikler için dia ve gnuplot kullanılmış, makale s/data_mining/datasets/syndata.html
OpenOffice.org Kelime İşlemcisinde yazılmıştır. [13] Retail veri tabanı http://fimi.cs.helsinki.fi/data/
adresinden indirildi, asıl isim: retail.dat. Veri hakkında
daha detaylı analiz için: Brijs T., Swinnen G., Vanhoof
K., ve Wets G. (1999), “The use of association rules for
product assortment decisions: a case study”,
Proceedings of the Fifth International Conference on
Knowledge Discovery and Data Mining, sayfalar: 254-
260.
[14] OpenMPI arka plan bağlantı ayarları için bkz.
http://www.open-mpi.org/faq/?category=tcp#tcp-auto-
disable
[15] O. R. Zaiane, M. El-Hajj ve P. Lu. Fast Parallel
Association Rule Mining without Candidacy
Generation, Proceedings of the 2001 IEEE ICDM.

You might also like