RAPIDS 24.12, cuDF paketlerini PyPI’ye ekliyor, groupby toplama işlemlerini ve AWS S3’ten dosya okumayı hızlandırıyor. Bu güncelleme, Polars GPU motorunda GPU belleğinden daha büyük sorgular yapılmasını sağlıyor ve gerçek dünya grafiklerinde grafik sinir ağı (GNN) eğitimini hızlandırıyor.
cuDF ve RMM CUDA 12 paketleri artık PyPI’de mevcut
RAPIDS 24.12 sürümüyle birlikte, rmm
, cudf
, dask-cudf
ve bu kütüphanelerin tüm bağımlılıklarının CUDA 12 yapıları şimdi PyPI’de mevcut. Artık bu kütüphanelerin yüklenmesi için –extra-index-url
gibi ek ayar yapmaya gerek kalmadı. Denemek isterseniz:
pip install
'cudf-cu12==24.12.*'
'dask-cudf-cu12==24.12.*'
'rmm-cu12==24.12.*'
Ayrıca Polars kullanıcılarının ek bir indeks belirtmesine gerek kalmadan GPU desteğini elde etmesi sağlandı: pip install polars[gpu]
yazmanız yeterli. Bu, RAPIDS kitaplıklarını pypi.org üzerinden erişilebilir hale getirmek için atılan ilk adım. Daha fazlası için takipte kalın.
Polars GPU motoru: Genişletilmiş büyük veri boyutları desteği
Polars ile birlikte, Polars GPU motorunu cuDF tabanlı Beta sürümünde Eylül 2024’te tanıttık. Ancak, Polars GPU motoru ile veri setleri büyüdükçe bellek taşması (OOM) hataları ile karşılaşılabiliyordu. 24.12 sürümü bu sorunları çözecek iki özellik sunuyor: chunked IO ve CUDA Unified Memory.
Chunked IO
Öncelikle, cudf-polars
artık parquet dosyalarını parçalar halinde (varsayılan olarak 8 GiB) işlemeyi destekliyor ve yüksek dekompresyon ve kodlama verimliliği sağlıyor. Sıkıştırılmış dosyaların bellekte genişletilmesi gerektiği için, bazı iş yüklerinin IO sırasında bellek dışı kalma riskine neden olabiliyor. Bu, özellikle ZSTD sıkıştırmasında önemli bir durum, çünkü gerçek bellek kullanımı genelde dosya boyutunun 3 katı olabiliyor. Chunked IO, bu ani bellek baskısını azaltarak daha fazla iş yükünün başarılı olmasını sağlıyor.
CUDA Unified Memory
İkincisi, bu sürüm, cudf-polars
içindeki yönetilen hafıza havuzunu varsayılan olarak prefetching ile etkinleştiriyor. Daha fazla bilgi için buraya göz atabilirsiniz. Unified Memory, DataFrame’lerin GPU ve ana bellek arasında genişlemesini sağlayarak, verilerin GPU ara bağlantısı üzerinden (PCIe veya C2C) etkin bir şekilde taşınmasına olanak tanıyor. Bu sayede Polars GPU motoru, çok daha büyük veri setlerini belleksiz kalmadan işleyebiliyor.
PDS-H benchmark analizleri
PDS-H benchmark sorgularının önceki sürümünde, Polars GPU motoru ile yapılan sorgular 80 GB veya 100 GB’den fazla veri boyutlarında GPU bellek taşması hataları veriyordu. Bu geliştirmeler ile birlikte, Polars GPU motoru, GPU ve CPU belleklerinin birleşiminin içine sığabilen iş yüklerini etkin bir şekilde işleyebilir hale geldi.
Şekil 1, RAPIDS 24.10 ve 24.12 kullanarak PDS-H benchmark’taki 22 sorgu için Polars GPU ile Polars CPU motoru arasındaki hızlanma oranını karşılaştırıyor. Daha önce bellek taşması nedeniyle başarısız olan sorgular şimdi başarıyla çalışıyor ve güncellenen motor 250 GB’a kadar olan veri boyutlarında bile CPU tabanlı altyapıya kıyasla büyük hız artışları sağlayabiliyor.
cuDF Performans İyileştirmeleri
RAPIDS 24.12, büyük ölçekli veri işleme iş akışlarını iyileştirmek için tasarlanmış iki performans optimizasyonu içeriyor.
Daha Hızlı Düşük Kardinalite groupby
İşlemleri
Bu sürüm, cuDF’deki hash tabanlı groupby toplama işlemleri için yeni bir optimizasyon sunuyor. Daha önce düşük kardinalite (az sayıda grup) ile gerçekleştirilen groupby işlemleri, daha düşük verimliliğe neden oluyordu. Bu sıkıntı, grupların sayısı 100’ün altına düştüğünde meydana geliyor ve üstesinden gelinmesi zor bir darboğaza yol açıyordu. Şimdi bu sorun, GPU paylaşımlı belleğini kullanarak kısmi toplamları takip ederek aşılabiliyor.
import cudf, cupy, rmm
import time
rmm.mr.set_current_device_resource(rmm.mr.CudaAsyncMemoryResource())
df = cudf.DataFrame({
'key': cupy.ones(100_000_000),
'payload': cupy.random.rand(100_000_000),
})
for _ in range(3):
t0 = time.time()
g = df.groupby('key').agg({'payload': 'sum'}).reset_index()
t1 = time.time()
print(f'cudf {cudf.__version__}: {t1-t0:0.3f} seconds')
cudf 24.10.01: 0.177 seconds
cudf 24.12.01: 0.012 seconds
pandas 2.2.3: 1.463 seconds
NVIDIA H100 GPU ve Intel Xeon Platinum 8480CL CPU bulunan bir sistemde, bu kullanım senaryosunda cuDF 24.10 ile 24.12 arasında 15 kat hız artışı sağlanıyor. Bu optimizasyon, büyük iş yüklerine sahip Spark ve Dask kullanıcıları için oldukça faydalı olacaktır.
AWS S3’ten Hızlı IO
cuDF 24.12, uzaktan depolama için çoklu iş parçacığı kullanarak S3 nesne okumalarını hızlandıran yeni, isteğe bağlı bir özellik sunuyor. Bu yeni işlevsellik, S3 nesneleri ile okuma işlemlerini yönetmek için KvikIO içerisinde libcurl kullanımına dayanmaktadır ve Dask cuDF’deki S3 okumalarının genel performansını ve ölçeklenebilirliğini önemli ölçüde iyileştirebilir. Bu özellik CUDF_KVIKIO_REMOTE_IO ortam değişkeni ile etkinleştirilebilir ve KVIKIO_NTHREADS ile kontrol edilebilir.
Şekil 2, KvikIO kullanılarak bir S3 kovasından Red-Pajama v2 veri kümesinin bir alt kümesinin 4-GPU g5.12xlarge EC2 instance’ına aktarımındaki throughput (MB/s) değerlerini göstermektedir. Bu isteğe bağlı özellikyle, throughput 963 MiB/s’e çıkarken, KvikIO kullanılmadığında bu değer 450 MiB/s idi.
GNN Eğitimi için Daha Hızlı Sorgular
Bu sürüm ayrıca, WholeGraph üzerinde yapılan iletişim optimizasyonları ile önemli performans iyileştirmeleri sağlıyor. Power-law grafikleri bu şekilde daha iyi işlenebiliyor. Bu tür grafikler, çoğu düğümün çok az komşuya sahip olduğu ve bazı düğümlerin ise fazla sayıda komşuya sahip olduğu bir dağılıma sahiptir.
Bir power-law grafi örneğinde, örneğin ogbn-papers100M veri kümesinde, yüksek dereceli düğümlerin bir grup içinde birden fazla kez yer alması mümkündür. Bu durumda, tekrarlanan düğümlerin özellik tensörlerini bir defa okumak, özellik alma aşamasında önemli zaman kazancı sağlar. Buna hierarchy-based gather operasyonu denir. Bu yeni optimizasyon ile, dağıtılmış toplayıcı işlemine göre 2 kat daha hızlı sonuçlar elde edilebiliyor. Bu da 1.024’lik bir grup boyutu ile üç katmanlı GraphSAGE modelinin sonuca ulaştırılmasında %30-40 oranında hız artışı sağlamaktadır.
Sistem(ler): NVIDIA DGX H100
Sonuç
RAPIDS 24.12 sürümü, hem DataFrame analitiği hem de GNN eğitimi için önemli kullanıcı deneyimi geliştirmeleri ve performans optimizasyonları sunuyor. Polars GPU motoru Açık Beta aşamasındadır ve çoklu iş parçacığı destekli AWS S3 dosya okumaları deneysel bir özellik olarak sunulmaktadır. Geri bildiriminizi GitHub üzerinden bize iletebilirsiniz. Ayrıca, GPU hızlandırmalı veri işleme üzerine konuşmak için RAPIDS Slack topluluğuna katılabilirsiniz.
Eğer RAPIDS hakkında daha fazla bilgi almak istiyorsanız, başlamanız için kaynakları gözden geçirmenizi öneririz.