ML Veri Hattı Performans Optimizasyonu
Yoğun özellik üretimi yapan bir ML hattını vektörleştirilmiş işlemler, matris tabanlı hesaplama ve bellek farkındalığı olan dönüşümler etrafında yeniden düzenledim.
Süre
0dk -> 4dk
Uçtan uca veri hattı
Satır
0M
Özellik hesaplama ölçeği
Veri
~1 GB
Tabular iş yükü
Hızlanma
0x
İterasyon hızı
Problem
Çalışma süresi ve bellek baskısı iterasyonu yavaş, maliyetli ve üretim benzeri veri boyutlarında ölçeklenmesi zor hale getiriyordu.
Zorluk
Veri hattı tekrarlanan veri çerçevesi işlemleri, Python döngüleri, gereksiz ara nesneler ve verinin yapısına uymayan hesaplama yolları içeriyordu.
Mimari
Parçalar nasıl bir araya geliyor?
Optimize edilen akış özellik dönüşümlerini toplu işler, satır bazlı döngüleri NumPy/Pandas vektörleştirmesiyle değiştirir, bağımsız hesaplamaları paralelleştirir ve geçici bellek ayırmalarını kontrol eder.
Mimari Görünüm
Sistem yapısı ve karar akışı
Python döngüleri
Interpreter maliyeti
Kopyalar
Bellek baskısı
Tekrarlı join'ler
Gereksiz iş yükü
Toplu işlenmeyen özellikler
Yavaş çıkarım
Veri Seti / Girdiler
- Yaklaşık 1 GB tabular veri ve özellik üretimi/tahmin adımlarından geçen 3 milyon satır.
Teknik Kararlar
- Önce profil çıkardım, sonra en yoğun hesaplama yollarını optimize ettim.
- Satır seviyesindeki Python işlemlerini vektörleştirilmiş NumPy/Pandas dönüşümleriyle değiştirdim.
- Tekrarlanan özellik hesaplamalarını toplu işledim ve gereksiz ara veri çerçevelerini kaldırdım.
- Paralelliği yalnızca bağımsız iş yükleri ve net bellek sınırları için kullandım.
Uygulama Detayları
- Tekrarlanan döngüleri matris odaklı işlemlere dönüştürdüm.
- Veri çerçevesi kopyalarını ve geçici nesne büyümesini azalttım.
- Hesaplamayı C destekli array işlemlerine yaklaştırdım.
- Kritik özellik kolonları için çıktı eşdeğerliği kontrolleri tuttum.
Metrikler / Sonuçlar
- Model davranışını koruyarak yaklaşık 1 GB ve 3 milyon satırlık veri üzerinde uçtan uca süreyi 40 dakikadan 4 dakikaya indirdim.
Çıkarımlar
- Performans optimizasyonu çoğu zaman modelden önce veri düzeni problemidir.
- Bellek şişmesi pratik veri çerçevesi zincirlerinin içinde görünmeden büyüyebilir.
- Küçük Python işlemleri milyonlarca kez tekrarlandığında pahalı hale gelir.
Gelecek İyileştirmeler
- CI sürecine otomatik profiling snapshot'ları eklemek.
- Belleği aşan iş yükleri için Polars veya DuckDB denemek.
- Üretim koşularında maksimum bellek kullanımını takip etmek.