LLM çıkarım motorları gibi GPT-4 ve Claude, otoregresif bir kodlama süreci kullanarak metin oluşturur: bir token üretilir, girişe eklenir ve bir sonraki token üretilir. Bu döngü son token üretilene kadar devam eder. Sonuç olarak, bir cevabın içindeki token sayısı, trải nghiệm edilen toplam gecikme ile doğrudan ilişkilidir.
Beş farklı soruyla karşılaştığınızda, onları tek bir mesajda birleştirmek mi yoksa aynı anda birden fazla isteği göndermek mi gerektiğini merak edebilirsiniz. Benchmarks ve ilk prensipler analizi, istekleri paralel bağımsız çağrılara bölmek her zaman daha hızlı bir seçenek olduğunu tutarlı bir şekilde ortaya koyuyor.
LLM'lerin Metin İşleme Şekli: Token-Token Oluşturma
Toplu işleme ve bölme arasındaki hız farklılıklarını anlamak için, LLM'lerin cevaplar oluşturma mekanizmasını anlamak gerekir. Modern LLM'ler, otoregresif bir oluşturma stratejisi kullanır ve bir tokeni bir seferde üretir. Her token üretildikten sonra, mevcut girdi bağlamına eklenir ve model, bu güncellenmiş bağlam temelinde bir sonraki tokeni üretir.
Bu süreç, tüm cevabın tamamlanmasına kadar devam eder. Sonuç olarak:
- 100 tokenlik bir cevap, 100 ardışık çıkarım adımı gerektirir.
- 500 tokenlik bir cevap, 500 ardışık çıkarım adımı gerektirir.
- Toplam cevap uzunluğu, toplam cevap gecikmesini doğrudan belirler.
Birleştirilmiş İstek Ne Kadar Uzunsa, O Kadar Yavaş Olur
Beş bağımsız soruyu, her biri yaklaşık 200 tokenle cevap vermeyi gerektiren, tek bir mesajda birleştirdiğinizi varsayalım:
Aşağıdaki soruları ayrı ayrı cevaplayınız: 1. [soru 1] 2. [soru 2] 3. [soru 3] 4. [soru 4] 5. [soru 5]Arka planda, LLM'nin yaklaşık 1.000 tokenlik (200 token × 5 soru) bir çıktı üretmesi gerekir. Model otoregresif olarak çalıştığından, bu 1.000 token ardışık olarak üretilir - 201. token, ilk 200 token tamamlanana kadar üretilmez.
Bu, önemli bir yavaşlamaya yol açar:
- Toplam gecikme, yaklaşık 1.000 × ortalama token başına üretim zamanına eşittir.
- Sorular arasında bağlam değişimi nedeniyle ek bir yük ortaya çıkar.
- Genişletilmiş anahtar-değer (KV) önbelleği işlemleri, her adımda dikkat hesabını artırır.
- Gerçek çıktı uzunluğu, biçimlendirme, geçiş cümleleri ve diğer öğeler nedeniyle genellikle 1.000 tokeni aşar.
Paralel Bağımsız İstekler: Gecikme, En Yavaş Çağrının Gecikmesine Eşittir
Alternatif olarak, aynı beş soruyu aynı anda beş ayrı istek olarak göndermeyi düşünün:
import asyncio
async def fetch_answer(soru):
"""Tek bir bağımsız LLM isteğini gönder."""
response = await client.text_generation(soru)
return response
async def main():
sorular = [s1, s2, s3, s4, s5]
görevler = [fetch_answer(s) for s in sorular]
sonuçlar = await asyncio.gather(*görevler)
return sonuçlarHer istek, yaklaşık 200 tokenlik bir çıktı üretir. LLM hizmeti yeterli eşzamanlı işlem kapasitesine sahipse - ki modern sağlayıcıların tümü sahiptir - bu beş istek paralel olarak işlenir.
Sonuç olarak, toplam gecikme, yaklaşık:
- 200 × ortalama token başına üretim zamanına eşittir.
- Minimum bağlam değişimi yükü.
- Azaltılmış KV önbelleği işlemleri.
Neden Paralellik Kazanır: GPU'lar Üzerinde Sürekli Toplu İşleme
Beş同时 isteği gönderdiğinizde, bunlar birbirlerinin arkasında sıraya girmeyecekler mi, böylece hız avantajını ortadan kaldırmayacaklar mı? Cevap, modern LLM'leri güçlendirerek çalışan gelişmiş çıkarım motorlarında yatıyor. Bu hizmetler, sürekli toplu işleme olarak bilinen bir strateji uyguluyor.
İşte nasıl çalıştığı:
- Birden fazla bağımsız istek, aynı GPU matris işlemini paylaşıyor.
- GPU'lar, paralel hesaplama görevlerinde exceller.
- Beş farklı istekten tokenleri bir toplu işlemden birine konsolide etmek, bir ileri geçişte aynı anda her istek için bir token üretmeye olanak tanır.
- Dinamik zamanlama...
Yapay zeka özeti
Autoregressive token generation means combined outputs stack latency. Parallel independent requests consistently beat batching by up to 5x — here's how with benchmarks.