Okuma 19.4 dkKategoriler: VERİ BİLİMİ, Openzeka

Bu eğitimde, bir DGX Spark üzerinde veri bilimi ve makine öğrenmesi iş akışlarını GPU ile hızlandıracağız.

Spark, monitör ve klavye bağlanarak doğrudan bir bilgisayar olarak kullanılabileceği gibi, başka bir bilgisayardan uzaktan bağlanılan bir sunucu olarak da kullanılabilir. Biz bu eğitimde Spark’a uzaktan bağlanacağız ve gerekli yazılımları kurup çalıştıracağız.

Veri işleme kütüphanesi olarak pandas, makine öğrenmesi kütüphanesi olarak ise scikit-learn kullanacağız. Bu iki kütüphane, veri bilimi ve makine öğrenmesi ekosisteminin temel taşlarındandır.

Bu eğitimde, pandas ve scikit-learn iş akışlarını CUDA-X teknolojilerinden yararlanarak GPU üzerinde hızlandıracağız.

CUDA-X, NVIDIA’nın GPU hızlandırma kütüphaneleri koleksiyonunun genel adıdır. Bu koleksiyon içerisinde veri bilimi kütüphanelerini barındıran set ise RAPIDS olarak adlandırılır.

Bu eğitimde RAPIDS kütüphanelerinden:

  • cuDF kütüphanesini pandas iş akışlarını hızlandırmak için,
  • cuML kütüphanesini ise scikit-learn iş akışlarını hızlandırmak için kullanacağız.

Bu eğitim üç bölümden oluşmaktadır:

  1. Kurulum:
    Miniconda kurulumu, conda ortamlarının oluşturulması ve playbook repository’sinin indirilmesi.
  2. Notebook’ların Çalıştırılması:
    İki notebook’un hem CPU hem de GPU ortamında çalıştırılması.
  3. Karşılaştırma:
    CPU ve GPU performanslarının hücre hücre karşılaştırılması.

Kurulum

Spark’a Bağlanma

Spark’a ilk kez uzaktan bağlanıyorsanız IP adresini bulmanız gerekir. Spark’a bir monitör ve klavye bağlayıp giriş yapın ve terminalden şu komutu çalıştırın:

Copy to Clipboard

 

Komut, Spark’ın varsayılan ağ arayüzünün IP adresini verir:

Copy to Clipboard

 

Bu adresi not edin; eğitim boyunca “spark-ip” yerine bu adresi kullanacaksınız. Alternatif olarak, NVIDIA Sync uygulamasını kontrol ederek de IP adresini bulabilirsiniz.

Bilgisayarınızın Spark’la aynı ağa bağlı olduğundan emin olun. Ardından, bilgisayarınızdan bir terminal açın ve Spark’a SSH ile bağlanın:

Copy to Clipboard

 

İlk bağlantıda bir fingerprint uyarısı göreceksiniz. yes yazıp Enter’a basın. Ardından parola sorulduğunda Spark’ın parolasını girin:

Copy to Clipboard

 

Bağlandığınızda Spark, bu terminalden gönderdiğiniz komutları kabul etmeye başlayacak. Eğitim boyunca karşınıza çıkan tüm komutları bilgisayarınızın bu terminaline gireceksiniz.

Miniconda Kurulumu

Conda, Python paketlerini ve ortamlarını yöneten bir paket yöneticisidir. Spark’ta conda yüklü değilse, Miniconda’yı kurmanız gerekir. Aşağıdaki komutları çalıştırın:

Copy to Clipboard
Copy to Clipboard

 

Kurulumu doğrulayın:

Copy to Clipboard

 

conda’yı PATH’e ekleyin:

Copy to Clipboard

Conda Ortamlarını Oluşturma

Bu eğitimde, Spark üzerinde iki ayrı conda ortamı kullanacağız. İlki, standart veri bilimi paketlerini içeren ortamdır ; halihazırda kullanıyor olabileceğiniz tipik kurulumu yansıtır. Buna CPU ortamı diyelim. İkincisi ise RAPIDS kütüphanelerini içeren ortamdır. Buna da GPU ortamı diyelim.

CPU ortamını oluşturun (standart veri bilimi paketleri, RAPIDS yok):

Copy to Clipboard

 

GPU ortamını oluşturun (RAPIDS kütüphaneleri dahil):

Copy to Clipboard

 

Bu komut, rapidsai kanalından RAPIDS 26.06 paketini, nvidia kanalından CUDA 13.0 çalışma zamanlarını ve conda-forge kanalından diğer paketleri yükler.

Kurulum bittikten sonra, paket sürümlerini doğrulayın:

Copy to Clipboard
Copy to Clipboard

Playbook Repository’sini İndirme

NVIDIA, DGX Spark için hazırladığı playbook’ları resmî web sitesinde ve GitHub reposunda paylaşıyor. Buradaki CUDA-X Data Science playbook’u, bu eğitim boyunca kullanacağımız iki notebook’u içerir.

Copy to Clipboard

 

Notebook’ların bulunduğu dizine bakalım:

Copy to Clipboard
Copy to Clipboard

 

İki notebook mevcut:

  • cudf_pandas_demo.ipynb — pandas iş akışlarını cuDF ile hızlandırır
  • cuml_sklearn_demo.ipynb — scikit-learn iş akışlarını cuML ile hızlandırır

Kaggle API Anahtarı

İlk notebook, Kaggle üzerinden 4.76 GB’lık bir veri seti indirir. Bunun için bir Kaggle API anahtarına (kaggle.json) ihtiyacınız var. Kaggle hesabınız yoksa kaggle.com’a kaydolun ve bir API anahtarı oluşturun.

kaggle.json dosyasını kendi bilgisayarınızdan Spark’a kopyalayın. Bunun için kendi bilgisayarınızda ayrı bir terminal açın ve şu komutu çalıştırın:

Copy to Clipboard

 

Ardından SSH terminalinize dönün ve dosyanın izinlerini ayarlayın:

Copy to Clipboard

CPU Kopyalarını Hazırlama

Karşılaştırma yapabilmek için, her notebook’un bir CPU kopyasını oluşturacağız. Bu kopyalarda tek fark, hızlandırma komutlarının yorum satırı yapılmış olmasıdır. Geriye kalan tüm kod aynı kalır.

Copy to Clipboard

 

Şimdi her kopyadaki %load_ext satırını yorum satırı yapın:

Copy to Clipboard

cuDF ve cuML Nedir?

Bu bölümde, uygulamaya başlamadan önce, eğitimde kullanacağımız cuDF ve cuML’i açıklayacağız.

cuDF ; pandas Hızlandırması

cuDF, cudf.pandas adında bir “pandas hızlandırma modu” sunar. Bu mod, Jupyter notebook’a tek bir hızlandırma komutu eklenerek etkinleştirilir:

Copy to Clipboard

 

Bu komut çalıştırıldığında, import pandas as pd ifadesi normal pandas yerine bir “proxy modül” yükler. Bu proxy, her pandas işlemini önce GPU üzerinde (cuDF) çalıştırmayı dener; eğer o işlem GPU’da desteklenmiyorsa, otomatik olarak CPU’ya (pandas) geri döner ve veriyi arka planda senkronize eder.

Önemli: Bu mekanizma kullanıcı kodunda hiçbir değişiklik gerektirmez. pd.read_csv(), df.merge(), df.groupby() gibi tüm pandas komutları aynen çalışır — sadece GPU üzerinde çalışırlar.

cuML ; scikit-learn Hızlandırması

cuML, cuml.accel adında bir “scikit-learn hızlandırma modu” sunar. Bu mod da tek bir hızlandırma komutuyla etkinleştirilir:

Copy to Clipboard

 

Bu komut, sklearn, umap-learn ve hdbscan modüllerinin import işlemlerini araya girerek (intercept) ele alır. Bir estimator (örneğin LinearSVC) oluşturduğunuzda, asıl estimator yerine bir “proxy estimator” oluşturulur. Eğer cuML’de o algoritmanın GPU implementasyonu varsa işlem GPU’ya yönlendirilir; yoksa otomatik olarak CPU’ya (scikit-learn) geri dönülür.

Notebook 1: cuDF ile pandas Hızlandırması

 

Bu notebook, pandas veri işleme operasyonlarını içerir: yükleme, string operasyonları ve gruplama.

cuDF hızlandırma modu (cudf.pandas), bu operasyonları kod değişikliği yapmaya gerek olmaksızın GPU’ya yönlendirir.

Çalıştırma

Notebook’ları başsız (headless) modda, jupyter nbconvert –execute ile çalıştıracağız. Bu yöntem, notebook’taki tüm hücreleri otomatik olarak çalıştırır ve çıktıları notebook dosyasının içine kaydeder.

GPU üzerinde çalıştırma (RAPIDS ortamı, hızlandırma komutu aktif):

Copy to Clipboard
Copy to Clipboard

Notebook 2: cuML ile scikit-learn Hızlandırması

 

Bu notebook, scikit-learn ile çeşitli makine öğrenmesi operasyonlarını içerir: sınıflandırma, kümeleme ve boyut indirgeme.

cuML hızlandırma modu (cuml.accel), bu operasyonları kod değişikliği yapmaya gerek olmaksızın GPU’ya yönlendirir.

GPU üzerinde çalıştırma:

Copy to Clipboard
Copy to Clipboard

 

CPU üzerinde çalıştırma:

Copy to Clipboard
Copy to Clipboard

Çalıştırılmış Notebook’ları Jupyter ile Görüntüleme

Çalıştırılmış notebook’lar, tüm hücre çıktılarını (süreler, tablolar, grafikler) içine gömülü olarak barındırır. Bunları bir Jupyter sunucusu üzerinden tarayıcınızda görüntüleyebilirsiniz.

Spark üzerinde bir Jupyter sunucusu başlatın:

Copy to Clipboard
Copy to Clipboard

 

Bilgisayarınızın tarayıcısında, çıktıda görünen URL’i açın (token dahil). Sol tarafta dosya listesinde dört çalıştırılmış notebook’u göreceksiniz:

  • cudf_pandas_demo_gpu_executed.ipynb — GPU çalıştırması (cuDF)
  • cudf_pandas_demo_cpu_executed.ipynb — CPU çalıştırması (cuDF)
  • cuml_sklearn_demo_gpu_executed.ipynb — GPU çalıştırması (cuML)
  • cuml_sklearn_demo_cpu_executed.ipynb — CPU çalıştırması (cuML)

Herhangi birine tıklayarak hücre çıktılarını, %%time sürelerini, tabloları ve grafikleri görüntüleyebilirsiniz. CPU ve GPU notebook’larını iki tarayıcı sekmesinde yan yana açarak karşılaştırma yapabilirsiniz.

Karşılaştırma

Bu bölümde, her önemli hücreyi yan yana karşılaştırıp sonuçları değerlendireceğiz. Ekran görüntülerinde solda CPU, sağda GPU çalıştırması yer alır.

Notebook 1: cuDF / pandas
In[4] — Hızlandırma Komutu

 

Bu hücre, CPU ve GPU çalıştırması arasındaki tek farktır. GPU notebook’unda %load_ext cudf.pandas komutu, pandas’ı bir proxy modülüyle değiştirir. CPU notebook’unda bu satır yorum satırı yapılmıştır (# %load_ext cudf.pandas), bu nedenle normal pandas kullanılır.

In[6] — Veri Yükleme (4.76 GB)

 

job_summary.csv dosyası (4.76 GB) yüklenir. Bu veri seti, yaklaşık 1,1 milyon LinkedIn iş ilanının metin özetlerini içerir.

CPU: 25.7 s
GPU: 3.87 s
Hızlanma: 6.6×

CPU tarafında pandas, CSV dosyasını varsayılan olarak tek iş parçacığı (single-thread) ile okuduğundan büyük veri kümelerinde yükleme süresi uzar. cuDF ise GPU’nun paralel işleme yeteneklerinden yararlanarak veriyi aynı anda birçok çekirdekte işler ve veriyi doğrudan GPU belleğine yükler. Bu sayede 4.76 GB büyüklüğündeki bir dosya yaklaşık 6,6 kat daha hızlı yüklenir.

In[7-8] — Veri Yükleme + String İşlemi

 

job_skills.csv (642 MB) ve linkedin_job_postings.csv (397 MB) dosyaları yüklenir. Toplamda yaklaşık 1 GB büyüklüğündeki bu veri setleri yüklendikten sonra, 1,1 milyon metin kaydının uzunluğu (str.len()) hesaplanır. String uzunluğunu hesaplamak, metin verisiyle çalışırken en sık kullanılan işlemlerden biridir.

Veri yükleme (2 CSV, ~1 GB):
CPU: 6.46 s
GPU: 252 ms
Hızlanma: 25.6×

String işlemi (str.len(), 1.1 milyon string):
CPU: 246 ms
GPU: 37.2 ms
Hızlanma: 6.6×

CPU tarafında string işlemleri büyük ölçüde sıralı olarak gerçekleştirilirken, cuDF GPU üzerindeki binlerce çekirdeği kullanarak çok sayıda string’i aynı anda işler. Bu sayede hem yaklaşık 1 GB büyüklüğündeki CSV dosyalarının yüklenmesi hem de 1,1 milyon string üzerinde uzunluk hesaplama işlemi CPU’ya göre önemli ölçüde daha kısa sürede tamamlanır.

In[11] — Aggregasyon (groupby + sort)

 

Önceki hücrelerde yüklenen ve birleştirilen LinkedIn iş ilanları veri seti üzerinde gruplama (groupby) ve sıralama (sort) işlemleri gerçekleştirilir. Yaklaşık 1,1 milyon satır, job_title ve job_location sütunlarına göre gruplanır, her grup için ortalama değer hesaplanır ve sonuçlar üç farklı sütuna göre sıralanır. Bu tür agregasyon işlemleri, veri analitiğinde en yaygın kullanılan işlemler arasındadır. Örneğin, hangi pozisyon ve şehirde ortalama ilan metninin daha uzun olduğunu belirlemek için kullanılabilir.

CPU: 1.59 s
GPU: 199 ms
Hızlanma: 8.0×

Gruplama ve sıralama işlemleri çok sayıda satır üzerinde tekrar eden hesaplamalar içerdiğinden, cuDF bu işlemleri GPU’nun paralel işlem gücüyle aynı anda gerçekleştirir. Bu sayede yaklaşık 8 kat daha yüksek performans elde edilir.

Notebook 2: cuML / scikit-learn

In[2] — Hızlandırma Komutu

 

Önceki notebook’taki gibi, bu hücre CPU ve GPU çalıştırması arasındaki tek farktır. GPU notebook’unda %load_ext cuml.accel komutu, scikit-learn/umap-learn/hdbscan import’larını araya girerek ele alır.

In[7] — Sınıflandırma: LinearSVC Eğitimi

 

Sınıflandırma (classification), verilen özelliklere dayanarak her örneğin hangi kategoriye ait olduğunu tahmin etmeyi amaçlayan bir makine öğrenmesi problemidir. Bu örnekte kullanılan LinearSVC (Linear Support Vector Classifier), sınıfları birbirinden ayıran doğrusal bir karar sınırı (hyperplane) oluşturarak tahmin yapar.

Notebook, eğitim için UCI Covertype veri setini internetten indirir. Bu veri seti yaklaşık 581 bin örnek ve 55 özellik içerir. Amaç; yükseklik, eğim, toprak tipi gibi arazi özelliklerinden yararlanarak orman örtüsü tipini (7 sınıf) tahmin etmektir. Model, yaklaşık 464 bin örnekle eğitilir ve 116 bin örnek üzerinde test edilir.

CPU: 31.9 s
GPU: 3.65 s
Hızlanma: 8.7×

Makine öğrenmesi modellerinde eğitim aşaması genellikle en fazla hesaplama gerektiren adımdır. cuML, LinearSVC algoritmasının yoğun matris işlemlerini GPU üzerinde paralel olarak gerçekleştirerek eğitim süresini önemli ölçüde azaltır. Bu hızlanma, özellikle hiperparametre optimizasyonu veya çok sayıda modelin art arda eğitildiği senaryolarda büyük avantaj sağlar.

In[12] — CPU’ya Geri Düşme: KernelDensity

Not: Bu ekran görüntüsü yalnızca GPU notebook’undan alınmıştır (yan yana karşılaştırma yoktur).

KernelDensity tahmini (Kernel Density Estimation), verinin dağılımını bir olasılık yoğunluk fonksiyonu olarak modelleyen parametrik olmayan bir yöntemdir. Yani, veri noktalarından grafiğin “şeklini” çıkarmayı amaçlar.

Diğer notebook kısımlarının aksine, burada amacımız performans karşılaştırması değildir. Burada, cuML’in CPU’ya geri düşme (fallback) mekanizması gösterilmiştir. Notebook, np.random.normal ile iki grup sentetik veri üretir (toplam 20 bin nokta) ve bu veri üzerinde KernelDensity algoritmasını çalıştırır. KernelDensity algoritması, cuML’de GPU implementasyonuna sahip değildir. Notebook bu algoritmayı bilerek çağırmış ve desteklememe durumunda operasyonların sorunsuz şekilde CPU’ya geri düşeceğini göstermiştir.

In[16] — Kümeleme: HDBSCAN

 

Kümeleme (clustering), verideki örüntüleri keşfetmek amacıyla benzer örnekleri aynı grupta toplayan bir makine öğrenmesi problemidir. Bu örnekte kullanılan HDBSCAN, yoğunluk tabanlı bir kümeleme algoritmasıdır. Yoğun bölgeleri küme olarak tanımlar ve küme sayısının önceden belirlenmesini gerektirmez.

Notebook, bu işlem için sklearn.datasets.make_blobs fonksiyonunu kullanarak sentetik bir veri seti oluşturur. Veri seti 20 bin örnek, 100 özellik ve 5 kümeden oluşur. Bilinen küme yapısına sahip olduğu için algoritmanın performansını değerlendirmek amacıyla uygun bir test ortamı sunar.

CPU: 15.9 s
GPU: 216 ms
Hızlanma: 73.6×

Bu, eğitim boyunca elde edilen en yüksek hızlanma değeridir. HDBSCAN algoritması; yoğunluk hesaplamaları, komşuluk analizleri ve minimum spanning tree (minimum kapsayıcı ağaç) oluşturma gibi yoğun hesaplama gerektiren adımlar içerir. cuML, bu işlemleri GPU üzerinde paralel olarak gerçekleştirerek CPU’ya kıyasla yaklaşık 74 kat daha kısa sürede tamamlar.

In[25] — Boyut İndirgeme: UMAP

 

 

Boyut indirgeme (dimensionality reduction), yüksek boyutlu veriyi daha az boyuta dönüştürerek verinin görselleştirilmesini ve sonraki makine öğrenmesi adımlarını kolaylaştırmayı amaçlayan bir tekniktir. Bu örnekte kullanılan UMAP (Uniform Manifold Approximation and Projection), verinin yapısını mümkün olduğunca koruyarak 561 boyutlu veriyi 2 boyuta indirger. Böylece veriyi iki boyutlu bir saçılım grafiği (scatter plot) üzerinde görselleştirmek mümkün olur.

Notebook, bu işlem için internetten UCI HAR (Human Activity Recognition) veri setini indirir. Veri seti 7.352 örnek ve 561 özellik içerir. Özellikler, akıllı telefon sensörlerinden elde edilen ölçümlerden oluşurken; hedef değişken yürüme, merdiven çıkma, oturma gibi insan aktivitelerini temsil eder.

CPU: 13.9 s
GPU: 367 ms
Hızlanma: 37.9×

UMAP algoritması; en yakın komşu (k-NN) grafiğinin oluşturulması ve gömleme (embedding) optimizasyonu gibi yoğun hesaplama gerektiren adımlar içerir. cuML, bu işlemleri GPU üzerinde paralel olarak gerçekleştirerek CPU’ya göre yaklaşık 38 kat daha yüksek performans sağlar.

Sonuç

Bu eğitimde, DGX Spark üzerinde pandas ve scikit-learn iş akışlarını CUDA-X kütüphaneleri (cuDF, cuML) ile GPU üzerinde hızlandırdık. İki notebook’u hem CPU hem GPU ortamında çalıştırarak gerçek performans karşılaştırması yaptık.

Elde edilen sonuçlar:

İşlem Kategorisi Tipik Hızlanma
pandas (cuDF)
CSV yükleme 6–25×
String işlemleri 6.6×
groupby + sort 8.0×
scikit-learn (cuML)
LinearSVC eğitimi 8.7×
HDBSCAN kümeleme 73.6×
UMAP boyut indirgeme 37.9×

 

En çarpıcı sonuçlar, HDBSCAN (73.6x) ve UMAP (37.9x) algoritmalarında elde edildi. Bunun sebebi bu algoritmaların yoğun matematiksel hesaplamalar içeriyor olması ve bu durumun GPU’nun paralel işleme gücü açısından büyük bir avantaj olmasıdır.

Bu sonuçlar, Spark üzerinde çalıştırdığınız pandas ve scikit-learn kodlarınıza tek bir komutu ekleyerek, önemli hızlanmalar elde edebileceğinizi göstermiştir. Bu notebook’ları kendi bilgisayarınızda da denemenizi öneririz. Çünkü GPU hızlandırması olsun olmasın, DGX Spark’ın 20 çekirdekli ARM CPU’sunun performansı sizi şaşırtabilir!

Kapatma

İşiniz bittiğinde Jupyter sunucusunu Ctrl+C ile durdurun. Spark’ta kurduğunuz conda ortamları (cpu-baseline ve rapids-test), çalıştırılmış notebook’lar ve indirilen veri setleri diskte kalır — bir şey silinmez.

Tekrar notebook’ları görüntülemek için Jupyter sunucusunu yeniden başlatın:

Copy to Clipboard

 

Sunucu başladığında, terminalde görünen token’ı içeren URL’i tarayıcınızda açın.

OPENZEKA HABERLERİ

Abone olmak ister misiniz?

Hemen ilgilendiğiniz alanları seçerek bültenimizden haberdar olabilirsiniz.

Kategoriler

OPENZEKA HABERLERİ

Abone olmak ister misiniz?

Hemen ilgilendiğiniz alanları seçerek bültenimizden haberdar olabilirsiniz.

Kategoriler

Hesaplarınızda paylaşmak ister misiniz?

İlgili Yazılar