31,8-fache Beschleunigung durch eine einzige Dateiänderung

Ich habe eine RAG-Ingestion-Pipeline getestet und bin auf einen Flaschenhals gestoßen: Die Verarbeitung eines Dokuments dauerte 50 Sekunden.

Meine CPU lief im Leerlauf. Die App führte keine Berechnungen oder Logik aus; sie wartete lediglich darauf, dass eine HTTP-Anfrage abgeschlossen wurde, bevor sie die nächste startete.

Ich habe das Embedding-Modul so umgeschrieben, dass es asynchron läuft. Die Laufzeit sank von 49,61 Sekunden auf 1,56 Sekunden – ohne Änderungen an der Infrastruktur.

Testdetails

  • Modell: Amazon Titan Text Embeddings V2 (AWS Bedrock)
  • Datensatz: 33 Text-Chunks
  • Region: us-east-1

Ergebnisse

  • Sequenziell: 49,61 s
  • Parallel: 1,56 s
  • Beschleunigung: 31,8×

Warum es funktioniert Sequenzieller Code sendet eine Anfrage und blockiert, bis diese zurückkehrt, und wiederholt dies für jeden Chunk. Bei 33 Chunks à 1,5 s verschwendet man ca. 50 s.

Asynchroner Code sendet alle Anfragen gleichzeitig; die Gesamtzeit entspricht der langsamsten einzelnen Anfrage.

Skalierungseffekt

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

Tipps für deine Pipeline

  • Achte auf Leerlaufzeiten. Füge keine Hardware hinzu, wenn dein Code nur auf das Netzwerk wartet.
  • Beachte die Rate Limits von AWS Bedrock. Verwende ein asyncio.Semaphore, um die Anzahl der gleichzeitigen Anfragen zu begrenzen.
  • Bevorzuge nicht-blockierende Bibliotheken. Wechsle von boto3 zu aioboto3 oder umschließe Aufrufe mit asyncio.to_thread().

Die Änderung einer einzigen Datei hat den Flaschenhals beseitigt. Geringer Aufwand. Hohe Wirkung.

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

Optionale Lern-Community: https://t.me/GyaanSetuAi