From 603841412b9552066ade3ac519e3c7b67c22519d Mon Sep 17 00:00:00 2001 From: kvanbezouw Date: Tue, 2 Jun 2026 11:46:20 +0200 Subject: [PATCH] Import part 2 --- grafana/vllm-metrics/image.png | Bin 0 -> 247228 bytes .../README.md | 326 +++++ .../benchmark_config.yaml | 69 + .../benchmark_llm.py | 1193 +++++++++++++++++ .../create_test_dataset.py | 338 +++++ .../requirements.txt | 9 + .../benchmark_results.json | 630 +++++++++ .../config_used.yaml | 25 + 8 files changed, 2590 insertions(+) create mode 100644 grafana/vllm-metrics/image.png create mode 100644 llm-throughput-tests-mindef-metadateren/README.md create mode 100644 llm-throughput-tests-mindef-metadateren/benchmark_config.yaml create mode 100644 llm-throughput-tests-mindef-metadateren/benchmark_llm.py create mode 100644 llm-throughput-tests-mindef-metadateren/create_test_dataset.py create mode 100644 llm-throughput-tests-mindef-metadateren/requirements.txt create mode 100644 llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/benchmark_results.json create mode 100644 llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/config_used.yaml diff --git a/grafana/vllm-metrics/image.png b/grafana/vllm-metrics/image.png new file mode 100644 index 0000000000000000000000000000000000000000..f139d99351d2429618e6307fb267b90f3885fb56 GIT binary patch literal 247228 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ʆlvf;Kai11}~BgFW@C_q`JC3wxpG#1U`n~& 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

1V1bwqI_I{N)Cdj?D}{3ChaFHa545+SLE% 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 XnR;vW7LC*#2zbd#DoRv{8TkJP^-Zz8 literal 0 HcmV?d00001 diff --git a/llm-throughput-tests-mindef-metadateren/README.md b/llm-throughput-tests-mindef-metadateren/README.md new file mode 100644 index 0000000..d20bcf2 --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/README.md @@ -0,0 +1,326 @@ +# LLM Benchmarking Tool + +The following benchmarks were used to 1) measure throughput of configured models, on the available hardware (NVIDIA RTX 6000 PRO GPUs), aswell as to debug connection issues that arised during the configuration of the pipelines. + +Benchmarks were created for qwen 3.5 and gpt oss. Mainly GPT OSS was used during the project (because of throughput and +output quality) + + + +------------------ +# How-to benchmark: + +Benchmark LLM deployments using **batch request patterns** - sends N requests simultaneously to measure concurrent throughput. + + +## Installation + +```bash +pip install -r requirements.txt +``` + +## Dataset Generation (Optional) + +You have **3 input options**: + +### 1. Generated Prompts (Default) +Automatically generates synthetic text to match token counts. + +### 2. Real Conversations +Use conversations from HuggingFace datasets: + +```bash +# Generate conversation dataset (takes ~5 minutes) +python create_test_dataset.py + +# Custom buckets +python create_test_dataset.py --buckets 1000 5000 10000 --chains_per_bucket 64 + +# Output to custom location +python create_test_dataset.py --output data/conversations.json +``` + +This creates a JSON file with real conversations bucketed by token count. The benchmark will cycle through these conversations instead of repeating the same synthetic prompt. + +### 3. Custom Text +Provide your own text directly: + +```bash +# Via CLI +python benchmark_llm.py --text "Your custom text here..." + +# Or in config file +text: "Analyze this large document about..." +``` + +## Quick Start + +### 1. Create Configuration File + +```yaml +endpoint: + url: https://b5cee612-b599-4524-a893-7698c9e75948.services.ubiops.development.vlam.ai + api_key: your-api-key + model_name: your-model + +benchmark: + input_tokens: [1000, 5000, 10000] + batch_sizes: [16, 32, 64, 128] + num_batches: 10 + output_tokens: 256 + dataset: test_conversations.json # Optional: real conversations + text: null # Optional: custom text input + +runtime: + request_timeout: 300 + delay_between_runs: 5 + log_io: false + wait_for_ready: true +``` + +### 2. Run Benchmark + +```bash +python benchmark_llm.py --config benchmark_config.yaml +``` + +### 3. Generate Visualizations + +```bash +python visualize_results.py --input results/results_your-model/benchmark_results.json +``` + +## Usage + +### Configuration File + +```bash +python benchmark_llm.py --config benchmark_config.yaml +``` + +### CLI Arguments + +```bash +# With dataset +python benchmark_llm.py \ + --endpoint_url https://api.example.com/v1 \ + --api_key YOUR_KEY \ + --model_name gpt-4 \ + --input_tokens 1000 5000 10000 \ + --batch_sizes 16 32 64 128 \ + --num_batches 10 \ + --output_tokens 256 \ + --dataset test_conversations.json + +# With custom text +python benchmark_llm.py \ + --endpoint_url https://api.example.com/v1 \ + --api_key YOUR_KEY \ + --model_name gpt-4 \ + --batch_sizes 32 \ + --num_batches 10 \ + --text "Analyze the following document about cloud architecture..." +``` + +## How It Works + +### Batch Execution + +The tool sends batches of N requests **simultaneously**: + +``` +Batch 0: [Req 1, Req 2, ..., Req 32] ← All start at exact same time + [Wait for all to complete] + +Batch 1: [Req 33, Req 34, ..., Req 64] ← All start at exact same time + [Wait for all to complete] +``` + +This ensures: +- All requests in a batch have **identical** `time_created` timestamps +- Concurrent load testing +- Accurate burst performance measurement + +### Request Calculation + +``` +total_requests = num_batches × batch_size +``` + +**Example:** +```yaml +batch_sizes: [32] +num_batches: 10 + +# Result: 10 batches × 32 requests = 320 total requests +# Each batch sends 32 requests simultaneously +``` + +## Key Metrics + +### Throughput +- **Tokens/second** across all requests in a batch +- Measures system's ability to handle concurrent load +- Higher is better + +### Time to First Token (TTFT) +- Latency until first content token appears +- Critical for user experience +- Lower is better + +### Latency Percentiles +- **P50 (median)**: Typical request latency +- **P95**: 95% of requests complete faster +- **P99**: 99% of requests complete faster + +### Batch Metrics +```json +{ + "batch_metrics": { + "num_batches": 10, + "avg_batch_throughput": 2456.78, + "min_batch_throughput": 2301.45, + "max_batch_throughput": 2589.12 + } +} +``` + +## Output Structure + +``` +results/ +└── results_your-model/ + ├── benchmark_results.json # Raw benchmark data + ├── benchmark_io.log # I/O logs (if enabled) + ├── config_used.yaml # Config copy (API key redacted) + ├── throughput.png # Throughput vs batch size + ├── ttft.png # TTFT vs batch size + └── latency_percentiles.png # Latency distribution +``` + +## Configuration Reference + +### Endpoint Configuration + +```yaml +endpoint: + url: string # OpenAI-compatible endpoint URL + api_key: string # API authentication key + model_name: string # Model identifier +``` + +### Benchmark Configuration + +```yaml +benchmark: + input_tokens: list[int] # Token counts to test [1000, 5000, 10000] + batch_sizes: list[int] # Batch sizes to test [16, 32, 64, 128] + num_batches: int # Number of batches per config (default: 10) + output_tokens: int # Max output tokens (default: 256) +``` + +**Understanding batch_sizes:** +- `batch_sizes: [16]` → Sends 16 requests simultaneously +- `batch_sizes: [32]` → Sends 32 requests simultaneously +- `batch_sizes: [16, 32, 64]` → Tests 3 different batch sizes + +### Runtime Configuration + +```yaml +runtime: + request_timeout: int # Timeout per request in seconds (default: 300) + delay_between_runs: int # Delay between configs in seconds (default: 5) + log_io: bool # Enable I/O logging (default: false) + wait_for_ready: bool # Wait for model init (default: true) + max_init_retries: int # Max init attempts (default: 10) + init_retry_delay: int # Delay between init attempts (default: 30) +``` + +## Example Output + +``` +Starting benchmark: 10 batches × 32 requests/batch = 320 total +Input: 5000 tokens, Output: 256 tokens +============================================================ + +Batch 0: 32/32 successful, 12.34s, 2456.78 tok/s +Batch 1: 32/32 successful, 12.45s, 2401.23 tok/s +Batch 2: 32/32 successful, 12.56s, 2389.45 tok/s +... + +✓ Benchmark complete in 125.67s + Success: 100% (320/320) + P95 Latency: 13.45s + Throughput: 2428.56 tokens/s + Avg Batch Throughput: 2429.01 tokens/s +``` + +## Use Cases + +### 1. Finding Optimal Batch Size + +Test multiple batch sizes to find the sweet spot: + +```yaml +batch_sizes: [16, 32, 64, 128, 256] +num_batches: 10 +``` + +Compare the `throughput.png` to see where throughput peaks. + +### 2. Stress Testing + +Test maximum burst capacity: + +```yaml +batch_sizes: [256] +num_batches: 5 +``` + +Sends 256 simultaneous requests per batch. + +### 3. Performance Profiling + +Test different input sizes at various batch sizes: + +```yaml +input_tokens: [1000, 2500, 5000, 10000] +batch_sizes: [16, 32, 64, 128] +``` + +Comprehensive performance matrix across configurations. + +## Advanced Usage + +### Enable I/O Logging + +Log all input prompts and outputs for debugging: + +```bash +python benchmark_llm.py --config benchmark_config.yaml +# Set log_io: true in config +``` + +Or: + +```bash +python benchmark_llm.py --log_io ... +``` + +Results saved to `benchmark_io.log`. + +### Skip Model Initialization + +If model is already warm: + +```bash +python benchmark_llm.py --config benchmark_config.yaml --skip_init_wait +``` + +### Custom Timeout + +For large batches or slow responses: + +```bash +python benchmark_llm.py --request_timeout 600 ... +``` diff --git a/llm-throughput-tests-mindef-metadateren/benchmark_config.yaml b/llm-throughput-tests-mindef-metadateren/benchmark_config.yaml new file mode 100644 index 0000000..26aa238 --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/benchmark_config.yaml @@ -0,0 +1,69 @@ +endpoint: + # internal litellm ubiops + #url: https://46e73bba-0ed9-4853-b2b0-d4509aaab06b.services.external.0a71m37v.ubiops.io/v1 + #api_key: + #model_name: openai-gpt-oss-120b-max-16 + + #url: https://46e73bba-0ed9-4853-b2b0-d4509aaab06b.services.external.0a71m37v.ubiops.io/v1 + #api_key: + #model_name: openai-gpt-oss-120b + + url: https://46e73bba-0ed9-4853-b2b0-d4509aaab06b.services.external.0a71m37v.ubiops.io/v1 + api_key: + model_name: openai-gpt-oss-120b-2x + + #url: https://b60dd657-9ce2-4ba0-ad45-754b5be29238.services.external.0a71m37v.ubiops.io/v1 + #api_key: + #model_name: openai/gpt-oss-120b + + + # staging litellm + #url: https://f1dfa3fc-3314-4d49-be06-98bfd3d1f5fd.services.staging.ubiops.dev/v1 + #api_key: + #model_name: llama-1b + + # staging vllm + #url: https://dde9ea35-6a02-4242-a3f3-5a7e7e29e7a7.services.staging.ubiops.dev/v1 + #api_key: + #model_name: meta-llama/Llama-3.2-1B-Instruct +benchmark: + # Input token counts to testfhtt + input_tokens: [50000] + + # Batch sizes to test (number of simultaneous requests per batch) + # Each batch sends N requests at the exact same time + batch_sizes: [64] + + num_batches: 1 + # Maximum output tokens per request + output_tokens: 1024 + + # Optional: Path to conversation dataset JSON file + # Generate with: python create_test_dataset.py + # If not provided, uses synthetic prompts + dataset: test_conversations.json # or "test_conversations.json" + + # Optional: Custom text to use as input for all requests + # Uses the same text for every request (ignores input_tokens) + # Priority: text > dataset > generated prompts + # Example: "Analyze this document about machine learning..." + text: null + +runtime: + # Timeout for each request (seconds) + request_timeout: 1800 + + # Delay between benchmark runs (seconds) + delay_between_runs: 5 + + # Enable detailed I/O logging (input prompts + outputs) + log_io: true + + # Wait for model initialization before starting + wait_for_ready: true + + # Maximum initialization check attempts + max_init_retries: 10 + + # Delay between initialization checks (seconds) + init_retry_delay: 30 diff --git a/llm-throughput-tests-mindef-metadateren/benchmark_llm.py b/llm-throughput-tests-mindef-metadateren/benchmark_llm.py new file mode 100644 index 0000000..278de96 --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/benchmark_llm.py @@ -0,0 +1,1193 @@ + +""" +LLM Benchmarking Tool + +Benchmarks LLM deployments via OpenAI-compatible endpoints with async concurrency. +Supports YAML config files and CLI arguments. +""" + +import asyncio +import time +import argparse +import json +import yaml +import logging +import httpx +from pathlib import Path +from datetime import datetime +from dataclasses import dataclass, asdict +from typing import List, Dict, Optional, Tuple +from openai import AsyncOpenAI, RateLimitError + +# ============================================================================ +# CONSTANTS +# ============================================================================ + +TOKEN_TO_CHAR_RATIO = 7 +CONFIDENCE_95_Z_SCORE = 1.96 +MIN_HTTP_CONNECTIONS = 200 +CONNECTION_MULTIPLIER = 2 +TOKEN_VALIDATION_THRESHOLD = 100 +SHUTDOWN_SENTINEL = object() + +# ============================================================================ +# DATA MODELS +# ============================================================================ + +@dataclass +class BenchmarkConfig: + """Configuration for a single benchmark run.""" + input_tokens: int + batch_size: int + num_batches: int + output_tokens: int + + +@dataclass +class RequestResult: + """Results from a single request.""" + total_tokens: int + content_tokens: int + reasoning_tokens: int + elapsed_time: float + time_to_first_token: float + prompt_tokens: int # Actual input tokens from API response + start_time: float + end_time: float + success: bool = True + error_message: Optional[str] = None + batch_id: Optional[int] = None # Batch identifier if using batching + requests_in_batch: Optional[int] = None # Number of requests in this batch + + @property + def tokens_per_second(self) -> float: + """Calculate tokens per second for this request.""" + return self.total_tokens / self.elapsed_time if self.elapsed_time > 0 else 0 + + @property + def content_tokens_per_second(self) -> float: + return self.content_tokens / self.elapsed_time if self.elapsed_time > 0 else 0 + + +# ============================================================================ +# LOGGING SETUP +# ============================================================================ + +def setup_logging(results_dir: Path, log_io: bool = False) -> Optional[logging.Logger]: + """Setup logging with optional I/O logging.""" + # Configure root logger for console output + logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[ + logging.StreamHandler() # Ensure console output + ] + ) + # logging.getLogger("httpx").setLevel(logging.DEBUG) + # logging.getLogger("httpcore").setLevel(logging.DEBUG) + + if not log_io: + return None + + # Setup separate I/O logger for detailed request/response logging + io_logger = logging.getLogger('io_logger') + io_logger.handlers.clear() + + io_log_path = results_dir / 'benchmark_io.log' + io_handler = logging.FileHandler(io_log_path) + io_handler.setFormatter(logging.Formatter('%(asctime)s - %(message)s')) + io_logger.addHandler(io_handler) + io_logger.setLevel(logging.INFO) + io_logger.propagate = False + + logging.info(f"I/O logging enabled: {io_log_path}") + + return io_logger + + +# ============================================================================ +# PROMPT GENERATION +# ============================================================================ + +def generate_prompt(target_tokens: int) -> str: + """ + Generate a prompt with approximately the target number of tokens. + + Parameters: + target_tokens: Target number of tokens for the generated prompt + + Returns: + Generated prompt string + """ + chars_needed = target_tokens * TOKEN_TO_CHAR_RATIO + + base_text = ( + "You are an AI assistant analyzing complex systems. Consider the following " + "context about modern computing, AI architectures, distributed systems, " + "cloud infrastructure, ML model deployment, data pipelines, scalability, " + "microservices, containerization, Kubernetes, monitoring, observability, " + "performance optimization, security, cost optimization, and emerging AI/ML trends. " + ) + + base_len = len(base_text) + full_reps = chars_needed // base_len + remainder = chars_needed % base_len + + expanded_text = base_text * full_reps + base_text[:remainder] + question = "\n\nBased on the context above, provide a comprehensive analysis." + + return expanded_text + question + + +def load_conversation_dataset(dataset_path: str) -> dict: + """Load pre-generated conversation dataset from JSON file.""" + try: + with open(dataset_path, 'r', encoding='utf-8') as f: + dataset = json.load(f) + + logging.info(f"Loaded conversation dataset from {dataset_path}") + + # Log bucket information + for bucket, conversations in dataset.items(): + logging.info(f" Bucket {bucket}: {len(conversations)} conversations") + + return dataset + except FileNotFoundError: + logging.error(f"Dataset file not found: {dataset_path}") + logging.error("Generate dataset first using: python create_test_dataset.py") + raise + except json.JSONDecodeError as e: + logging.error(f"Invalid JSON in dataset file: {e}") + raise + + +def get_conversation_for_tokens( + dataset: dict, + target_tokens: int, + request_index: int +) -> list[dict]: + """ + Get a conversation from the dataset for the given token count. + + Uses request_index to cycle through available conversations. + """ + bucket_key = str(target_tokens) + + if bucket_key not in dataset: + # Find closest bucket + available_buckets = [int(k) for k in dataset.keys()] + closest_bucket = min(available_buckets, key=lambda x: abs(x - target_tokens)) + bucket_key = str(closest_bucket) + logging.debug(f"No exact bucket for {target_tokens} tokens, using {closest_bucket}") + + conversations = dataset[bucket_key] + + if not conversations: + raise ValueError(f"No conversations available for bucket {bucket_key}") + + # Cycle through conversations using request index + conversation_idx = request_index % len(conversations) + conversation = conversations[conversation_idx] + + messages = list(conversation["messages"]) + + # Ensure the conversation ends with a user message so the API can generate a response + if messages and messages[-1].get("role") == "assistant": + messages.append({"role": "user", "content": "Please continue."}) + + return messages + + +# ============================================================================ +# REQUEST PROCESSING +# ============================================================================ + +async def process_stream(stream, log_io: bool, io_logger, request_id: int) -> Tuple: + """Process streaming response and capture metrics.""" + first_token_time = None + output_text = "" + reasoning_text = "" + + completion_tokens = 0 + prompt_tokens = 0 + content_tokens = 0 + reasoning_tokens = 0 + + try: + async for chunk in stream: + if hasattr(chunk, 'choices') and chunk.choices: + delta = chunk.choices[0].delta + + if hasattr(delta, 'reasoning_content') and delta.reasoning_content: + if log_io: + reasoning_text += delta.reasoning_content + + if hasattr(delta, 'content') and delta.content: + if first_token_time is None: + first_token_time = time.time() + output_text += delta.content + + # Get token counts from API + if hasattr(chunk, 'usage') and chunk.usage: + if hasattr(chunk.usage, 'completion_tokens'): + completion_tokens = chunk.usage.completion_tokens + if hasattr(chunk.usage, 'prompt_tokens'): + prompt_tokens = chunk.usage.prompt_tokens + + if hasattr(chunk.usage, 'completion_tokens_details') and chunk.usage.completion_tokens_details: + details = chunk.usage.completion_tokens_details + if hasattr(details, 'reasoning_tokens'): + reasoning_tokens = details.reasoning_tokens + if hasattr(details, 'content_tokens'): + content_tokens = details.content_tokens + + except Exception as e: + logging.error(f"Error processing stream: {e}") + raise + + # Fallback calculation + if content_tokens == 0 and reasoning_tokens == 0 and completion_tokens > 0: + content_tokens = completion_tokens + elif reasoning_tokens == 0 and content_tokens > 0 and content_tokens < completion_tokens: + reasoning_tokens = completion_tokens - content_tokens + elif content_tokens == 0 and reasoning_tokens > 0 and completion_tokens > reasoning_tokens: + content_tokens = completion_tokens - reasoning_tokens + + return ( + first_token_time, + completion_tokens, + prompt_tokens, + content_tokens, + reasoning_tokens, + output_text, + reasoning_text + ) + + +async def make_request( + client: AsyncOpenAI, + config: BenchmarkConfig, + model_name: str, + request_timeout: int, + log_io: bool = False, + io_logger: Optional[logging.Logger] = None, + request_id: Optional[int] = None, + dataset: Optional[dict] = None, + text_content: Optional[str] = None, + stream: bool = True +) -> Optional[RequestResult]: + """Make a single request to the model.""" + start_time = time.time() + + # Determine input source priority: text_content > dataset > generated + if text_content is not None: + # Use provided text directly (ignores input_tokens, uses actual text length) + messages = [{'role': 'user', 'content': text_content}] + elif dataset is not None: + try: + messages = get_conversation_for_tokens(dataset, config.input_tokens, request_id) + except (ValueError, KeyError) as e: + logging.warning(f"Failed to get conversation from dataset: {e}. Falling back to generated prompt.") + prompt = generate_prompt(config.input_tokens) + messages = [{'role': 'user', 'content': prompt}] + else: + # Generate synthetic prompt + prompt = generate_prompt(config.input_tokens) + messages = [{'role': 'user', 'content': prompt}] + + if log_io and io_logger: + io_logger.info(f"\n{'='*80}") + io_logger.info(f"REQUEST {request_id} - Target: {config.input_tokens} tokens") + io_logger.info(f"Model: {model_name}, Batch size: {config.batch_size}") + if text_content: + io_logger.info(f"Source: Custom text") + elif dataset: + io_logger.info(f"Source: Conversation dataset") + else: + io_logger.info(f"Source: Generated prompt") + io_logger.info(f"{'='*80}") + io_logger.info(f"MESSAGES:\n{json.dumps(messages, indent=2)}") + io_logger.info(f"{'-'*80}") + + try: + stream = False + print(f"Streaming: {stream}") + + if stream: + stream_obj = await client.chat.completions.create( + model=model_name, + messages=messages, + max_tokens=config.output_tokens, + stream=True, + stream_options={"include_usage": True} + ) + + result = await asyncio.wait_for( + process_stream(stream_obj, log_io, io_logger, request_id), + timeout=request_timeout + ) + + ( + first_token_time, + completion_tokens, + prompt_tokens, + content_tokens, + reasoning_tokens, + output_text, + reasoning_text + ) = result + + #logging.warning(f"[STREAM RESPONSE] {output_text}") + + end_time = time.time() + elapsed_time = end_time - start_time + ttft = first_token_time - start_time if first_token_time else elapsed_time + else: + response = await asyncio.wait_for( + client.chat.completions.create( + model=model_name, + messages=messages, + max_tokens=config.output_tokens, + stream=False + ), + timeout=request_timeout + ) + # logging.warning(f"Response object: {response}") + + end_time = time.time() + elapsed_time = end_time - start_time + ttft = elapsed_time # No first-token event in non-streaming mode + + completion_tokens = response.usage.completion_tokens if response.usage else 0 + prompt_tokens = response.usage.prompt_tokens if response.usage else 0 + content_tokens = completion_tokens + reasoning_tokens = 0 + output_text = response.choices[0].message.content or "" if response.choices else "" + reasoning_text = "" + + if hasattr(response.usage, 'completion_tokens_details') and response.usage.completion_tokens_details: + details = response.usage.completion_tokens_details + if hasattr(details, 'reasoning_tokens') and details.reasoning_tokens: + reasoning_tokens = details.reasoning_tokens + content_tokens = completion_tokens - reasoning_tokens + + if log_io and io_logger: + if reasoning_text: + io_logger.info(f"REASONING ({reasoning_tokens} tokens):\n{reasoning_text}") + io_logger.info(f"{'-'*80}") + io_logger.info(f"CONTENT ({content_tokens} tokens):\n{output_text}") + io_logger.info(f"{'-'*80}") + io_logger.info(f"TTFT: {ttft:.3f}s | Latency: {elapsed_time:.3f}s") + io_logger.info(f"Throughput: {completion_tokens/elapsed_time:.2f} tok/s") + io_logger.info(f"Token accuracy: target={config.input_tokens}, actual={prompt_tokens}") + io_logger.info(f"{'='*80}\n") + + # Validate token counts + if content_tokens == 0: + logging.warning("Request completed but got no content tokens") + return RequestResult( + total_tokens=completion_tokens, + content_tokens=content_tokens, + reasoning_tokens=reasoning_tokens, + elapsed_time=elapsed_time, + time_to_first_token=ttft, + prompt_tokens=prompt_tokens, + start_time=start_time, + end_time=end_time, + success=False, + error_message="No content tokens generated" + ) + + token_diff = abs(prompt_tokens - config.input_tokens) + if token_diff > TOKEN_VALIDATION_THRESHOLD: + logging.warning( + f"Token count difference: target={config.input_tokens}, " + f"actual={prompt_tokens}, diff={token_diff}" + ) + + return RequestResult( + total_tokens=completion_tokens, + content_tokens=content_tokens, + reasoning_tokens=reasoning_tokens, + elapsed_time=elapsed_time, + time_to_first_token=ttft, + prompt_tokens=prompt_tokens, + start_time=start_time, + end_time=end_time, + success=True + ) + + except asyncio.TimeoutError: + end_time = time.time() + logging.warning(f"Request {request_id} timed out after {request_timeout}s") + if log_io and io_logger: + io_logger.info(f"REQUEST {request_id} - TIMEOUT after {request_timeout}s\n") + return RequestResult( + total_tokens=0, + content_tokens=0, + reasoning_tokens=0, + elapsed_time=request_timeout, + time_to_first_token=request_timeout, + prompt_tokens=config.input_tokens, + start_time=start_time, + end_time=end_time, + success=False, + error_message=f"Timeout after {request_timeout}s" + ) + + except RateLimitError as e: + end_time = time.time() + elapsed = end_time - start_time + error_msg = f"429 Rate Limit: {str(e)}" + logging.warning(f"Request {request_id} got 429 (rate limited) after {elapsed:.3f}s") + if log_io and io_logger: + io_logger.info(f"REQUEST {request_id} - 429 RATE LIMITED after {elapsed:.3f}s\n") + return RequestResult( + total_tokens=0, + content_tokens=0, + reasoning_tokens=0, + elapsed_time=elapsed, + time_to_first_token=0, + prompt_tokens=config.input_tokens, + start_time=start_time, + end_time=end_time, + success=False, + error_message=error_msg + ) + + except Exception as e: + end_time = time.time() + elapsed = end_time - start_time + error_msg = f"{type(e).__name__}: {str(e)}" + logging.error(f"Request {request_id} error after {elapsed:.3f}s: {error_msg}", exc_info=True) + if log_io and io_logger: + io_logger.info(f"REQUEST {request_id} - ERROR after {elapsed:.3f}s: {error_msg}\n") + return RequestResult( + total_tokens=0, + content_tokens=0, + reasoning_tokens=0, + elapsed_time=elapsed, + time_to_first_token=0, + prompt_tokens=config.input_tokens, + start_time=start_time, + end_time=end_time, + success=False, + error_message=error_msg + ) + + +async def make_batch_request( + client: AsyncOpenAI, + config: BenchmarkConfig, + model_name: str, + request_timeout: int, + batch_size: int, + batch_id: int, + log_io: bool = False, + io_logger: Optional[logging.Logger] = None, + dataset: Optional[dict] = None, + text_content: Optional[str] = None, + stream: bool = True +) -> List[RequestResult]: + """ + Make a batch of requests simultaneously and return results. + + This sends multiple independent requests at the exact same time + and measures their collective performance. + """ + batch_start_time = time.time() + + if log_io and io_logger: + io_logger.info(f"\n{'#'*80}") + io_logger.info(f"BATCH {batch_id} - Sending {batch_size} requests") + io_logger.info(f"Model: {model_name}, Input: {config.input_tokens} tokens") + io_logger.info(f"{'#'*80}") + + # Create all requests simultaneously + tasks = [] + for i in range(batch_size): + request_id = batch_id * batch_size + i + task = make_request( + client=client, + config=config, + model_name=model_name, + request_timeout=request_timeout, + log_io=log_io, + io_logger=io_logger, + request_id=request_id, + dataset=dataset, + text_content=text_content, + stream=stream + ) + tasks.append(task) + + # Execute all requests simultaneously + results = await asyncio.gather(*tasks) + + batch_end_time = time.time() + batch_elapsed = batch_end_time - batch_start_time + + # Add batch metadata to results + enhanced_results = [] + for result in results: + if result: + result.batch_id = batch_id + result.requests_in_batch = batch_size + enhanced_results.append(result) + + successful = sum(1 for r in enhanced_results if r.success) + total_tokens = sum(r.total_tokens for r in enhanced_results if r.success) + batch_throughput = total_tokens / batch_elapsed if batch_elapsed > 0 else 0 + + if log_io and io_logger: + io_logger.info(f"\n{'#'*80}") + io_logger.info(f"BATCH {batch_id} COMPLETE") + io_logger.info(f" Duration: {batch_elapsed:.3f}s") + io_logger.info(f" Successful: {successful}/{batch_size}") + io_logger.info(f" Batch Throughput: {batch_throughput:.2f} tokens/s") + io_logger.info(f"{'#'*80}\n") + + logging.info( + f"Batch {batch_id}: {successful}/{batch_size} successful, " + f"{batch_elapsed:.2f}s, {batch_throughput:.2f} tok/s" + ) + + return enhanced_results + + +# ============================================================================ +# STATISTICS CALCULATION +# ============================================================================ + +def calculate_statistics(results: List[RequestResult], config: BenchmarkConfig) -> Dict: + """Calculate aggregate statistics from benchmark results.""" + import numpy as np + + successful = [r for r in results if r.success] + failed = [r for r in results if not r.success] + + if not successful: + return {'success_rate': 0, 'error': 'No successful requests'} + + success_rate = len(successful) / len(results) * 100 + + # Latency stats + latencies = [r.elapsed_time for r in successful] + avg_lat = float(np.mean(latencies)) + std_lat = float(np.std(latencies)) + margin = CONFIDENCE_95_Z_SCORE * std_lat / np.sqrt(len(successful)) + + # TTFT stats + ttft_values = [r.time_to_first_token for r in successful if r.time_to_first_token] + + # Throughput calculation + actual_start = min(r.start_time for r in successful) + actual_end = max(r.end_time for r in successful) + wall_time = actual_end - actual_start + + total_output_tokens = sum(r.total_tokens for r in successful) + total_content_tokens = sum(r.content_tokens for r in successful) + + concurrent_throughput = total_output_tokens / wall_time if wall_time > 0 else 0 + content_throughput = total_content_tokens / wall_time if wall_time > 0 else 0 + + # Efficiency + per_request_throughputs = [r.tokens_per_second for r in successful] + avg_per_request = float(np.mean(per_request_throughputs)) + theoretical_max = config.batch_size * avg_per_request + efficiency = min((concurrent_throughput / theoretical_max * 100) if theoretical_max > 0 else 0, 100) + + # Batch metrics + batch_metrics = None + batch_ids = [r.batch_id for r in successful if r.batch_id is not None] + if batch_ids: + unique_batches = set(batch_ids) + batch_sizes = {} + batch_throughputs = {} + + for batch_id in unique_batches: + batch_results = [r for r in successful if r.batch_id == batch_id] + if batch_results: + batch_start = min(r.start_time for r in batch_results) + batch_end = max(r.end_time for r in batch_results) + batch_time = batch_end - batch_start + batch_tokens = sum(r.total_tokens for r in batch_results) + + batch_sizes[batch_id] = len(batch_results) + batch_throughputs[batch_id] = batch_tokens / batch_time if batch_time > 0 else 0 + + throughput_values = list(batch_throughputs.values()) + batch_metrics = { + 'num_batches': len(unique_batches), + 'avg_batch_size': round(float(np.mean(list(batch_sizes.values()))), 2), + 'avg_batch_throughput': round(float(np.mean(throughput_values)), 2), + 'min_batch_throughput': round(float(np.min(throughput_values)), 2), + 'max_batch_throughput': round(float(np.max(throughput_values)), 2), + } + + stats_dict = { + 'config': { + 'input_tokens': config.input_tokens, + 'output_tokens': config.output_tokens, + 'batch_size': config.batch_size, + 'num_batches': config.num_batches, + 'total_requests': len(results), + 'actual_input_tokens': round(float(np.mean([r.prompt_tokens for r in successful]))) + }, + 'success_metrics': { + 'success_rate': round(success_rate, 2), + 'successful_requests': len(successful), + 'failed_requests': len(failed) + }, + 'latency': { + 'mean': round(avg_lat, 3), + 'std': round(std_lat, 3), + 'min': round(float(np.min(latencies)), 3), + 'max': round(float(np.max(latencies)), 3), + 'p50': round(float(np.percentile(latencies, 50)), 3), + 'p95': round(float(np.percentile(latencies, 95)), 3), + 'p99': round(float(np.percentile(latencies, 99)), 3), + 'ci_95_lower': round(avg_lat - margin, 3), + 'ci_95_upper': round(avg_lat + margin, 3) + }, + 'ttft': { + 'mean': round(float(np.mean(ttft_values)), 3) if ttft_values else None, + 'std': round(float(np.std(ttft_values)), 3) if ttft_values else None, + 'p50': round(float(np.percentile(ttft_values, 50)), 3) if ttft_values else None, + 'p90': round(float(np.percentile(ttft_values, 90)), 3) if ttft_values else None + }, + 'tokens': { + 'total_generated': total_output_tokens, + 'content_tokens': total_content_tokens, + 'reasoning_tokens': sum(r.reasoning_tokens for r in successful), + 'avg_per_request': round(total_output_tokens / len(successful), 2) + }, + 'throughput': { + 'concurrent_total_tps': round(concurrent_throughput, 2), + 'concurrent_content_tps': round(content_throughput, 2), + 'requests_per_second': round(len(successful) / wall_time, 2) if wall_time > 0 else 0, + 'actual_wall_time': round(wall_time, 3), + 'efficiency_percent': round(efficiency, 2) + } + } + + # Add batch metrics if available + if batch_metrics: + stats_dict['batch_metrics'] = batch_metrics + + return stats_dict + + +# ============================================================================ +# HTTP CLIENT +# ============================================================================ + +def create_http_client(concurrent_requests: int, request_timeout: int) -> httpx.AsyncClient: + """Create HTTP client configured for high concurrency.""" + max_connections = max(concurrent_requests * CONNECTION_MULTIPLIER, MIN_HTTP_CONNECTIONS) + + logging.info(f"Creating HTTP client with max_connections={max_connections}") + + return httpx.AsyncClient( + # http2=True, + limits=httpx.Limits( + max_keepalive_connections=max_connections, + max_connections=max_connections, + keepalive_expiry=1800 + ), + timeout=httpx.Timeout( + timeout=request_timeout, + connect=1800.0, + read=request_timeout, + write=1800.0, + pool=5.0 + ) + ) + + +# ============================================================================ +# MODEL INITIALIZATION +# ============================================================================ + +async def wait_for_model( + endpoint_url: str, + api_key: str, + model_name: str, + max_retries: int = 10, + retry_delay: int = 30 +) -> bool: + """Wait for model to be ready.""" + logging.info(f"Waiting for model '{model_name}' to initialize...") + + http_client = create_http_client(1, 60) + client = AsyncOpenAI(base_url=endpoint_url, api_key=api_key, http_client=http_client, max_retries=0) + + try: + for attempt in range(1, max_retries + 1): + try: + logging.info(f"Initialization check {attempt}/{max_retries}...") + + await client.chat.completions.create( + model=model_name, + messages=[{'role': 'user', 'content': 'Hello'}], + max_tokens=10, + stream=False + ) + + logging.info("Model is ready!") + return True + + except Exception as e: + error_msg = str(e).lower() + + if any(kw in error_msg for kw in ['initializing', 'loading', 'starting', 'not ready', 'unavailable']): + if attempt < max_retries: + logging.info(f"Model initializing... waiting {retry_delay}s") + await asyncio.sleep(retry_delay) + else: + logging.error(f"Model failed to initialize after {max_retries} attempts") + return False + else: + logging.error(f"Error: {e}") + return False + finally: + await http_client.aclose() + + return False + + +# ============================================================================ +# BENCHMARK EXECUTION +# ============================================================================ + +async def run_benchmark( + config: BenchmarkConfig, + endpoint_url: str, + api_key: str, + model_name: str, + request_timeout: int, + log_io: bool = False, + io_logger: Optional[logging.Logger] = None, + dataset: Optional[dict] = None, + text_content: Optional[str] = None, + stream: bool = True +) -> Optional[Dict]: + """Run a single benchmark configuration in batch mode.""" + total_requests = config.num_batches * config.batch_size + + logging.info(f"\n{'='*60}") + logging.info(f"Starting benchmark: {config.num_batches} batches" + f"{config.batch_size} requests/batch = {total_requests} total") + logging.info(f"Target: {config.input_tokens} tokens, Output: {config.output_tokens} tokens") + if text_content: + logging.info(f"Using custom text input") + elif dataset: + logging.info(f"Using conversation dataset") + logging.info(f"{'='*60}") + + http_client = create_http_client(config.batch_size, request_timeout) + + try: + client = AsyncOpenAI(base_url=endpoint_url, api_key=api_key, http_client=http_client, max_retries=0) + results = [] + + start_time = time.time() + + # Send batches of requests + for batch_id in range(config.num_batches): + batch_start = time.time() + + logging.info(f" Starting batch {batch_id + 1}/{config.num_batches} " + f"({config.batch_size} simultaneous requests)...") + + batch_results = await make_batch_request( + client=client, + config=config, + model_name=model_name, + request_timeout=request_timeout, + batch_size=config.batch_size, + batch_id=batch_id, + log_io=log_io, + io_logger=io_logger, + dataset=dataset, + text_content=text_content, + stream=stream + ) + results.extend(batch_results) + + # Log batch completion with detailed metrics + batch_time = time.time() - batch_start + successful = sum(1 for r in batch_results if r.success) + failed = len(batch_results) - successful + batch_throughput = sum(r.total_tokens for r in batch_results if r.success) / batch_time if batch_time > 0 else 0 + + # Calculate average TTFT for this batch + ttfts = [r.time_to_first_token for r in batch_results if r.success and r.time_to_first_token] + avg_ttft = sum(ttfts) / len(ttfts) if ttfts else 0 + + # Calculate average latency for this batch + latencies = [r.elapsed_time for r in batch_results if r.success] + avg_latency = sum(latencies) / len(latencies) if latencies else 0 + + status_icon = "✓" if failed == 0 else "⚠" + logging.info(f"{status_icon} Batch {batch_id + 1}/{config.num_batches} complete: " + f"{successful}/{len(batch_results)} successful " + f"| {batch_time:.2f}s total " + f"| {batch_throughput:.0f} tok/s " + f"| TTFT: {avg_ttft:.3f}s " + f"| Latency: {avg_latency:.2f}s") + + if failed > 0: + logging.warning(f" {failed} request(s) failed in batch {batch_id + 1}") + + # Small delay between batches to avoid overwhelming the system + if batch_id < config.num_batches - 1: + await asyncio.sleep(0.1) + + end_time = time.time() + + if not results: + logging.error("No results collected!") + return None + + stats = calculate_statistics(results, config) + + logging.info(f"✓ Benchmark complete in {end_time - start_time:.2f}s") + if 'success_metrics' in stats: + logging.info(f" Success: {stats['success_metrics']['success_rate']}% " + f"({stats['success_metrics']['successful_requests']}/{total_requests})") + logging.info(f" P95 Latency: {stats['latency']['p95']}s") + logging.info(f" Throughput: {stats['throughput']['concurrent_total_tps']} tokens/s") + + if 'batch_metrics' in stats: + logging.info(f" Avg Batch Throughput: {stats['batch_metrics']['avg_batch_throughput']} tokens/s") + else: + logging.error(f" All {total_requests} requests failed. Error: {stats.get('error', 'unknown')}") + + return stats + + finally: + await http_client.aclose() + + +async def run_all_benchmarks( + configs: List[BenchmarkConfig], + endpoint_url: str, + api_key: str, + model_name: str, + request_timeout: int, + delay_between_runs: int = 5, + log_io: bool = False, + io_logger: Optional[logging.Logger] = None, + wait_for_ready: bool = True, + max_init_retries: int = 10, + init_retry_delay: int = 30, + dataset: Optional[dict] = None, + text_content: Optional[str] = None, + stream: bool = True +) -> List[Dict]: + """Run all benchmark configurations.""" + if wait_for_ready: + if not await wait_for_model(endpoint_url, api_key, model_name, max_init_retries, init_retry_delay): + logging.error("Model initialization failed. Aborting.") + return [] + + all_results = [] + + for i, config in enumerate(configs, 1): + logging.info(f"\n--- Benchmark {i}/{len(configs)} ---") + result = await run_benchmark( + config, endpoint_url, api_key, model_name, request_timeout, + log_io, io_logger, dataset, text_content, stream + ) + + if result: + all_results.append(result) + else: + logging.error(f"Benchmark {i} failed") + + if i < len(configs): + logging.info(f"Waiting {delay_between_runs}s before next run...") + await asyncio.sleep(delay_between_runs) + + # Log summary + if all_results: + successful = len(all_results) + total = len(configs) + logging.info(f"\n{'='*60}") + logging.info(f"ALL BENCHMARKS COMPLETE") + logging.info(f"{'='*60}") + logging.info(f"Completed: {successful}/{total} benchmarks") + + # Overall stats + total_requests = sum(r['config']['total_requests'] for r in all_results) + total_successful = sum(r['success_metrics']['successful_requests'] for r in all_results) + overall_success_rate = (total_successful / total_requests * 100) if total_requests > 0 else 0 + + logging.info(f"Total requests: {total_requests}") + logging.info(f"Successful: {total_successful} ({overall_success_rate:.1f}%)") + logging.info(f"{'='*60}") + + return all_results + + +# ============================================================================ +# FILE I/O +# ============================================================================ + +def create_results_directory(model_name: str) -> Tuple[Path, str]: + """Create results directory.""" + if 'ubiops-deployment/' in model_name: + parts = model_name.split('/') + if len(parts) >= 4: + model_name = parts[-1] + + safe_name = "".join(c if c.isalnum() or c in ('-', '_') else '_' for c in model_name) + results_dir = Path('results') / f'results_{safe_name}' + results_dir.mkdir(parents=True, exist_ok=True) + + logging.info(f"Results directory: {results_dir}") + return results_dir, safe_name + + +def save_results(results: List[Dict], results_dir: Path, model_name: str) -> Path: + """Save benchmark results to JSON.""" + output_path = results_dir / 'benchmark_results.json' + + output_data = { + 'timestamp': datetime.now().isoformat(), + 'model_name': model_name, + 'results': results + } + + with open(output_path, 'w') as f: + json.dump(output_data, f, indent=2) + + logging.info(f"Results saved: {output_path}") + return output_path + + +def load_config_file(config_path: str) -> Dict: + """Load configuration from YAML file.""" + with open(config_path, 'r') as f: + return yaml.safe_load(f) + + +def save_config_copy(config_data: Dict, results_dir: Path) -> None: + """Save sanitized config copy.""" + if 'endpoint' in config_data and 'api_key' in config_data['endpoint']: + config_data['endpoint']['api_key'] = '' + + config_path = results_dir / 'config_used.yaml' + with open(config_path, 'w') as f: + yaml.dump(config_data, f, default_flow_style=False, sort_keys=False) + + logging.info(f"Config saved: {config_path}") + + +# ============================================================================ +# CLI INTERFACE +# ============================================================================ + +def parse_args(): + """Parse command-line arguments.""" + parser = argparse.ArgumentParser( + description="Benchmark LLM deployments via OpenAI-compatible endpoints", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + # Using config file + python benchmark_llm.py --config benchmark_config.yaml + + # Using CLI arguments + python benchmark_llm.py --endpoint_url https://api.example.com/v1 \\ + --api_key YOUR_KEY \\ + --model_name gpt-4 \\ + --input_tokens 1000 5000 10000 \\ + --concurrent_requests 1 8 16 32 + """ + ) + + parser.add_argument('--config', type=str, help="Path to YAML config file") + parser.add_argument('--endpoint_url', type=str, help="OpenAI-compatible endpoint URL") + parser.add_argument('--api_key', type=str, help="API key") + parser.add_argument('--model_name', type=str, help="Model name") + parser.add_argument('--input_tokens', type=int, nargs='+', default=[1000, 5000, 10000], + help="Input token counts to test") + parser.add_argument('--batch_sizes', type=int, nargs='+', default=[16, 32, 64, 128], + help="Batch sizes to test (number of simultaneous requests)") + parser.add_argument('--num_batches', type=int, default=10, + help="Number of batches to send per configuration") + parser.add_argument('--output_tokens', type=int, default=256, + help="Output tokens per request") + parser.add_argument('--dataset', type=str, default=None, + help="Path to conversation dataset JSON file (optional)") + parser.add_argument('--text', type=str, default=None, + help="Custom text to use as input for all requests (same text repeated)") + parser.add_argument('--request_timeout', type=int, default=900, + help="Request timeout (seconds)") + parser.add_argument('--delay_between_runs', type=int, default=5, + help="Delay between runs (seconds)") + parser.add_argument('--no_stream', action='store_true', + help="Use non-streaming requests instead of streaming") + parser.add_argument('--log_io', action='store_true', + help="Log all input/output") + parser.add_argument('--skip_init_wait', action='store_true', + help="Skip model initialization wait") + parser.add_argument('--max_init_retries', type=int, default=10, + help="Max initialization retries") + parser.add_argument('--init_retry_delay', type=int, default=30, + help="Delay between init retries") + + return parser.parse_args() + + +def generate_configs( + input_tokens: List[int], + batch_sizes: List[int], + num_batches: int, + output_tokens: int +) -> List[BenchmarkConfig]: + """Generate benchmark configurations.""" + configs = [] + for input_tok in input_tokens: + for batch_size in batch_sizes: + configs.append(BenchmarkConfig( + input_tokens=input_tok, + batch_size=batch_size, + num_batches=num_batches, + output_tokens=output_tokens + )) + return configs + + +# ============================================================================ +# MAIN +# ============================================================================ + +async def main(): + """Main entry point.""" + args = parse_args() + + # Load configuration + if args.config: + config_data = load_config_file(args.config) + endpoint_url = config_data['endpoint']['url'] + api_key = config_data['endpoint']['api_key'] + model_name = config_data['endpoint']['model_name'] + + bench_config = config_data['benchmark'] + input_tokens = bench_config['input_tokens'] + batch_sizes = bench_config['batch_sizes'] + num_batches = bench_config['num_batches'] + output_tokens = bench_config['output_tokens'] + dataset_path = bench_config.get('dataset', None) + custom_text = bench_config.get('text', None) + + runtime = config_data.get('runtime', {}) + request_timeout = runtime.get('request_timeout', 900) + delay_between_runs = runtime.get('delay_between_runs', 5) + log_io = runtime.get('log_io', False) + stream = runtime.get('stream', True) + wait_for_ready = runtime.get('wait_for_ready', True) + max_init_retries = runtime.get('max_init_retries', 10) + init_retry_delay = runtime.get('init_retry_delay', 30) + else: + # Use CLI arguments + if not all([args.endpoint_url, args.api_key, args.model_name]): + logging.error("Must provide --config or all of --endpoint_url, --api_key, --model_name") + return + + config_data = None + endpoint_url = args.endpoint_url + api_key = args.api_key + model_name = args.model_name + input_tokens = args.input_tokens + batch_sizes = args.batch_sizes + num_batches = args.num_batches + output_tokens = args.output_tokens + dataset_path = args.dataset + custom_text = args.text + request_timeout = args.request_timeout + delay_between_runs = args.delay_between_runs + log_io = args.log_io + stream = not args.no_stream + wait_for_ready = not args.skip_init_wait + max_init_retries = args.max_init_retries + init_retry_delay = args.init_retry_delay + + # Load conversation dataset if provided + dataset = None + if dataset_path: + try: + dataset = load_conversation_dataset(dataset_path) + except Exception as e: + logging.error(f"Failed to load dataset: {e}") + logging.error("Continuing with generated prompts...") + + # Use custom text if provided (takes priority over everything) + text_content = custom_text + + # Create results directory + results_dir, safe_name = create_results_directory(model_name) + io_logger = setup_logging(results_dir, log_io) + + if config_data: + save_config_copy(config_data, results_dir) + + # Generate benchmark configurations + configs = generate_configs(input_tokens, batch_sizes, num_batches, output_tokens) + + logging.info(f"\n{'='*60}") + logging.info(f"BENCHMARK CONFIGURATION") + logging.info(f"{'='*60}") + logging.info(f"Model: {model_name}") + logging.info(f"Endpoint: {endpoint_url}") + logging.info(f"Mode: BATCH ({'streaming' if stream else 'non-streaming'})") + if text_content: + logging.info(f"Input: Custom text ({len(text_content)} chars)") + elif dataset: + logging.info(f"Input: {dataset_path} (real conversations)") + else: + logging.info(f"Input: Generated prompts") + logging.info(f"Total configurations: {len(configs)}") + logging.info(f"Input tokens: {input_tokens}") + logging.info(f"Batch sizes: {batch_sizes}") + logging.info(f"Batches per config: {num_batches}") + logging.info(f"Output tokens: {output_tokens}") + logging.info(f"{'='*60}\n") + + # Run benchmarks + results = await run_all_benchmarks( + configs=configs, + endpoint_url=endpoint_url, + api_key=api_key, + model_name=model_name, + request_timeout=request_timeout, + delay_between_runs=delay_between_runs, + log_io=log_io, + io_logger=io_logger, + wait_for_ready=wait_for_ready, + max_init_retries=max_init_retries, + init_retry_delay=init_retry_delay, + dataset=dataset, + text_content=text_content, + stream=stream + ) + + if results: + results_path = save_results(results, results_dir, model_name) + + logging.info(f"\n{'='*60}") + logging.info("BENCHMARK COMPLETE!") + logging.info(f"{'='*60}") + logging.info(f"Results: {results_path}") + if log_io: + logging.info(f"I/O log: {results_dir / 'benchmark_io.log'}") + logging.info(f"\nVisualize: python visualize_results.py --input {results_path}") + else: + logging.error("No results generated") + + +if __name__ == '__main__': + asyncio.run(main()) diff --git a/llm-throughput-tests-mindef-metadateren/create_test_dataset.py b/llm-throughput-tests-mindef-metadateren/create_test_dataset.py new file mode 100644 index 0000000..2b3399a --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/create_test_dataset.py @@ -0,0 +1,338 @@ +#!/usr/bin/env python3 +""" +Create bucketed test dataset for LLM benchmarking. + +Uses multiple strategies to fill all token buckets: +1. Natural conversations from UltraChat dataset +2. Concatenation of shorter conversations for larger buckets + +Buckets aligned with benchmark input_tokens: 100, 500, 1k, 2k, 5k, 10k +Outputs 128 unique conversations per bucket for comprehensive testing. + +Usage: + python create_test_dataset.py + python create_test_dataset.py --output test_conversations.json + python create_test_dataset.py --buckets 1000 5000 10000 --chains_per_bucket 64 +""" + +import argparse +import json +import random +from collections import defaultdict +from pathlib import Path + +import tiktoken +from datasets import load_dataset + +# Default buckets aligned with typical benchmark configurations +DEFAULT_BUCKETS = [100, 500, 1_000, 2_000, 5_000, 10_000] +CHAINS_PER_BUCKET = 128 +DATASET_NAME = "HuggingFaceH4/ultrachat_200k" +ENCODING_NAME = "cl100k_base" + + +def count_tokens(messages: list[dict], encoding: tiktoken.Encoding) -> int: + """Count total tokens in a conversation chain.""" + total = 0 + for msg in messages: + content = msg.get("content", "") or "" + role = msg.get("role", "") or "" + total += len(encoding.encode(content, disallowed_special=())) + total += len(encoding.encode(role, disallowed_special=())) + total += 4 # Message formatting overhead + total += 2 # Conversation formatting overhead + return total + + +def get_bucket(token_count: int, buckets: list[int]) -> int | None: + """Find the appropriate bucket for a token count (within 20% of target).""" + for bucket in buckets: + if bucket * 0.8 <= token_count <= bucket * 1.2: + return bucket + return None + + +def format_ultrachat_messages(messages: list[dict]) -> list[dict]: + """Format UltraChat conversations to OpenAI chat format.""" + formatted = [] + for msg in messages: + role = msg.get("role", "user") + if role not in ["user", "assistant", "system"]: + role = "user" + content = msg.get("content", "") or "" + if content: + formatted.append({"role": role, "content": content}) + return formatted + + +def concatenate_conversations( + conversations: list[list[dict]], + target_tokens: int, + encoding: tiktoken.Encoding, + tolerance: float = 0.2 +) -> list[dict] | None: + """Concatenate multiple conversations to reach target token count.""" + result = [] + current_tokens = 0 + target_min = target_tokens * (1 - tolerance) + target_max = target_tokens * (1 + tolerance) + + random.shuffle(conversations) + + for conv in conversations: + conv_tokens = count_tokens(conv, encoding) + + # Skip if this would exceed target + if current_tokens + conv_tokens > target_max: + continue + + # Add separator between conversations + if result and conv: + separator = {"role": "user", "content": "---\nNew conversation:\n---"} + result.append(separator) + current_tokens += 10 # Approximate tokens for separator + + result.extend(conv) + current_tokens += conv_tokens + + # Check if we've reached target + if current_tokens >= target_min: + break + + # Verify we're within acceptable range + if current_tokens < target_min * 0.8: + return None + + return result + + +def main(): + parser = argparse.ArgumentParser( + description="Create bucketed test dataset for LLM benchmarking", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + # Default configuration (128 conversations per bucket) + python create_test_dataset.py + + # Custom buckets + python create_test_dataset.py --buckets 1000 5000 10000 + + # Fewer conversations per bucket + python create_test_dataset.py --chains_per_bucket 64 + + # Custom output location + python create_test_dataset.py --output data/conversations.json + """ + ) + + parser.add_argument( + "--output", + type=str, + default="test_conversations.json", + help="Output file path (default: test_conversations.json)" + ) + + parser.add_argument( + "--buckets", + type=int, + nargs='+', + default=DEFAULT_BUCKETS, + help="Token count buckets (default: 100 500 1000 2000 5000 10000)" + ) + + parser.add_argument( + "--chains_per_bucket", + type=int, + default=CHAINS_PER_BUCKET, + help=f"Number of conversations per bucket (default: {CHAINS_PER_BUCKET})" + ) + + parser.add_argument( + "--seed", + type=int, + default=42, + help="Random seed for reproducibility (default: 42)" + ) + + parser.add_argument( + "--dataset", + type=str, + default=DATASET_NAME, + help=f"HuggingFace dataset name (default: {DATASET_NAME})" + ) + + args = parser.parse_args() + + random.seed(args.seed) + buckets = sorted(args.buckets) + + print("="*60) + print("LLM Benchmark Dataset Generator") + print("="*60) + print(f"Output: {args.output}") + print(f"Buckets: {buckets}") + print(f"Conversations per bucket: {args.chains_per_bucket}") + print(f"Random seed: {args.seed}") + print("="*60) + + print(f"\nLoading dataset: {args.dataset}") + try: + dataset = load_dataset(args.dataset, split="train_sft") + except Exception as e: + print(f"Error loading dataset: {e}") + print("Make sure you have internet connection and the 'datasets' package installed:") + print(" pip install datasets") + return + + print(f"Initializing tokenizer: {ENCODING_NAME}") + try: + encoding = tiktoken.get_encoding(ENCODING_NAME) + except Exception as e: + print(f"Error loading tokenizer: {e}") + print("Make sure you have 'tiktoken' installed:") + print(" pip install tiktoken") + return + + bucketed_chains: dict[int, list[dict]] = defaultdict(list) + all_conversations: list[list[dict]] = [] + + print(f"\nProcessing {len(dataset)} conversation chains...") + + for idx, row in enumerate(dataset): + messages = row.get("messages", []) + if not messages: + continue + + formatted = format_ultrachat_messages(messages) + if not formatted: + continue + + token_count = count_tokens(formatted, encoding) + bucket = get_bucket(token_count, buckets) + + all_conversations.append(formatted) + + if bucket is not None: + bucketed_chains[bucket].append( + { + "messages": formatted, + "token_count": token_count, + "bucket": bucket, + "original_index": idx, + "synthetic": False, + } + ) + + if (idx + 1) % 50000 == 0: + print(f" Processed {idx + 1:,} chains...") + + print(f"\nTotal conversations collected: {len(all_conversations):,}") + print("\nNatural bucket distribution:") + print("-" * 60) + + for bucket in buckets: + count = len(bucketed_chains[bucket]) + status = "!" if count >= args.chains_per_bucket else f" need {args.chains_per_bucket - count} more" + print(f" {bucket:>6,} tokens: {count:>5,} chains {status}") + + # Generate synthetic conversations for sparse buckets + print("\nGenerating synthetic chains for sparse buckets...") + large_buckets = [b for b in buckets if len(bucketed_chains[b]) < args.chains_per_bucket] + + for bucket in large_buckets: + needed = args.chains_per_bucket - len(bucketed_chains[bucket]) + if needed <= 0: + continue + + print(f" Creating {needed} synthetic chains for {bucket:,} token bucket...") + attempts = 0 + max_attempts = needed * 20 + created = 0 + + while len(bucketed_chains[bucket]) < args.chains_per_bucket and attempts < max_attempts: + attempts += 1 + synthetic = concatenate_conversations( + [c.copy() for c in all_conversations], + bucket, + encoding + ) + + if synthetic: + token_count = count_tokens(synthetic, encoding) + bucketed_chains[bucket].append( + { + "messages": synthetic, + "token_count": token_count, + "bucket": bucket, + "original_index": -1, + "synthetic": True, + } + ) + created += 1 + + if created < needed: + print(f" Only created {created}/{needed} synthetic chains") + + print("\nFinal bucket distribution:") + print("-" * 60) + + final_dataset = {} + total_natural = 0 + total_synthetic = 0 + + for bucket in buckets: + chains = bucketed_chains[bucket] + count = len(chains) + + if count >= args.chains_per_bucket: + selected = random.sample(chains, args.chains_per_bucket) + else: + selected = chains + if count < args.chains_per_bucket: + print(f" {bucket:>6,} tokens: {count:>5,} chains insufficient (target: {args.chains_per_bucket})") + selected = chains # Use what we have + + natural = sum(1 for c in selected if not c.get("synthetic", False)) + synthetic = len(selected) - natural + total_natural += natural + total_synthetic += synthetic + + print(f" {bucket:>6,} tokens: {len(selected):>3} chains ({natural} natural, {synthetic} synthetic)") + + final_dataset[str(bucket)] = selected + + # Save dataset + output_path = Path(args.output) + output_path.parent.mkdir(parents=True, exist_ok=True) + + with open(output_path, "w", encoding="utf-8") as f: + json.dump(final_dataset, f, indent=2, ensure_ascii=False) + + print("-" * 60) + print(f"\n Dataset saved to: {output_path}") + + total_chains = sum(len(chains) for chains in final_dataset.values()) + print(f"\nTotal chains: {total_chains:,}") + print(f"Natural conversations: {total_natural:,}") + print(f"Synthetic conversations: {total_synthetic:,}") + + print("\nBucket summary:") + for bucket in buckets: + chains = final_dataset.get(str(bucket), []) + if chains: + avg_tokens = sum(c["token_count"] for c in chains) / len(chains) + min_tokens = min(c["token_count"] for c in chains) + max_tokens = max(c["token_count"] for c in chains) + print(f" {bucket:>6,} tokens: {len(chains):>3} chains, " + f"avg={avg_tokens:>6,.0f}, min={min_tokens:>6,}, max={max_tokens:>6,}") + + print("\n" + "="*60) + print("To use this dataset with benchmark:") + print("="*60) + print(f" python benchmark_llm.py --dataset {args.output} ...") + print("="*60) + + +if __name__ == "__main__": + main() diff --git a/llm-throughput-tests-mindef-metadateren/requirements.txt b/llm-throughput-tests-mindef-metadateren/requirements.txt new file mode 100644 index 0000000..0f260ac --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/requirements.txt @@ -0,0 +1,9 @@ +openai>=1.0.0 +httpx>=0.24.0 +pyyaml>=6.0 +matplotlib>=3.7.0 +seaborn>=0.12.0 +numpy>=1.24.0 +tiktoken>=0.5.0 +datasets>=2.14.0 +httpx[http2] \ No newline at end of file diff --git a/llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/benchmark_results.json b/llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/benchmark_results.json new file mode 100644 index 0000000..8e763ec --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/benchmark_results.json @@ -0,0 +1,630 @@ +{ + "timestamp": "2026-03-11T11:10:08.245541", + "model_name": "QuantTrio/Qwen3.5-35B-A3B-AWQ", + "results": [ + { + "config": { + "input_tokens": 1000, + "output_tokens": 512, + "batch_size": 1, + "num_batches": 2, + "total_requests": 2, + "actual_input_tokens": 1140 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 2, + "failed_requests": 0 + }, + "latency": { + "mean": 9.155, + "std": 5.968, + "min": 3.187, + "max": 15.123, + "p50": 9.155, + "p95": 14.526, + "p99": 15.003, + "ci_95_lower": 0.884, + "ci_95_upper": 17.426 + }, + "ttft": { + "mean": 9.155, + "std": 5.968, + "p50": 9.155, + "p90": 13.929 + }, + "tokens": { + "total_generated": 1024, + "content_tokens": 1024, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 55.62, + "concurrent_content_tps": 55.62, + "requests_per_second": 0.11, + "actual_wall_time": 18.412, + "efficiency_percent": 57.18 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 1.0, + "avg_batch_throughput": 97.26, + "min_batch_throughput": 33.86, + "max_batch_throughput": 160.67 + } + }, + { + "config": { + "input_tokens": 1000, + "output_tokens": 512, + "batch_size": 8, + "num_batches": 2, + "total_requests": 16, + "actual_input_tokens": 1003 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 16, + "failed_requests": 0 + }, + "latency": { + "mean": 8.081, + "std": 2.287, + "min": 5.772, + "max": 10.373, + "p50": 8.085, + "p95": 10.372, + "p99": 10.373, + "ci_95_lower": 6.961, + "ci_95_upper": 9.202 + }, + "ttft": { + "mean": 8.081, + "std": 2.287, + "p50": 8.085, + "p90": 10.37 + }, + "tokens": { + "total_generated": 8192, + "content_tokens": 8192, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 503.04, + "concurrent_content_tps": 503.04, + "requests_per_second": 0.98, + "actual_wall_time": 16.285, + "efficiency_percent": 91.31 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 8.0, + "avg_batch_throughput": 549.93, + "min_batch_throughput": 394.83, + "max_batch_throughput": 705.03 + } + }, + { + "config": { + "input_tokens": 1000, + "output_tokens": 512, + "batch_size": 32, + "num_batches": 2, + "total_requests": 64, + "actual_input_tokens": 1028 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 64, + "failed_requests": 0 + }, + "latency": { + "mean": 8.686, + "std": 0.017, + "min": 8.636, + "max": 8.732, + "p50": 8.688, + "p95": 8.71, + "p99": 8.721, + "ci_95_lower": 8.682, + "ci_95_upper": 8.691 + }, + "ttft": { + "mean": 8.595, + "std": 0.727, + "p50": 8.687, + "p90": 8.707 + }, + "tokens": { + "total_generated": 32768, + "content_tokens": 32768, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 1865.45, + "concurrent_content_tps": 1865.45, + "requests_per_second": 3.64, + "actual_wall_time": 17.566, + "efficiency_percent": 98.9 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 32.0, + "avg_batch_throughput": 1876.54, + "min_batch_throughput": 1870.97, + "max_batch_throughput": 1882.11 + } + }, + { + "config": { + "input_tokens": 1000, + "output_tokens": 512, + "batch_size": 64, + "num_batches": 2, + "total_requests": 128, + "actual_input_tokens": 1028 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 128, + "failed_requests": 0 + }, + "latency": { + "mean": 12.207, + "std": 0.04, + "min": 12.108, + "max": 12.283, + "p50": 12.211, + "p95": 12.263, + "p99": 12.273, + "ci_95_lower": 12.2, + "ci_95_upper": 12.214 + }, + "ttft": { + "mean": 12.044, + "std": 1.066, + "p50": 12.205, + "p90": 12.257 + }, + "tokens": { + "total_generated": 65536, + "content_tokens": 65536, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 2654.48, + "concurrent_content_tps": 2654.48, + "requests_per_second": 5.18, + "actual_wall_time": 24.689, + "efficiency_percent": 98.89 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 64.0, + "avg_batch_throughput": 2665.65, + "min_batch_throughput": 2658.45, + "max_batch_throughput": 2672.85 + } + }, + { + "config": { + "input_tokens": 10000, + "output_tokens": 512, + "batch_size": 1, + "num_batches": 2, + "total_requests": 2, + "actual_input_tokens": 8871 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 2, + "failed_requests": 0 + }, + "latency": { + "mean": 3.533, + "std": 0.026, + "min": 3.507, + "max": 3.559, + "p50": 3.533, + "p95": 3.557, + "p99": 3.559, + "ci_95_lower": 3.497, + "ci_95_upper": 3.569 + }, + "ttft": { + "mean": 3.533, + "std": 0.026, + "p50": 3.533, + "p90": 3.554 + }, + "tokens": { + "total_generated": 1024, + "content_tokens": 1024, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 142.85, + "concurrent_content_tps": 142.85, + "requests_per_second": 0.28, + "actual_wall_time": 7.168, + "efficiency_percent": 98.57 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 1.0, + "avg_batch_throughput": 144.92, + "min_batch_throughput": 143.85, + "max_batch_throughput": 145.99 + } + }, + { + "config": { + "input_tokens": 10000, + "output_tokens": 512, + "batch_size": 8, + "num_batches": 2, + "total_requests": 16, + "actual_input_tokens": 8895 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 16, + "failed_requests": 0 + }, + "latency": { + "mean": 7.325, + "std": 0.144, + "min": 7.142, + "max": 7.493, + "p50": 7.333, + "p95": 7.489, + "p99": 7.492, + "ci_95_lower": 7.254, + "ci_95_upper": 7.395 + }, + "ttft": { + "mean": 7.325, + "std": 0.144, + "p50": 7.333, + "p90": 7.487 + }, + "tokens": { + "total_generated": 8192, + "content_tokens": 8192, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 550.76, + "concurrent_content_tps": 550.76, + "requests_per_second": 1.08, + "actual_wall_time": 14.874, + "efficiency_percent": 98.45 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 8.0, + "avg_batch_throughput": 554.82, + "min_batch_throughput": 543.43, + "max_batch_throughput": 566.21 + } + }, + { + "config": { + "input_tokens": 10000, + "output_tokens": 512, + "batch_size": 32, + "num_batches": 2, + "total_requests": 64, + "actual_input_tokens": 8842 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 64, + "failed_requests": 0 + }, + "latency": { + "mean": 16.085, + "std": 2.082, + "min": 13.822, + "max": 18.383, + "p50": 16.109, + "p95": 18.273, + "p99": 18.329, + "ci_95_lower": 15.575, + "ci_95_upper": 16.595 + }, + "ttft": { + "mean": 15.996, + "std": 2.114, + "p50": 14.22, + "p90": 18.248 + }, + "tokens": { + "total_generated": 32768, + "content_tokens": 32768, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 995.46, + "concurrent_content_tps": 995.46, + "requests_per_second": 1.94, + "actual_wall_time": 32.917, + "efficiency_percent": 96.09 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 32.0, + "avg_batch_throughput": 1015.38, + "min_batch_throughput": 885.0, + "max_batch_throughput": 1145.76 + } + }, + { + "config": { + "input_tokens": 10000, + "output_tokens": 512, + "batch_size": 64, + "num_batches": 2, + "total_requests": 128, + "actual_input_tokens": 8842 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 128, + "failed_requests": 0 + }, + "latency": { + "mean": 14.781, + "std": 0.143, + "min": 14.277, + "max": 15.099, + "p50": 14.781, + "p95": 15.032, + "p99": 15.096, + "ci_95_lower": 14.756, + "ci_95_upper": 14.806 + }, + "ttft": { + "mean": 14.781, + "std": 0.143, + "p50": 14.781, + "p90": 14.972 + }, + "tokens": { + "total_generated": 65536, + "content_tokens": 65536, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 2166.53, + "concurrent_content_tps": 2166.53, + "requests_per_second": 4.23, + "actual_wall_time": 30.249, + "efficiency_percent": 97.72 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 64.0, + "avg_batch_throughput": 2174.01, + "min_batch_throughput": 2164.24, + "max_batch_throughput": 2183.78 + } + }, + { + "config": { + "input_tokens": 50000, + "output_tokens": 512, + "batch_size": 1, + "num_batches": 2, + "total_requests": 2, + "actual_input_tokens": 42229 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 2, + "failed_requests": 0 + }, + "latency": { + "mean": 6.101, + "std": 0.019, + "min": 6.082, + "max": 6.12, + "p50": 6.101, + "p95": 6.118, + "p99": 6.12, + "ci_95_lower": 6.074, + "ci_95_upper": 6.128 + }, + "ttft": { + "mean": 6.101, + "std": 0.019, + "p50": 6.101, + "p90": 6.117 + }, + "tokens": { + "total_generated": 1024, + "content_tokens": 1024, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 83.22, + "concurrent_content_tps": 83.22, + "requests_per_second": 0.16, + "actual_wall_time": 12.305, + "efficiency_percent": 99.16 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 1.0, + "avg_batch_throughput": 83.92, + "min_batch_throughput": 83.66, + "max_batch_throughput": 84.19 + } + }, + { + "config": { + "input_tokens": 50000, + "output_tokens": 512, + "batch_size": 8, + "num_batches": 2, + "total_requests": 16, + "actual_input_tokens": 42048 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 16, + "failed_requests": 0 + }, + "latency": { + "mean": 22.685, + "std": 2.474, + "min": 20.003, + "max": 25.463, + "p50": 22.588, + "p95": 25.387, + "p99": 25.448, + "ci_95_lower": 21.473, + "ci_95_upper": 23.897 + }, + "ttft": { + "mean": 22.685, + "std": 2.474, + "p50": 22.588, + "p90": 25.295 + }, + "tokens": { + "total_generated": 8192, + "content_tokens": 8192, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 177.76, + "concurrent_content_tps": 177.76, + "requests_per_second": 0.35, + "actual_wall_time": 46.085, + "efficiency_percent": 97.28 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 8.0, + "avg_batch_throughput": 180.32, + "min_batch_throughput": 160.6, + "max_batch_throughput": 200.04 + } + }, + { + "config": { + "input_tokens": 50000, + "output_tokens": 512, + "batch_size": 32, + "num_batches": 2, + "total_requests": 64, + "actual_input_tokens": 41752 + }, + "success_metrics": { + "success_rate": 100.0, + "successful_requests": 64, + "failed_requests": 0 + }, + "latency": { + "mean": 70.626, + "std": 18.722, + "min": 48.439, + "max": 90.756, + "p50": 70.358, + "p95": 90.447, + "p99": 90.677, + "ci_95_lower": 66.039, + "ci_95_upper": 75.213 + }, + "ttft": { + "mean": 70.626, + "std": 18.722, + "p50": 70.358, + "p90": 90.064 + }, + "tokens": { + "total_generated": 32768, + "content_tokens": 32768, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 225.4, + "concurrent_content_tps": 225.4, + "requests_per_second": 0.44, + "actual_wall_time": 145.377, + "efficiency_percent": 90.31 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 32.0, + "avg_batch_throughput": 241.37, + "min_batch_throughput": 179.6, + "max_batch_throughput": 303.14 + } + }, + { + "config": { + "input_tokens": 50000, + "output_tokens": 512, + "batch_size": 64, + "num_batches": 2, + "total_requests": 128, + "actual_input_tokens": 41810 + }, + "success_metrics": { + "success_rate": 63.28, + "successful_requests": 81, + "failed_requests": 47 + }, + "latency": { + "mean": 111.228, + "std": 2.973, + "min": 106.149, + "max": 115.385, + "p50": 112.37, + "p95": 114.998, + "p99": 115.289, + "ci_95_lower": 110.581, + "ci_95_upper": 111.876 + }, + "ttft": { + "mean": 111.228, + "std": 2.973, + "p50": 112.37, + "p90": 114.818 + }, + "tokens": { + "total_generated": 41472, + "content_tokens": 41472, + "reasoning_tokens": 0, + "avg_per_request": 512.0 + }, + "throughput": { + "concurrent_total_tps": 182.43, + "concurrent_content_tps": 182.43, + "requests_per_second": 0.36, + "actual_wall_time": 227.333, + "efficiency_percent": 61.88 + }, + "batch_metrics": { + "num_batches": 2, + "avg_batch_size": 40.5, + "avg_batch_throughput": 181.97, + "min_batch_throughput": 162.11, + "max_batch_throughput": 201.84 + } + } + ] +} \ No newline at end of file diff --git a/llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/config_used.yaml b/llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/config_used.yaml new file mode 100644 index 0000000..191478e --- /dev/null +++ b/llm-throughput-tests-mindef-metadateren/results/results_QuantTrio_Qwen3_5-35B-A3B-AWQ/config_used.yaml @@ -0,0 +1,25 @@ +endpoint: + url: https://0e799c11-4b01-4acd-a91c-5e43deaae940.services.external.0a71m37v.ubiops.io/v1 + api_key: + model_name: QuantTrio/Qwen3.5-35B-A3B-AWQ +benchmark: + input_tokens: + - 1000 + - 10000 + - 50000 + batch_sizes: + - 1 + - 8 + - 32 + - 64 + num_batches: 2 + output_tokens: 512 + dataset: test_conversations.json + text: null +runtime: + request_timeout: 300 + delay_between_runs: 5 + log_io: true + wait_for_ready: true + max_init_retries: 10 + init_retry_delay: 30