Tek Bir Dosya Değişikliğiyle 31,8x Hızlanma

Bir RAG ingestion pipeline'ını test ettim ve bir darboğaza takıldım: tek bir belgenin işlenmesi 50 saniye sürüyordu.

İşlemcim (CPU) boşta bekliyordu. Uygulama matematiksel bir işlem veya mantıksal bir süreç yürütmüyor; sadece bir sonraki isteği başlatmadan önce bir HTTP isteğinin tamamlanmasını bekliyordu.

Embedding modülünü asenkron çalışacak şekilde yeniden yazdım. Çalışma süresi, herhangi bir altyapı değişikliği yapmadan 49,61 saniyeden 1,56 saniyeye düştü.

Test Detayları

  • Model: Amazon Titan Text Embeddings V2 (AWS Bedrock)
  • Veri Seti: 33 metin parçası (chunk)
  • Bölge: us-east-1

Sonuçlar

  • Ardışık (Sequential): 49,61 s
  • Eşzamanlı (Concurrent): 1,56 s
  • Hızlanma: 31,8x

Neden işe yarıyor? Ardışık kod, bir istek gönderir ve yanıt dönene kadar bekler, bunu her parça için tekrarlar. Her biri 1,5 saniye süren 33 parça ile yaklaşık 50 saniye kaybedersiniz.

Asenkron kod ise tüm istekleri aynı anda başlatır; toplam süre, en yavaş olan tek bir isteğin süresine eşit olur.

Ölçeklendirme etkisi

  • 31 parça: 49,61 s → 1,56 s
  • 100 parça: ~160 s → ~3 s
  • 500 parça: ~800 s → ~5 s
  • 1.000 parça: ~1.600 s → ~10 s

Pipeline'ınız için ipuçları

  • Boşta geçen süreyi takip edin. Eğer kodunuz sadece ağ (network) yanıtını bekliyorsa donanım eklemeyin.
  • AWS Bedrock hız sınırlarına (rate limits) uyun. Eşzamanlı istekleri sınırlamak için bir asyncio.Semaphore kullanın.
  • Bloke etmeyen (non-blocking) kütüphaneleri tercih edin. boto3 yerine aioboto3 kullanın veya çağrıları asyncio.to_thread() ile sarmalayın.

Tek bir dosyayı değiştirmek darboğazı ortadan kaldırdı. Düşük çaba. Yüksek etki.

Kaynak: https://dev.to/edwardyun/318x-speedup-by-changing-one-file-async-embedding-calls-on-aws-bedrock-4l61

İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi