SON DAKİKA

Nvdia

Azure’da Apache Spark ve NVIDIA AI ile Sunucusuz Dağıtık Veri İşleme

Geniş metin kütüphanelerinin sayısal temsillere, yani embeddinglere dönüştürülmesi, üretken yapay zeka için oldukça önemlidir. Sözdizimsel arama, öneri motorları ve geri kazanım destekli üretim (RAG) gibi çeşitli teknolojiler, LLM’lerin ve diğer modellerin anlayıp işleyebilmesi için verileri dönüştürmek adına bu embedding’lere ihtiyaç duyar.

Ancak, milyonlarca veya milyarlarca belge için embedding üretmek, büyük ölçekli işlemeyi gerektirir. Apache Spark, büyük ölçekli veri işleme işlerini bir makine kümesine dağıtma konusunda uzmanlaşmış bir çerçevedir. Ancak Spark, ölçek konusunda sorunları çözerken, embedding üretimi kendisi yoğun bir şekilde hesaplama gerektirir. Bu işlerin zamanında sonuçlar elde edebilmesi için hızlandırılmış hesaplama gerektirir ve bu da altında yatan GPU altyapısını sağlama ve yönetme karmaşıklığını getirir.

Bu yazıda, Azure Container Apps (ACA) üzerinde dağıtılmış bir Spark uygulamasını sunarak bu zorluğun nasıl çözüleceği gösterilmektedir. Bu güçlü kombinasyon, Spark’ın devasa veri setlerini ustalıkla yönetmesini sağlarken, ACA hesaplama yönetimi ve ölçeklendirme karmaşasını tamamen ortadan kaldırır. Örnek olarak, Hugging Face’ten açık kaynak bir model ile NVIDIA RAPIDS Accelerator for Spark gibi yüksek performanslı kütüphaneleri paketleyen özel bir işçi konteyneri oluşturulmuştur. Bu yapı, esnek ve ölçeklenebilir bir çözüm sunmaktadır.

Sonuç olarak, yüksek verimlilik ve düşük gecikme süreleri sunan sunucusuz, kullanım başına ödeme modeliyle çalışan bir platform elde edilmiştir. Bu yaklaşım rahatlıkla adapte edilebilecek güçlü bir şablon sunar. En yüksek performans ve destek arayan kurumsal dağıtımlar için, mimari özelleştirilmiş işçiyi bir NVIDIA NIM mikroservisine yükselterek daha fazla performans elde edebilir.

Sunucusuz, Dağıtılmış GPU-Hızlandırmalı Apache Spark Uygulaması Oluşturma

Bu çözümün mimarisi basit ama güçlüdür ve iki ana sunucusuz konteyner uygulamasından oluşur. Bu uygulamalar, bir Azure Container Apps Ortamı içinde bir arada çalışır.

Mimari yapının temel bileşenleri:

  • Apache Spark ön uç kontrol uygulaması (master): CPU üzerinde çalışır ve işleri yönetir. Ayrıca geliştirici için bir Jupyter arayüzü veya üretim iş yükleri için bir HTTP tetikleyici olarak görev yapan işler için bir uç nokta sağlar.
  • Bir veya daha fazla Spark işçi uygulaması: Bu uygulamalar GPU hızlandırmalı olup, Azure Container Apps sunucusuz GPU’larında çalışır. Veri işleme yükünü gerçekleştirir ve büyük sayıda talebi karşılamak için otomatik olarak ölçeklenebilir.
  • Paylaşımlı veri depolama katmanı: Azure Files kullanarak, bu katman kontrol merkezi ile işçilerin kod, modeller ve verileri paylaşmasını sağlar, böylece geliştirme ve dağıtımı basitleştirir.

Bu yapı hem performans hem de konfor için tasarlanmıştır, böylece karmaşık dağıtılmış uygulamaları kolayca oluşturup test edebilirsiniz.

Diagram showing Azure Container Apps environment application implementation with Clients, GPU-accelerated Spark Clusters, and Database or Blob Storage.
Şekil 1. Azure Container Apps ortamı uygulama uygulaması

Gereksinimler

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Kaynak yaratmak için erişim sağlayan bir Azure aboneliği.
  • Metin verisi içeren bir SQL Server örneği (Azure SQL veya SQL Server 2022/2025).
  • Azure Container Apps, Apache Spark, Docker ve Python ile ilgili bilgi.
  • Azure Container Apps sunucusuz GPU’ları için kota.
  • Başlamak için Azure-Serverless-GPU-Embedding GitHub deposundan örnek kod.

Adım 1: Apache Spark Kontrol Uygulamasını Kurun

Öncelikle Spark ön uç uygulamasını dağıtın. Kontrol uygulamasının ana amacı, Spark işçi düğümlerine hangi görevleri yerine getireceklerini bildirmek ve talepleri almak için bir web hizmeti barındırmaktır.

Konteyner Görüntüleri Oluşturma

Bu uygulama, biri Spark (master kısmı) diğeri de ön uç (etkileşim) olarak iki Docker konteynerinden oluşmaktadır. Spark konteyneri, işçi düğümlerinden herhangi bir ağ üzerindeki bağlantıları kabul edebilmesi için SPARK_LOCAL_IP ortam değişkenini 0.0.0.0 değerine ayarlıdır.

Ön uç konteynerinde, uygulama URL’sini 7077 portu ile kullanan bir SPARK_MASTER_URL değişkeni bulunmaktadır. Ek olarak, Spark master ile nasıl etkileşimde bulunacağınızı değiştiren APP_MODE ortam değişkenine sahiptir. Geliştirme ve hata ayıklama için Jupyter’i kullanabilir veya API modunda HTTP/HTTPS ile etkileşimde bulunabilirsiniz.

Kendi özelleştirmelerinizi eklemek için dockerfile.master ve dockerfile.interact dosyalarını GitHub deposundan alarak konteyner görüntüsünü oluşturup Azure Container Registry (ACR) üzerine itebilirsiniz.

Kontrol Uygulamasını Oluşturun

Artık ACR’den iki görüntü (Spark master ve istemci etkileşimi) temelinde kontrol uygulamasını oluşturabilirsiniz. GPU hızlandırmasından yararlanmak için mevcut NVIDIA GPU boyutlarına dayalı bir GPU iş yükü profili oluşturun. Unutmayın ki, NVIDIA A100 ve NVIDIA T4 GPU’ları şu anda Azure Container Apps tarafından desteklenmektedir.

Ayrıca, halka açık erişime sahip bir Azure Sanal Ağı ile bir Azure Container Apps ortamı oluşturun ve GPU iş yükü profilini buna ekleyin. Bu ortam, Spark kontrolörü ile işçi düğümleri arasında giriş verilerini depolamak, çıkış sonuçlarını yazmak ve dosyaları paylaşmak için Azure File Share’i bir hacim montajı olarak eklemelidir.

Ağ ve Ölçekleme Konfigürasyonu

Uygulamayı, REST API noktası için halka açık web trafiğini 8888 portunda kabul etmek üzere yapılandırın. İletişim kurabilmesi adına Spark düğümleri arasındaki iletişim için 7077 portunu da eklemelisiniz. Hata ayıklama için, Spark UI’yi 8080 gibi başka portlarda da açmayı düşünebilirsiniz. Bu kontrol uygulaması daima bir ölçek olarak ayarlanmalıdır.

Adım 2: GPU-Hızlandırmalı Spark İşçi Uygulamasını Dağıtın

Şimdi Spark işçi uygulamasını dağıtmanın zamanı geldi. İşçi uygulaması, kontrol ile bağlantı kuracak ve gerçek veri işleme ve yapay zeka model çıkarımını üstlenecektir. Tek bir kontrol düğümüne karşın birçok işçi dağıtılabilir ve bunlar otomatik olarak kontrol merkezine bağlanabilir.

İşçi Konteyner Görüntüsünü Oluşturma

Örnek olarak, Dockerfile.worker kullanarak, NVIDIA temelli bir temel görüntü, NVIDIA RAPIDS Accelerator for Apache Spark kütüphanesini ve Hugging Face’ten önceden eğitilmiş bir embedding modelini (all-MiniLM-L6-v2) yükleyen uygulama kodunu içeren bir işçi konteyneri oluşturulmaktadır. RAPIDS Hızlandırıcı, değişiklik yapmadan GPU’ları kullanarak veri işleme ve geleneksel makine öğrenimi görevlerini hızlandırmak için tasarlanmıştır.

Son olarak, bu işçi görüntüsünü ACR’ye itip dağıtıma hazır hale getirin. Kontrol uygulaması ile aynı Azure Sanal Ağı ve depolama alanını paylaşmalıdır.

Bu örnekte Hugging Face embedding modeli ile işçi konteyneri oluşturulması gösterilmektedir; fakat kurumsal dağıtımlar için NVIDIA NIM mikroservisleri kullanımı önerilmektedir. NVIDIA NIM mikroservisleri, en iyi inferans performansını sağlamak için önceden paketlenmiş, kurumsal destekli, üretim kalitesinde konteynerler sunmaktadır.

İşçi Uygulamasını Oluşturun

Yukarıdaki bölümde belirtildiği gibi oluşturduğunuz işçi konteyner görüntüsünü kullanarak işçi uygulamasını oluşturun. Sunucusuz GPU iş yükü profili kullanarak bir Azure Container Apps (ACA) ortamında dağıtın. ACA, NVIDIA sürücülerinin ve CUDA araç setinin kurulumu ile ilgilenir, böylece altyapıdan çok uygulama kodunuza odaklanabilirsiniz.

Otomatik Ölçekleme

Kontrol uygulamasının aksine (sabit bir ölçek ile), işçi örneklerinin sayısı dinamik olarak değişir. Büyük bir veri işleme görevi başladığında ACA, yük temelinde işçi örneklerini otomatik olarak ölçeklendirebilir. İhtiyaca göre birkaç dakikada sıfırdan birçok GPU örneğine hızlı bir şekilde geçiş yapabilir ve kritik olarak, kullanılmayan kaynaklar için ödeme yapmaktan kaçınmak amacıyla yeniden sıfıra ölçeklenebilir. Bu yaklaşım, geleneksel sınırlı kaynaklı kümelere kıyasla önemli maliyet tasarrufları sağlar.

İşçi uygulaması, giriş almaz; her şey iç iletişimle temellendirilmiştir.

Adım 3: Dağıtılmış Metin Embedding Görevini Çalıştırın

Spark kontrol ve işçi uygulamaları aktif olduğunda, sunucusuz GPU-hızlandırmalı Apache Spark kümemiz çalışmaya hazırdır. Bu örnekte, SQL Server’dan ürün açıklaması verileri işlenir, Hugging Face modeli ile embedding’ler üretilir ve sonuçlar SQL Server veritabanına geri yazılır. Görevi gönderme yöntemi, kontrolcüde bulunan APP_MODE ortam değişkenine bağlı olarak farklılık gösterir.

Jupyter ile Bağlan (Geliştirme Modu)

Eğer kontrol uygulaması ortam değişkeni APP_MODEjupyter olarak ayarlandıysa, kontrol uygulamanızın genel URL’sine giderek ortak Azure File depolama alanınıza otomatik olarak bağlanan bir Jupyter not defteri açabilirsiniz. Not defterinden bir Spark oturumu oluşturup, SQL Server veritabanınıza JDBC aracılığıyla bağlanarak embedding görevini çalıştırabilirsiniz. Örnek bir uygulama için, NVIDIA/GenerativeAIExamples GitHub reposundaki spark-embedding.py not defterine göz atabilirsiniz.

Ayrıca, işin ilerlemesini standart Spark UI aracılığıyla izleyebilirsiniz; burada işçilerin kullanıldığını ve sunucusuz GPU üzerinde CUDA’nın kullanıldığını göreceksiniz.

HTTP Kullanarak Tetikleyin (Üretim Modu)

Üretim modunu etkinleştirmek için kontrol APP_MODE ortam değişkenini trigger olarak ayarlayın; bu, otomasyon için güvenli bir HTTP uç noktası sağlar. Embedding görevi, programlı bir Bash betiği aracılığıyla veya SQL Server dış REST uç nokta özelliği kullanılarak doğrudan bir veritabanından başlatılabilir.

Bir kez tetiklendiğinde, kontrol merkezi süreçleri otomatik olarak yönetir. Bu süreçler SQL tablonuzdan verileri okuma, işlemleri GPU işçilerine dağıtma ve son embedding’leri hedef tablonuza yazma gibi adımları içerir, böylece her şey sorunsuz ilerler.

Üretim modunda bir görevi tetiklemek için örnek bir uygulama bakmanız gereken trigger-mode.py dosyasıdır. Gerçek kontrol uygulamanızın genel URL’sini koymayı unutmayın.

Sunucusuz Dağıtılmış Veri İşlemeye Başlayın

Özelleştirilmiş, GPU-hızlandırmalı bir Apache Spark uygulamasını Azure Container Apps sunucusuz GPU’lar üzerinde dağıtarak, son derece verimli, ölçeklenebilir ve maliyet etkin dağıtılmış veri işleme çözümleri oluşturabilirsiniz. Bu sunucusuz yaklaşım, altyapı yönetiminin yükünü ortadan kaldırır ve AI yüklerinizin taleplerini karşılamak için güçlü GPU kaynaklarının dinamik olarak ölçeklenmesini sağlar.

İnteraktif bir Jupyter tabanlı geliştirme ortamından, aynı mimari içinde üretime hazır tetikleyici bir sisteme geçiş yapabilme imkânı büyük bir esneklik sunmaktadır. Açık kaynak araçlar ve sunucusuz altyapı arasındaki bu güçlü kombinasyon, en zor veri sorunlarınız için net bir yol sunmaktadır. Performans ve destek için NVIDIA NIM mikroservislerini benimseyerek daha fazla optimizasyon yapabilirsiniz.

Çözümü dağıtmaya başlamak için NVIDIA/GenerativeAIExamples GitHub reposunda bulunan kodlara göz atabilirsiniz. Daha fazla bilgi edinmek ve bir sunum yürütmesini görmek için Azure Container Apps Sunucusuz GPU’ları ile Güvenli Yeni Nesil AI Uygulamaları videosunu izleyebilirsiniz.

Kaynak

Nvdia Blog

Düşüncenizi Paylaşın

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

İlgili Teknoloji Haberleri