SON DAKİKA

Nvdia

Pandas ile Duplikasyonları Hızlandırma: RAPIDS cuDF Kullanımı

Veri analitiğinde sıkça karşılaşılan bir işlem, tekrar eden satırları kaldırmaktır. Bu işlem, özellikle Veri Çıkarma, Dönüştürme ve Yükleme (ETL) süreçlerinde kritik öneme sahiptir. Çünkü en son kayıtları incelemek, bir anahtarın ilk kez göründüğü zamanı bulmak veya verilerin içindeki tüm tekrarları tamamen kaldırmak isteyebilirsiniz. Hangi satırların saklanacağı ve satır sıralaması, sonraki işleme aşamalarını etkilemektedir.

RAPIDS, veri bilimi ekosistemi için optimize edilmiş GPU hızlandırıcılı açık kaynak kütüphaneler sunmaktadır. RAPIDS cuDF, pandas uygulamalarında, herhangi bir kod değişikliği olmadan NVIDIA GPU’lar üzerinde süper hızlı DataFrame analitiği için optimize edilmiş algoritmalar sağlar.

Bu yazıda, cuDF’deki hızlı ve doğru tekrarları kaldırma algoritmalarını ve veri yapılarını inceleyeceğiz. cuDF’nin, pandas’da popüler olan DataFrame.drop_duplicates yöntemini nasıl uyguladığını göstereceğiz. Herhangi bir uygulama kodu değişikliği olmadan %100 hızlı sonuçlar elde edeceğiz.

pandas’ta drop_duplicates ile Tanışma

Pandas’ta drop_duplicates işlevinin en önemli yönü, keep seçeneğidir; bu seçenek hangi tekrarların korunacağını belirler. Aşağıdaki seçenekler, pandas drop_duplicates belgeleri‘nde tanımlanmaktadır:

  • "first": İlk örneği hariç tüm tekrarları kaldırır
  • "last": Son örneği hariç tüm tekrarları kaldırır
  • False: Tüm tekrarları kaldırır

Aşağıdaki kod parçası, farklı seçenekleri gösterir:

import pandas as pd
df = pd.DataFrame({"key": [0, 0, 0, 1, 1, 2, 2], "values": [1, 2, 3, 4, 5, 6, 7]})
df.drop_duplicates(subset=["key"], keep="first")
df.drop_duplicates(subset=["key"], keep="last")
df.drop_duplicates(subset=["key"], keep=False)

Stabil Sıralama

Stabil sıralama, drop_duplicates yöntemi için bir diğer kritik noktadır; bu durum, çıktı satırlarının girişten gelen orijinal sırasını koruması anlamına gelir. Stabil sıralama sağlanamadığında, algoritma arzulanan tekrarları (ilk, son ya da hiç) herhangi bir sırayla döndürebilir. Tekil algoritmalar için stabil sıralama sağlamak oldukça basit olabilir. Ancak, GPU üzerinde çalışan algoritmalarda bu durum her zaman geçerli olmayabilir. Stabil sıralama gereksinimlerini sonraki bölümlerde daha detaylı inceleyeceğiz.

CUDA C++ ile drop_duplicates Çözümü

cuDF, pandas API’leri, DataFrame oluşturucuları gibi tüm yöntemleri çağırdığında, libcudf CUDA C++ kütüphanesini kullanarak GPU üzerinde işlemleri gerçekleştirmektedir. cudf.pandas arayüzü, panda API’sının tamamını destekleyerek, mevcut pandas kodlarını değiştirmeksizin hızlandırmaktadır. Eğer GPU üzerinde işlem yapma başarısız olursa CPU panda işlemlerine dönüşüm sağlar.

Bu özelliği sağlamak için hür CUDA C++ kodlarının libcudf’te pandas’daki tüm seçenekleri desteklemesi gerekmektedir. Bunun yaninda, tekrarları kaldırma sorununu çözmek için, C++ Standart Kütüphanesi ve benzer algoritmik primitif kütüphanelerden yardım alacağız. Örneğin, CCCL de bu konudaki ilham kaynaklarımız arasındadır.

İki temel C++ algoritması ile veri tekrarı ile başa çıkma yöntemine bakalım:

std::unique ve std::unordered_set

std::unique: Sıralı bir aralıktaki art arda gelen tekrarlayan elemanları kaldırır. Ancak tüm tekrarları kaldırmak için aralığın sıralanmış olması gerekir ve alternatif indeksleri takip etmeniz gerekir. Bu belirli bir karmaşıklık yaratır.

Aşağıdaki kod, std::unique‘ün nasıl kullanılacağını gösterir:

#include 
#include 
#include 

int main() {
  std::vector vec = {1, 2, 2, 3, 4, 4, 2, 2};
  auto it = std::unique(vec.begin(), vec.end());
  vec.erase(it, vec.end());
  for (int n : vec) {
    std::cout 

std::unordered_set: Tekrarları kaldırmak için bir hash tabanı yapısı kullanarak doğrudan bir yol sunar, ancak yapıların sırasını sağlamaz.

Aşağıdaki kod std::unordered_set kullanımını göstermektedir:

#include 
#include 
#include 

int main() {
  std::vector vec = {1, 2, 2, 3, 4, 4, 2, 2};
  std::unordered_set s(vec.begin(), vec.end());
  for (int n : s) {
    std::cout 

C++ STL, veri tekrarlarını kaldırmak için iki yöntem sunsa da, ne yazık ki bu yöntemler pandas’ın işleyişine uyum sağlamaz. std::unique sadece komşu tekrarlayan elemanları kaldırdığından, her tekrarı kaldırmak için sıralama yapmak ve ardından giriş sırasına göre tekrar sıralama yapmak gerekecektir.

distinct Algoritmasını Tanıtalım

Hedefimizi gerçekleştirmenin uygun bir yolu bulamamak nedeniyle cudf::distinct adını verdiğimiz bir algoritma geliştiriyoruz. cudf::stable_distinct ise sıralama düzenini korumak için kullanılır. Bu, cudf::unique‘dan daha farklıdır, çünkü o yalnızca komşu tekrarları dikkate alır. Bu nedenle kullandığımız isimler, işlevin teşkil ettiği işleyişi açıkça yansıtmaktadır.

distinct için Hash Tabanlı Çözüm

CUDA C++ algoritmalarında hash tabanlı yaklaşımlar kullanmak, yüksek performans sağlayan eşzamanlı veri yapılarını kullanmamıza olanak tanır. Burada cuCollections kütüphanesini kullanarak işlemlerimizi gerçekleştirmekteyiz. cudf::distinct algoritmaları, tekrar eden değerlerin ilk ya da son hangi değer olduğunu ve giriş sırasını takip etmek zorundadır.

Özetle, geliştirilen algoritma, giriş değerleri ile eşleşen elemanları içeren bir harita sunar. İki anahtar durumunu ele alarak keep seçeneklerini destekler. keep="any" önemli olan göre, bu seçim uygulamada en iyi performansı getirir.

Sonuç ve Performans Değerlendirmesi

Genel olarak, distinct algoritmalarında iyi bir veri akışı gözlemlenmektedir. Bu performans avantajlarının yanına keep seçeneklerini dikkate almak, uygulamanızı hızlandıracaktır. cuDF, hem yüksek veri boyutları hem de verimlilik açısından mükemmel bir analistik fırsatlar sunmaktadır. API’lerimizle ilgili daha fazla bilgi için cuDF belgelerini ziyaret edebilirsiniz.

Grafiksel analiz üzerinden performans durumlarını değerlendirirken, farklı veri büyüklüklerini ve *kardinalite* durumlarını göz önünde bulundurarak çeşitli *performans bilançoları* elde edilebilir. Örneğin, KEEP_ANY ve KEEP_FIRST seçeneklerinin, verinin büyüklüğü ve yalnızca bazı faktörlere bağlı olarak çıkış oranları arasında farklılıklar olabilmektedir.

Başarılı sonuçlar elde etmek için, raporlarımızı yönetmeye ve analitik süreçlerinizi hızlandırmaya her zaman açık olmalısınız.

Kaynak

Nvdia Blog

Düşüncenizi Paylaşın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgili Teknoloji Haberleri