SON DAKİKA

Nvdia

“RAPIDS 24.12: cuDF PyPI Üzerinde, CUDA Birleşik Bellek ile Polars ve Daha Hızlı GNN’ler”

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.

Two charts comparing the speedup ratio for Polars GPU versus Polars CPU engines across the 22 queries from the PDS-H benchmark. In the RAPIDS 24.12 release, the Polars GPU engine can now efficiently process workloads that fit in combined GPU+CPU memory but would previously cause GPU out-of-memory errors.
Şekil 1. RAPIDS 24.12’de, Polars GPU motoru, GPU bellek dışı hataları vermeden veri işleyebiliyor.

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.

Chart comparing the throughput (MB/s) of reading a subset of the Red-Pajama v2 dataset from an S3 bucket to a 4-GPU g5.12xlarge EC2 instance with the new KvikIO-based multi-threaded object read functionality. On this dataset, throughput increases significantly up to 128 threads.
Şekil 2. KvikIO tabanlı çok iş parçacıklı nesne okuma yeteneği, Dask cuDF ve cuDF’deki S3 okuma işlemlerinin performansını artırır.

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.

Degree distribution of a power-law graph, where the x-axis is the degree value, and the y-axis is the number of vertices with the given degree. Power-law graphs have a skewed degree distribution. Most vertices have very few neighbors, but a few key vertices have many neighbors and appear frequently in the edge list.
Şekil 3. Güç yasası grafiği dağılımı, çoğu düğümün çok az komşuya sahip olduğu ve bazı düğümlerin ise çok sayıda komşuya sahip olduğu bir yapıyı gösterir.

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.

Chart comparing the average time per epoch to train a 3-layer GraphSAGE model with batch size 1,024 on different systems using the distributed (old) and hierarchy-based (new) gather operation. Across the system configurations, the hierarchy-based gather improves end-to-end performance by 29-41%.
Şekil 4. Yeni ve eski toplayıcı işlemleri ile elde edilen ortalama zaman karşılaştırması, %30-40 oranında hız artışı sağlıyor.

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.

Kaynak

Nvdia Blog

Düşüncenizi Paylaşın

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

İlgili Teknoloji Haberleri