İş yükleri arttıkça ve hızlı veri işleme talebi büyüdükçe, GPU hızlandırmalı veritabanları ve sorgu motorlarının CPU tabanlı sistemlere göre önemli fiyat-performans kazanımları sağladığı gösterilmiştir. GPU’ların yüksek bellek bant genişliği ve iş parçacığı sayısı, çoklu birleştirmeler, karmaşık toplamalar, string işleme gibi hesaplama yoğun yükleri özellikle avantajlı hale getirir. GPU düğümlerinin artan erişilebilirliği ve GPU algoritmalarının geniş özellik kapsamı, GPU veri işlemeyi her zamankinden daha erişilebilir kılmaktadır.
Süreçteki performans darboğazlarını ele alarak, hem veri hem de iş analistleri artık büyük veri kümesi sorgulayabilir, gerçek zamanlı içgörüler üretebilir ve analiz senaryolarını keşfedebilir.
Bu artan talebi desteklemek amacıyla, IBM ve NVIDIA, NVIDIA cuDF‘yi Velox yürütme motoruna entegre ediyor. Bu iş birliği, GPU yerel sorgu yürütmesi yapmayı sağlayarak, yaygın kullanılan platformlar olan Presto ve Apache Spark için yeni bir kapı açmaktadır. Bu açık bir projedir.
Velox ve cuDF’nin Sorgu Planlarını Nasıl Çevirip Yürüttüğü
Velox, sorgu planlarını Presto ve Spark gibi sistemlerden alarak, cuDF tarafından desteklenen yürütülebilir GPU hatları haline çeviren bir ara katman görevi görmektedir. Daha fazla bilgi için Velox’u cuDF ile Genişletmek makalesine göz atabilirsiniz.
Bu yazıda, GPU arka ucunu kullanan Presto ve Spark için ilk performans sonuçlarını paylaşmaktan mutluluk duyuyoruz. İnceleyeceğimiz başlıca konular şunlardır:
- Presto için uçtan uca hızlandırma
- Presto’yu çoklu GPU çalıştırmaya ölçeklendirme
- Apache Spark’ta hibrit CPU-GPU yürütme gösterimi

Presto Sorgu Planını GPU’ya Taşımak
Sorgu işlemenin ilk aşaması, gelen SQL komutlarını sorgu planlarına çevirerek her küme düğümü için görevler oluşturmaktır. Her bir işçi düğümde, Velox’taki cuDF arka ucu, Presto koordinatöründen gelen bir planı alarak, GPU operatörleriyle planı yeniden yazar ve ardından yürütür.
Presto planlarının Velox ile cuDF kullanılarak çalıştırılabilmesi için Tablo Tarama, HashJoin, HashAggregation, FilterProject ve daha fazlası gibi GPU operatörlerinde geliştirmelere ihtiyaç duyulmuştur.
- Tablo Tarama: Velox Tablo Tarama, cuDF içindeki GPU G/Ç, sıkıştırma ve kod çözme bileşenleri ile uyumlu olacak şekilde uzatılmıştır.
- HashJoin: Mevcut birleştirme türleri, soldan, sağdan ve iç birleştirmeleri içerecek şekilde genişletilmiştir; ayrıca filtreler ve boş sayılama desteklenmiştir.
- HashAggregations: Kısmi ve nihai toplamaları yönetmek için bir akış arayüzü tanıtılmıştır.
Genel olarak, cuDF arka ucundaki operatör genişletmesi, Presto’da uçtan uca GPU yürütmesini mümkün kılarak, Presto SQL ayrıştırıcı, optimize edici ve koordinatöründen dolu olarak yararlanmayı sağlar.
Multi-GPU Presto ile Daha Hızlı Veri Değişimi
Dağıtık sorgu yürütmesinde, Değişim kritik bir operatördür ve işçiler arasında veri hareketini kontrol eder. GPU hızlandırmalı Presto, tüm yürütme hattının GPU üzerinde çalışmasına olanak tanıyan, UCX tabanlı bir Değişim operatörü kullanmaktadır. UCX, çoklu düğüm bağlantıları için yüksek bant genişliği NVLink’i ve internod bağlantıları için RoCE veya InfiniBand’ı kullanır.
Velox, farklı veri hareketleri için birkaç Değişim türünü desteklemektedir: Partisyonlu, Birleştirme ve Yayma. Partisyonlu Değişim, girdi verilerini bir hash fonksiyonu ile bölerek diğer işçilere gönderir. Birleştirme Değişimi, diğer işçilerden gelen birden fazla girdi parçasını alarak tek, sıralanmış bir çıktı parçası üretir. Yayma Değişimi, verileri bir işçi üzerinde yükler ve ardından verileri tüm diğer işçilere kopyalar. GPU değişiminin cuDF backendi ile entegrasyonu şu anda devam etmektedir.
Şekil 3’te, Presto, yeni UCX tabanlı değişim ile GPU’da etkili bir performans elde etmekte; özellikle yüksek bant genişliği ile düzenlenmiş içnod bağlantıları olduğunda bu performans artmaktadır.
Apache Spark’ta Hibrit CPU-GPU Yürütme
Presto’nun entegrasyonu tam GPU yürütmesine odaklanırken, Apache Spark’ın Apache Gluten ve cuDF ile entegrasyonu, belirli sorgu aşamalarının yükünü GPU’ya aktarmaya odaklanmaktadır. Bu yaklaşım, CPU ve GPU düğümleri içeren hibrit kümelerde GPU kaynaklarını etkili bir şekilde kullanmayı sağlar.
Örneğin, TPC-DS Sorgusu 95 SF100’ün ikinci aşaması, yoğun bir hesaplama gerektirdiği için CPU tabanlı kümeleri yavaşlatabilir. Bu aşamanın GPU’ya aktarılması önemli performans kazançları sağlamaktadır. CPU kapasitesi, diğer sorgular veya iş yükleri için kümede kalmaya devam eder.
Şekil 4’te, TableScan’ın ilk aşaması CPU yürütmesi ile çalışsa bile, CPU ve GPU arasındaki etkili işbirliği, ikinci aşama GPU’ya aktarıldığında toplam çalışma süresinin azalmasını sağlamaktadır.
GPU Destekli Büyük Ölçekli Veri Analitiğine Katılın
GPU hızlandırmanın Velox’taki paylaşılan yürütme motorunda sağladığı performans iyileştirmeleri, veri işleme ekosistemindeki birçok sistemin hızlanmasını sağlamaktadır. Ekip, birçok şirketten katılımcılarla birlikte, Velox’ta yeniden kullanılabilir GPU operatörlerini uygulamak için çalışmaktadır; bu durum Presto, Spark (Gluten aracılığıyla) ve diğer sistemlerin hızlanmasına yardımcı olur.
Açık kaynak çalışmalarımızı toplulukla paylaştığımız için heyecanlıyız ve geri bildirimlerinizi duymak istiyoruz. Sizi davet ediyoruz:
- Velox GPU arka ucu ile Presto’yu benchmark yapmayı deneyin
- Yeni operatörler geliştirin veya test için yükler ekleyin
- Velox, cuDF ve Presto hakkında tartışmalara katılın
- GitHub reposlarını inceleyin:
Teşekkürler
Bu çalışmaya katkıda bulunan birçok geliştirici bulunmaktadır. IBM katkıcıları: Zoltán Arnold Nagy, Deepak Majeti, Daniel Bauer, Chengcheng Jin, Luis Garcés-Erice, Sean Rooney ve Ali LeClerc. NVIDIA katkıcıları: Greg Kimball, Karthikeyan Natarajan, Devavret Makkar, Shruti Shivakumar ve Todd Mostak.