Peningkatan Kelajuan 31.8x Dengan Hanya Satu Perubahan Fail

Saya menguji saluran paip pengambilan RAG dan menemui satu hambatan (bottleneck): satu dokumen mengambil masa 50 saat untuk diproses.

CPU saya tidak melakukan apa-apa. Aplikasi tersebut tidak melakukan pengiraan atau logik; ia hanya menunggu permintaan HTTP selesai sebelum melancarkan permintaan seterusnya.

Saya menulis semula modul embedding untuk berjalan secara asinkronus. Masa larian menurun daripada 49.61 saat kepada 1.56 saat—tanpa sebarang perubahan infrastruktur.

Butiran Ujian

  • Model: Amazon Titan Text Embeddings V2 (AWS Bedrock)
  • Set data: 33 cebisan teks
  • Wilayah: us-east-1

Keputusan

  • Berurutan (Sequential): 49.61 s
  • Serentak (Concurrent): 1.56 s
  • Peningkatan Kelajuan: 31.8×

Mengapa ia berkesan Kod berurutan menghantar permintaan dan menyekat (blocks) sehingga ia kembali, dan proses ini berulang untuk setiap cebisan. Dengan 33 cebisan pada 1.5 s setiap satu, anda membazirkan ~50 s.

Kod asinkronus menghantar semua permintaan secara serentak; jumlah masa adalah sama dengan permintaan tunggal yang paling perlahan.

Impak Skalabiliti

  • 31 cebisan: 49.61 s → 1.56 s
  • 100 cebisan: ~160 s → ~3 s
  • 500 cebisan: ~800 s → ~5 s
  • 1,000 cebisan: ~1,600 s → ~10 s

Tip untuk saluran paip anda

  • Cari masa terbiar (idle time). Jangan tambah perkakasan jika kod anda hanya menunggu rangkaian.
  • Patuhi had kadar (rate limits) AWS Bedrock. Gunakan asyncio.Semaphore untuk mengehadkan permintaan serentak.
  • Utamakan perpustakaan (library) bukan-menyekat (non-blocking). Tukar daripada boto3 kepada aioboto3 atau bungkus panggilan dengan asyncio.to_thread().

Mengubah satu fail sahaja telah menghapuskan hambatan tersebut. Usaha rendah. Impak tinggi.

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

Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi