SON DAKİKA

Nvdia

“NVIDIA GPU’larla Apache Spark ML’i Sıfır Kod Değişikliği ile Hızlandırın”

NVIDIA RAPIDS Accelerator for Apache Spark, sıfır kod değişikliği gerektiren kullanıcı deneyimi (UX) ile GPU hızlandırmalı veri işleme sürecinde çığır açan bir yazılım eklentisidir. Bu yazılım, Apache Spark SQL ve DataFrame tabanlı mevcut uygulamaları NVIDIA GPU’ları üzerinde %900’ün üzerinde hızlandırarak, sorgularınızı veya kaynak kodunuzu değiştirmeden çalıştırmanıza olanak tanır.

Bu gelişmeler, Spark RAPIDS ML Python kütüphanesi gibi yeniliklerin ortaya çıkmasına yol açtı ve bu kütüphane, uygulamaları %100’ün üzerinde hızlandırarak Apache Spark’ın ölçeklenebilir makine öğrenimi kütüphanesi MLlib ile birleştirildi.

Son zamanlarda, Spark RAPIDS ML’in MLlib hızlandırma işlevselliği, Python’un hızlandırılmış uygulamalardan yararlanabilmesi için küçük bir değişiklik gerektiriyordu. Yani, hızlandırılmış KMeans algoritmasını kullanmak için pyspark.ml yerine spark_rapids_ml kütüphanesinden sınıfları içe aktarmanız gerekiyordu. Örneğin, standart KMeans’in yerine hızlandırılmış KMeans kullanmak için from pyspark.ml.classification import KMeans ifadesini from spark_rapids_ml.classification import KMeans ile değiştirmeniz yeterliydi. Ancak, daha fazla kod değişikliği yapmadan bu hızlandırılmış sürüm için kullanılabilmektedir.

Bu blog yazısında, 25.02 sürümünden sonra Spark RAPIDS ML’deki yeni işlevselliği ele alacağız; bu işlevsellik sayesinde yukarıda belirtilen içe aktarma ifadelerini de değiştirmeden, hem Spark SQL ve DataFrame hem de MLlib kodları için gerçekten sıfır kod değişikliği ile hızlandırılmış bir deneyim elde edebilirsiniz.

Sıfır Kod Değişikliği ile Hızlandırma

Örneğin, aşağıdaki basit PySpark uygulama kodunu düşünün:

from pyspark.ml.clustering import KMeans
from pyspark.ml.functions import array_to_vector

df = spark.read.parquet("/data/embedding_vectors")
df = df.select(array_to_vector(df.features).alias("features"))
kmeans_estim = ( KMeans()
   .setK(100)
   .setFeaturesCol("features")
   .setMaxIter(30) )

kmeans_model = kmeans_estim.fit(df)

transformed = kmeans_model.transform(df)
transformed.write.parquet("/data/embedding_vectors_clusters")

Bu kod, derin öğrenme dil modelini kullanarak daha önce hesaplanmış ve parquet formatında saklanmış vektör gömme dosyasını okumaktadır. Ardından Spark MLlib’daki KMeans algoritmasını kullanarak bu vektörleri kümeler. New zero code change functionality ve RAPIDS Accelerator for Apache Spark yazılım eklentisinin birleşimi sayesinde, bu tam uyumlu PySpark kodunu hiç bir değişiklik yapmadan hızlandırabiliriz. Bu, parquet dosyasını read.parquet() ile okuma, KMeans kümelendirme hesaplamaları fit() ve transform() fonksiyonları aracılığıyla yapılmakta ve vektörleri kümelerle birlikte başka bir parquet dosyasına kaydetme işlemleri hızlandırılmaktadır.

Komut Satırı Arayüzleri

Yukarıdaki örnek uygulama kodu bir dosya olan app.py‘de bulunsun. Geleneksel olarak, çeşitli küme türlerinde spark-submit komutuyla app.py‘yi çalıştırmak için bilinen komut satırı aracını kullanırdınız:

spark-submit <options> app.py

MLlib bölümlerini hızlandırmak için, Spark RAPIDS ML kütüphanesini pip install spark-rapids-ml ile kurduktan sonra, spark-submit komutunu aşağıda belirtilen hızlandırılmış CLI karşılığıyla değiştirebilirsiniz:

spark-rapids-submit <options> app.py

Hatta app.py gibi bir dosyayı etkileşimli olarak pyspark shell’inde de çalıştırmak isterseniz, sıfır kod değişikliği sağlamak için yeni pyspark-rapids komutunu kullanarak hızlandırılmış bir PySpark shell’i başlatabilirsiniz.

Jupyter Not Defterleri: Yerel Spark Küme

Spark uygulamaları, genellikle Spark kümelerine bağlı çekirdeklerde etkileşimli olarak Jupyter not defterlerinde çalıştırılmaktadır. NVIDIA GPU’ya sahip bir iş istasyonunda hızlandırılmış Spark ile çalışmaya başlamak için Jupyter’yi pyspark-rapids komutuyla yerel modda başlatabilirsiniz:

PYSPARK_DRIVER_PYTHON=jupyter 
PYSPARK_DRIVER_PYTHON_OPTS='notebook --ip=0.0.0.0' 
pyspark-rapids --master local[*] <options>

Ardından, oturum açtığınız URL’den Jupyter not defter sunucusuna bağlanabilirsiniz. Bu sayede app.py kodunu etkileşimli olarak bir veya daha fazla not defteri hücresinde çalıştırabilirsiniz. Uçtan uca hızlandırma için RAPIDS hızlandırılmış Spark eklentisi jarını ve spark.plugins yapılandırmasını ekleyebilirsiniz. Uygun --master ayarlarıyla, aynı komutu diğer Spark küme dağıtımlarında (standalone, yarn vb.) sıfır kod değişikliği ile hızlandırma sağlamak için kullanabilirsiniz.

Jupyter Not Defterleri: Bulut Sağlayıcı Tabanlı Spark

Bölüm 25.02’den itibaren sıfır kod değişikliği ile kullanıcı deneyimi elde etmek için Cloud-hosted Spark Jupyter Notebooks kullanıyorsanız, Spark RAPIDS ML deposunu ziyaret ederek GPU Spark kümeleri başlatırken örnek başlangıç ve başlatma betikleri için nasıl yapılandırma yapmanız gerektiğini görebilirsiniz. Bu örnekler, Databricks, GCP Dataproc ve AWS EMR için sağlanmıştır.

Başlangıç betikleri, Jupyter not defterlerinin sıfır kod değişikliği ile hızlandırılmış olarak başlatılması için gerekli basit değişiklikleri ilgili barındırılan Spark ortamlarına enjekte eder.

Nasıl Çalışır

Yukarıda belirtilen CLI ve Jupyter not defteri dağıtımları ile sağlanan sıfır kod değişikliği ile hızlandırma, spark_rapids_ml.install modülünün Spark RAPIDS ML Python kütüphanesinde import edilmesi veya çalıştırılmasıyla güçlenmektedir. Bu yeni modül, geçen yıl GTC’de tanıtılan RAPIDS cudf.pandas Python paketindeki benzer işlevsellikten büyük ölçüde yararlanmaktadır ve kullanıcıların popüler Pandas Veri Analiz kütüphanesinden yararlanarak sıfır kod değişikliği ile GPU hızlandırılmış bir deneyim yaşamalarını sağlamaktadır.

Yeni spark_rapids_ml.install modülünü import etmek veya çalıştırmak, Python’un modül import mekanizmalarını geçersiz kılarak, uygulama kodunda mevcut olan pyspark.ml tahminlerini hızlandırılmış spark_rapids_ml karşıtlarına yönlendirmektedir. Ancak bir zorluk da, bu yönlendirmeyi PySpark veya Spark RAPIDS ML kodunun içindeki importlar için yapmamaktır, bu tür durumlarda pyspark.ml tahminlerini import etmek oldukça önemlidir.

Sonraki Adımlar

Yeni sıfır kod değişikliği ile hızlandırılmış Spark MLlib işlevselliğini deneyimlemek ve orijinal RAPIDS Accelerator for Apache Spark kütüphanesini artırmak için spark-rapids-ml Python paketini kurabilir ve Spark RAPIDS MLGitHub deposuna başvurabilirsiniz. İçeriğinde sıfır kod değişikliği sağlayan CLI’ler ve not defterleri ve sıfır kod değişikliği test betiğini de çalıştırabilirsiniz.

Kaynak

Nvdia Blog

Düşüncenizi Paylaşın

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

İlgili Teknoloji Haberleri