Bulut ortamından kenet cihazlara bilgisayarlı görüntü modellerinin dağıtımı artık bir yenilik değil; otonom navigasyon, endüstriyel kalite kontrol ve akıllı gözetim gibi düşük gecikmeli uygulamalar için bir zorunluluktur. Ancak, Jupyter defterindeki eğitilmiş bir modelden kaynak kısıtlamalı bir cihazda sağlam bir çıktı motoruna geçiş süreci karmaşıklıklarla doludur. İşte burada MLOps (Makine Öğrenimi Operasyonları) kritik hale gelir. Bu yazıda, gerçek zamanlı kenet çıktısına özel olarak tasarlanmış, eğitim, nicelleme, dağıtım ve izlemeyi yöneten otomatik bir MLOps hattının nasıl oluşturulacağını keşfedeceğiz.
Kenet Kısıtlamalarının Zorluğu
Bulut çıktısından farklı olarak, kenet cihazları bellek, güç ve hesaplama verimliliği konusunda sıkı kısıtlamalara sahiptir. Bir GPU kümesinde iyi performans gösteren bir model, gecikme artışı veya bellek taşması nedeniyle bir Raspberry Pi veya NVIDIA Jetson Nano üzerinde felaket derecede başarısız olabilir. Bu nedenle, MLOps hattımız dağıtımdan önce model optimizasyonu için özel aşamalar içermelidir; özellikle nicelleme ve format dönüşümü gibi.
Buna çözüm olarak, uçtan uca bir otomasyon stratejisine ihtiyacımız var. Bu, kod ve veri için Sürekli Entegrasyon (CI), yeni verilerle modelleri güncellemek için Sürekli Eğitim (CT) ve optimize edilmiş ürünleri kenet hedeflerine göndermek için Sürekli Dağıtım (CD) içerir.
Otomatik Hattın Oluşturulması
Tekrarlanabilirliği sağlamak için Python tabanlı orkestrasyon (Apache Airflow veya Kubeflow Pipelines gibi) ve konteynerleştirme (Docker) kombinasyonu kullanacağız. Hattımızın temel aşamaları şunlardır:
- Veri Alımı ve Doğrulama: Girdi video akışlarının veya görüntülerinin geçerli olduğundan ve doğru şekilde ön işlemden geçirildiğinden emin olunması.
- Model Eğitimi: Temel modelin (örneğin, YOLOv8, MobileNet) yeni etiketli verilerle yeniden eğitilmesi.
- Nicelleme ve Dönüşüm: Modelin TensorFlow Lite (TFLite) veya ONNX formatına dönüştürülmesi ve boyutu küçültmek ile hızı artırmak için INT8 nicellemesinin uygulanması.
- Kenet Simülatöründe Test: CI döngüsü içinde donanım simülatörlerinde veya gerçek kenet cihazlarında performans testlerinin çalıştırılması.
- Dağıtım: Ürünün OTA (Havadan Güncelleme) güncellemeleri veya bir paket kayıt defteri aracılığıyla cihaz filolarına gönderilmesi.
Pratik Örnek: Python ile Nicellemeyi Otomatikleştirme
Kenet MLOps'undaki en kritik adımlardan biri, önemli bir doğruluk kaybı olmadan kayan noktalı bir modeli sabit noktalı bir formata dönüştürmektir. Aşağıda, bir hata scripti içinde bu süreci otomatikleştirmek için TensorFlow'un yerleşik araçlarını kullanan pratik bir örnek bulunmaktadır. Bu kod parçası, kalibrasyon için temsilci bir veri kümesini nasıl tanımlayacağınızı ve tam tamsayı nicellemesini nasıl çalıştıracağınızı gösterir.
import tensorflow as tf
# 1. Önceden eğitilmiş Keras modelini yükleyin
model = tf.keras.models.load_model('best_cv_model.keras')
# 2. Kalibrasyon için temsilci bir veri kümesi tanımlayın
# Bu veri kümesi, kenet cihazının göreceği gerçek dünya verilerini temsil etmelidir
def representative_data_gen():
for _ in range(100):
# Girdi şeklinin [1, 224, 224, 3] olduğunu varsayalım
input_data = tf.random.normal([1, 224, 224, 3])
yield [input_data]
# 3. TFLite Dönüştürücüyü yapılandırın
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_data_gen
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8 # veya tf.uint8
converter.inference_output_type = tf.int8
# 4. Dönüştür ve Kaydet
tflite_model = converter.convert()
# 5. Dağıtım aşaması için diske yaz
with open('model_quantized.tflite', 'wb') as f:
f.write(tflite_model)
print("Nicelleme tamamlandı. Model kenet dağıtımı için hazır.")
CI/CD Araçlarıyla Entegrasyon
Nicelleme scripti tanımlandıktan sonra, GitHub Actions veya GitLab CI gibi bir CI/CD platformuna entegre edilmelidir. İş akışı, değişiklikler main dalına gönderildiğinde tetiklenir. Hata, ön işleme mantığı üzerinde birim testler çalıştırır, eğitim adımını yürütür (erken aşamalarda hız için potansiyel olarak daha küçük bir veri alt kümesi kullanarak), nicelleme scriptini çalıştırır ve ardından doğruluk düşüşünün tanımlanan bir eşiğin (örneğin, %2) altında kaldığından emin olmak için bir regresyon testi gerçekleştirir.
Dağıtım için mesajlaşma için MQTT veya kenet cihazındaki model dosyasını değiştirmek için doğrudan SSH/Raspberry Pi uzaktan yürütme gibi araçlar kullanabiliriz. İzleme de aynı derecede önemlidir; kenet cihazı, performans metriklerini (FPS, CPU kullanımı) ve doğruluk kayması göstergelerini periyodik olarak merkezi bir panoya göndermelidir.
Sonuç
Kenet cihazlarında gerçek zamanlı bilgisayarlı görüntü için MLOps hatlarını otomatikleştirmek; veri bilimi, yazılım mühendisliği ve donanım optimizasyonunun sorunsuz entegrasyonunu gerektiren çok disiplinli bir zorluktur. Otomatik nicelleme, titiz testler ve akıcı dağıtım iş akışları uygulayarak geliştiriciler, yapay zeka modellerinin sadece doğru olmakla kalmayıp, aynı zamanda üretim ortamlarında da verimli ve güvenilir olduğunu sağlayabilirler. Kenet donanımı gelişmeye devam ettikçe, bu otomatik hatlar ölçeklenebilir, akıllı IoT sistemlerinin omurgası haline gelecektir.