Update Deployment Scaling¶
This example shows how to update and manage the scaling of container deployments in Verda.
Update Deployment Scaling¶
"""Example script demonstrating how to update scaling options for a container deployment.
This script shows how to update scaling configurations for an existing container deployment on Verda.
"""
import os
from verda import VerdaClient
from verda.containers import (
QueueLoadScalingTrigger,
ScalingOptions,
ScalingPolicy,
ScalingTriggers,
UtilizationScalingTrigger,
)
from verda.exceptions import APIException
# Get deployment name, client secret and id from environment variables
DEPLOYMENT_NAME = os.environ.get('VERDA_DEPLOYMENT_NAME')
CLIENT_ID = os.environ.get('VERDA_CLIENT_ID')
CLIENT_SECRET = os.environ.get('VERDA_CLIENT_SECRET')
# Initialize client
verda = VerdaClient(CLIENT_ID, CLIENT_SECRET)
try:
# Get current scaling options
scaling_options = verda.containers.get_deployment_scaling_options(DEPLOYMENT_NAME)
print('Current scaling configuration:\n')
print(f'Min replicas: {scaling_options.min_replica_count}')
print(f'Max replicas: {scaling_options.max_replica_count}')
print(f'Scale-up delay: {scaling_options.scale_up_policy.delay_seconds} seconds')
print(f'Scale-down delay: {scaling_options.scale_down_policy.delay_seconds} seconds')
print(f'Queue message TTL: {scaling_options.queue_message_ttl_seconds} seconds')
print(f'Concurrent requests per replica: {scaling_options.concurrent_requests_per_replica}')
print('Scaling Triggers:')
print(f' Queue load threshold: {scaling_options.scaling_triggers.queue_load.threshold}')
if scaling_options.scaling_triggers.cpu_utilization:
print(
f' CPU utilization enabled: {scaling_options.scaling_triggers.cpu_utilization.enabled}'
)
print(
f' CPU utilization threshold: {scaling_options.scaling_triggers.cpu_utilization.threshold}%'
)
if scaling_options.scaling_triggers.gpu_utilization:
print(
f' GPU utilization enabled: {scaling_options.scaling_triggers.gpu_utilization.enabled}'
)
if scaling_options.scaling_triggers.gpu_utilization.threshold:
print(
f' GPU utilization threshold: {scaling_options.scaling_triggers.gpu_utilization.threshold}%'
)
# Create scaling options using ScalingOptions dataclass
scaling_options = ScalingOptions(
min_replica_count=1,
max_replica_count=5,
scale_down_policy=ScalingPolicy(delay_seconds=600), # Longer cooldown period
scale_up_policy=ScalingPolicy(delay_seconds=0), # Quick scale-up
queue_message_ttl_seconds=500,
concurrent_requests_per_replica=50, # LLMs can handle concurrent requests
scaling_triggers=ScalingTriggers(
queue_load=QueueLoadScalingTrigger(threshold=1.0),
cpu_utilization=UtilizationScalingTrigger(enabled=True, threshold=75),
gpu_utilization=UtilizationScalingTrigger(
enabled=False # Disable GPU utilization trigger
),
),
)
# Update scaling options
updated_options = verda.containers.update_deployment_scaling_options(
DEPLOYMENT_NAME, scaling_options
)
print('\nUpdated scaling configuration:\n')
print(f'Min replicas: {updated_options.min_replica_count}')
print(f'Max replicas: {updated_options.max_replica_count}')
print(f'Scale-up delay: {updated_options.scale_up_policy.delay_seconds} seconds')
print(f'Scale-down delay: {updated_options.scale_down_policy.delay_seconds} seconds')
print(f'Queue message TTL: {updated_options.queue_message_ttl_seconds} seconds')
print(f'Concurrent requests per replica: {updated_options.concurrent_requests_per_replica}')
print('Scaling Triggers:')
print(f' Queue load threshold: {updated_options.scaling_triggers.queue_load.threshold}')
if updated_options.scaling_triggers.cpu_utilization:
print(
f' CPU utilization enabled: {updated_options.scaling_triggers.cpu_utilization.enabled}'
)
print(
f' CPU utilization threshold: {updated_options.scaling_triggers.cpu_utilization.threshold}%'
)
if updated_options.scaling_triggers.gpu_utilization:
print(
f' GPU utilization enabled: {updated_options.scaling_triggers.gpu_utilization.enabled}'
)
if updated_options.scaling_triggers.gpu_utilization.threshold:
print(
f' GPU utilization threshold: {updated_options.scaling_triggers.gpu_utilization.threshold}%'
)
except APIException as e:
print(f'Error updating scaling options: {e}')
except Exception as e:
print(f'Unexpected error: {e}')