Flask ve RabbitMQ ile Derin Öğrenme Modellerini Yayına Alma

Ayberk Cakar
3 min readAug 18, 2024

--

Herkese Selamlar 👨‍💻

Derin öğrenme modellerini gerçek dünyaya entegre etmek, araştırma ve geliştirme sürecinin önemli bir aşamasıdır. Bu yazımda, Python’da Flask ve RabbitMQ kullanarak derin öğrenme algoritmalarını nasıl yayına alabileceğinizi ele alacağız. Ayrıca, Flask’ın hafifliği ve RabbitMQ’nun mesaj kuyruklama kabiliyetleri ile nasıl güçlü bir API oluşturabileceğinizi anlatacağız. Ayrıca, Docker ile bu yapıyı nasıl konteynerize edebileceğimizi de ele alacağız.

Bu projede, denetimsiz derin öğrenme tabanlı algoritmalar kullandım. Siz ise kendi algoritmalarınızı eğitip, tahminler yapabilirsiniz. Veri seti içinde ses, titreşim ve sıcaklık sensörlerinden gelen veriler yer alıyor. Tag kolonunda normal veriler "Normal" olarak etiketlenmiş, anomali tipleri ise metin olarak tutulmuştur.

Flask ile API Geliştirme

Flask, Python tabanlı minimalist bir web çerçevesidir. Derin öğrenme modellerinizi kullanıcıya sunmak için ideal bir araçtır. Flask ile, RESTful API’ler oluşturarak modellerinizi servis edebilirsiniz. Flask’ın basit yapısı, hem hızlı prototipleme hem de büyük ölçekli uygulamalar için uygundur.

RabbitMQ

Derin öğrenme modelleri, büyük veriler üzerinde çalıştıkları için zaman alıcı işlemler olabilir. RabbitMQ burada devreye girer. RabbitMQ, bu uzun süreli görevleri kuyruklayarak, asenkron bir şekilde çalıştırılmasını sağlar. Kullanıcı, bir API isteği gönderdiğinde, Flask bu isteği alır ve RabbitMQ aracılığıyla arka planda bir görev başlatır. Bu, kullanıcının API’dan anında yanıt almasını sağlar ve iş yükünü arka planda işler.

Projenin Oluşturulması ve Yapılandırılması

Aşağıda sırasıyla küçük kod bloklarıyla projeyi oluşturdum. Yapı, kullanıcıdan gelen istekleri RabbitMQ kuyruğuna gönderir ve RabbitMQ consumer’ı ile dinler. Gelen istekler, sırasıyla işlenir, hangi algoritmanın çalıştırılacağı tespit edilir. Dataset içindeki Tag sütunu üzerinden verileri etiketledim ve veri setini normalize ettim. Ardından, ABOD algoritmasını çalıştırdım. Sonuçlar, accuracy, precision, recall ve f1 skorlarını hesaplayarak bir metoda iletilir ve veritabanına kaydedilir. İsterseniz, sonuçları bir webhook'a gönderebilir veya benim gibi veritabanına kaydedebilirsiniz.

Bu yapıyı Docker teknolojisi ile dockerize ettim; Docker, Flask ve RabbitMQ’yu kendi içinde ayağa kaldırır.

1. API Route Tanımlama

Bu kısım, run_algorithm adlı bir API endpoint'ini tanımlar. Kullanıcıdan gelen JSON verisini alır, veriyi kontrol eder ve bir algoritmayı çalıştırmak üzere RabbitMQ kuyruğuna gönderir. Veriler eksikse, 400 hata kodu döner.

2. RabbitMQ Kuyruğuna Gönderme

Bu fonksiyon, RabbitMQ sunucusuna bağlanır ve veriyi kuyruğa eklemek için gerekli bağlantıyı kurar. Bağlantı sırasında hata oluşursa, hata mesajı gönderir.

3. RabbitMQ Consumer

Bu fonksiyon, RabbitMQ ile bağlantı kurar ve algorithm_queue adlı kuyruğu dinlemeye başlar. Gelen mesajlar, callback fonksiyonu aracılığıyla işlenir. callback methodu bir mesaj geldiğinde, ilgili algoritmayı çalıştırır ve başarı durumunu kontrol eder.

4. Algoritma Seçimi

Bu fonksiyon, gelen veri yapısını alır ve ilgili algoritmayı çalıştırır. Algoritma adı, veri seti ve sensör türleri gibi parametreleri kullanarak uygun işlevi çağırır. Böylece, farklı algoritmalar için ortak bir arayüz sunulmuş olur.

5. Veriyi Normalize Etme

Bu fonksiyon, verilen sensör verilerini normalize eder. Min-Max Scaling kullanarak verileri 0-1 aralığına getirir ve yeni bir DataFrame olarak döner.

6. ABOD Anomali Tespiti

Bu fonksiyon, ABOD algoritmasını kullanarak anomali tespiti yapar. Veri setini alır, normalize eder ve model üzerinde çalıştırır. Sonuçları, gerçek etiketlerle karşılaştırarak değerlendirme metriklerini hesaplar.

7. Metrikleri Hesaplama ve Kaydetme

Bu fonksiyon, modelin tahmin performansını değerlendirmek için çeşitli metrikleri hesaplar (doğruluk, hassasiyet, geri çağırma, F1 skoru). Hesaplanan sonuçları döner ve algoritma sonucunu günceller.

8. Dockerize Etme

Flask ve RabbitMQ’yu docker-compose.yml dosyasında yapılandırdım. Flask uygulamasının ve RabbitMQ consumer’ının aynı anda çalışabilmesi için bir Dockerfile hazırladım; bu dosyada kurulum adımlarını belirttim. Uygulamayı başlatmak için de start.sh adlı bir betik yazdım. Bu betik, hem Flask uygulamasını hem de RabbitMQ consumer'ını aynı anda çalıştırarak projenin sorunsuz bir şekilde ayağa kalkmasını sağlıyor. Bu sayede, tüm yapı Docker ile kolayca yönetilebilir hale geliyor.

Geliştirdiğim proje, daha kapsamlı olup içerisinde birçok algoritma barındırmaktadır. Daha ayrıntılı incelemek isterseniz, IIML DataSoft Python API reposuna göz atabilirsiniz.

Yazımı okuduğunuz için teşekkür ederim, umarım sizin için yararlı olmuştur 🙂

İyi günler, iyi çalışmalar 🤖

--

--