Latency, doorvoer en tokens/seconde

Hoe meet je de werkelijke prestaties van Large Language Models op een objectieve en reproduceerbare manier?

Inleiding

Het meten van de snelheid van Large Language Models (LLM's) verschilt fundamenteel van traditionele webapplicaties. Waar een webserver in milliseconden een volledig HTTP-antwoord retourneert, genereren LLM's tekst token voor token in een iteratief proces. Dit vraagt om gespecialiseerde metrieken en een zorgvuldige meetopzet om appels met peren te vergelijken.

De Kernmetrieken

Om de prestaties van een LLM-endpoint accuraat in kaart te brengen, wordt gekeken naar drie fundamentele pijlers:

TTFT (Time to First Token)

De tijd vanaf het verzenden van de prompt tot het ontvangen van het allereerste gegenereerde token. Dit bepaalt hoe 'responsief' een applicatie aanvoelt voor de eindgebruiker.

Tokens per Seconde (Generatie)

De snelheid waarmee de autoregressieve loop na het eerste token nieuwe tokens produceert. Dit beidt inzicht in de rekenkracht van de onderliggende inferentie-hardware.

Totale Doorvoer (Throughput)

De totale verwerkte workload over tijd, uitgedrukt in totale tokens (input + output) gedeeld door de totale verwerkingstijd inclusief netwerklatency.

Wat beïnvloedt de snelheid?

Verschillende factoren op hardware-, model- en netwerkniveau oefenen direct invloed uit op de gemeten prestaties:

Voorbeeld-meetopzet

Voor een eerlijke en reproduceerbare benchmark is het noodzakelijk om externe variabelen te controleren. Hieronder staat een conceptueel script om gestandaardiseerde metingen uit te voeren via een API.

import time
import requests

def benchmark_endpoint(api_url, payload, api_key, iterations=5):
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
results = []

for i in range(iterations):
start_time = time.perf_counter()
first_token_time = None
total_tokens = 0

response = requests.post(api_url, json=payload, headers=headers, stream=True)

for line in response.iter_lines():
if line:
if first_token_time is None:
first_token_time = time.perf_counter()
# Tel tokens op basis van chunk structuur (provider-specifiek)
total_tokens += 1

end_time = time.perf_counter()

ttft = first_token_time - start_time
total_duration = end_time - start_time
generation_time = total_duration - ttft
tokens_per_sec = total_tokens / generation_time if generation_time > 0 else 0

results.append({
"run": i + 1,
"ttft_sec": ttft,
"tokens_per_sec": tokens_per_sec
})

return results

Vergelijkende Tabel

In onderstaande tabel worden metingen gestructureerd vastgelegd. Let op: de getoonde waarden zijn placeholders en dienen te worden ingevuld aan de hand van werkelijke, gekalibreerde testruns.

Model & Configuratie Input Tokens Output Tokens Gem. TTFT (s) Generatie (tok/s)
[Model A - 8B - FP16] [Placeholder] [Placeholder] [Placeholder] [Placeholder]
[Model B - 70B - INT4] [Placeholder] [Placeholder] [Placeholder] [Placeholder]
[Model C - Serverless API] [Placeholder] [Placeholder] [Placeholder] [Placeholder]