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
boto3zuaioboto3oder umschließe Aufrufe mitasyncio.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
