litellm/deploy/aws/simple-loadtest.py
Julio Quinteros Pro 1cf0097be6 docs(aws): document model configuration gap in benchmark deployment
After testing the AWS ECS deployment, discovered that the CloudFormation
template does not configure the fake-openai-endpoint model required for
running benchmark tests as documented in https://docs.litellm.ai/docs/benchmarks

## Changes

- Added KNOWN_ISSUES.md documenting the limitation in detail
- Updated README.md with prominent warning about the gap
- Updated 00-START-HERE.md with limitation notice
- Added simple-loadtest.py for infrastructure-only testing

## What Was Tested

 Successfully deployed:
- 4 ECS Fargate tasks (4 vCPU, 8 GB RAM each)
- RDS PostgreSQL database
- Application Load Balancer
- Full VPC with security groups

 Verified working:
- All tasks running and healthy
- Database connections
- Health endpoints responding
- Load balancer routing

 Cannot test (missing model config):
- API /v1/chat/completions requests
- Locust benchmark with 1000 users
- LiteLLM overhead measurement
- Performance metrics (latency, RPS)

## Root Cause

The CloudFormation template only sets environment variables but does not:
- Mount a config.yaml file
- Configure model_list with fake-openai-endpoint
- Set up the test endpoint needed for benchmarking

## Impact

Users can deploy the infrastructure matching benchmark specs, but cannot
run the actual benchmark without manually configuring models via API or
updating the template to mount a config file.

## Stack Cleanup

The test deployment was deleted to avoid ongoing costs (~$440/month).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-16 14:48:01 -03:00

70 lines
1.9 KiB
Python

"""
Simple load test for LiteLLM that tests health and readiness endpoints
"""
import os
import time
from locust import HttpUser, task, between, events
class HealthCheckUser(HttpUser):
"""
Simple user that only tests health endpoints to measure infrastructure performance
"""
wait_time = between(0.1, 0.3)
@task(10)
def readiness_check(self):
"""Test readiness endpoint"""
with self.client.get(
"/health/readiness",
catch_response=True,
name="Readiness Check"
) as response:
if response.status_code == 200:
response.success()
else:
response.failure(f"Status: {response.status_code}")
@task(5)
def liveliness_check(self):
"""Test liveliness endpoint"""
with self.client.get(
"/health/liveliness",
catch_response=True,
name="Liveliness Check"
) as response:
if response.status_code == 200:
response.success()
else:
response.failure(f"Status: {response.status_code}")
@task(1)
def models_list(self):
"""Test models endpoint"""
with self.client.get(
"/v1/models",
catch_response=True,
name="List Models"
) as response:
if response.status_code == 200:
response.success()
else:
response.failure(f"Status: {response.status_code}")
@events.test_start.add_listener
def on_test_start(environment, **kwargs):
print("\n" + "=" * 60)
print("LiteLLM Infrastructure Performance Test")
print("=" * 60)
print(f"Host: {environment.host}")
print("Testing: Health endpoints and infrastructure")
print("=" * 60 + "\n")
@events.test_stop.add_listener
def on_test_stop(environment, **kwargs):
print("\n" + "=" * 60)
print("Test Completed")
print("=" * 60 + "\n")