• Stefy Lanza (nextime / spora )'s avatar
    runpod: a fleet that grew for a burst has to give the pods back (v0.3.11) · de706ddb
    Stefy Lanza (nextime / spora ) authored
    Only half the scaler existed. The pool adds a pod once every pod it has carries
    scale_up_inflight_per_pod requests, and pods went away again only through the
    idle reaper — which fires on a pod with NO work and no request for
    idle_timeout_s.
    
    That misses the expensive case. A pool that grew for a burst and is now serving
    a trickle keeps every pod: each is touched often enough that last_used never
    ages out, each is a fraction busy, and the bill stays at the peak for as long as
    the trickle lasts. With max_pods raised to 64 that is the difference between a
    few dollars an hour and a few hundred.
    
    So the pool also asks how many pods the CURRENT concurrency justifies and
    retires the excess. The rules that matter are not "fewer pods":
    
      * work is never dropped to save money. The pod retired is the least loaded,
        and if it still has requests it is marked draining — no new work, and
        terminated only once it has finished what it had;
      * one pod per pass, after the surplus has persisted for scale_down_after_s,
        and the window restarts after each retirement. A dip of a few seconds must
        not cost a pod wanted again seconds later: a cold one takes minutes;
      * a quiet pool is NOT this routine's business. With nothing in flight,
        teardown stays entirely with idle_timeout_s — a number the operator chose,
        weighing the bill against a cold start — so this never silently shortens it.
    
    A draining pod is also excluded from the growth decision, which reads the LEAST
    loaded pod: an emptying drainer would otherwise answer "no need to grow" with
    the one pod that cannot take the work.
    
    Two existing tests had to change. A _Pod stub stood in for PodHandle without
    the new field, and a source-text assertion used a 600-character window that a
    new field plus its comment pushed data_center out of — now asserted against the
    whole class, which is what it was always about.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PxYHWbCAjjjD7A1rhFKtaW
    de706ddb
Name
Last commit
Last update
..
conftest.py Loading commit data...
test_admin_auth.py Loading commit data...
test_admin_forward_auth.py Loading commit data...
test_admin_remote_ui.py Loading commit data...
test_audio_ml_backends.py Loading commit data...
test_audio_ml_endpoints.py Loading commit data...
test_autoupgrade.py Loading commit data...
test_autoupgrade_recovers_a_down_server.py Loading commit data...
test_autoupgrade_sees_training.py Loading commit data...
test_broker_config.py Loading commit data...
test_broker_dispatch.py Loading commit data...
test_broker_protocol.py Loading commit data...
test_broker_shutdown.py Loading commit data...
test_broker_streaming.py Loading commit data...
test_burst_placement.py Loading commit data...
test_character_studio_fetch.py Loading commit data...
test_cluster.py Loading commit data...
test_compose.py Loading commit data...
test_forward_auth_peer_trust.py Loading commit data...
test_front_api_auth.py Loading commit data...
test_front_ocr_swap_gate.py Loading commit data...
test_image_has_c_compiler.py Loading commit data...
test_longcat_avatar_layout.py Loading commit data...
test_longcat_bsa.py Loading commit data...
test_longcat_cancellable.py Loading commit data...
test_longcat_checkpoint_resolve.py Loading commit data...
test_longcat_component_quant.py Loading commit data...
test_longcat_config_ui.py Loading commit data...
test_longcat_external_training.py Loading commit data...
test_longcat_int8_load.py Loading commit data...
test_longcat_lora.py Loading commit data...
test_longcat_orchestration.py Loading commit data...
test_longcat_packaging.py Loading commit data...
test_longcat_placement.py Loading commit data...
test_longcat_progress.py Loading commit data...
test_longcat_prompt_cache.py Loading commit data...
test_longcat_quantize.py Loading commit data...
test_longcat_scale.py Loading commit data...
test_longcat_tasks.py Loading commit data...
test_longcat_variants.py Loading commit data...
test_longcat_vendored_source.py Loading commit data...
test_longcat_venv_env.py Loading commit data...
test_longcat_vram_estimate.py Loading commit data...
test_longcat_worker.py Loading commit data...
test_manual_multimodal_test_client.py Loading commit data...
test_model_scan_cache.py Loading commit data...
test_ocr_fanout.py Loading commit data...
test_ocr_olmocr.py Loading commit data...
test_ocr_served_model.py Loading commit data...
test_ocr_vram_share_and_fallback.py Loading commit data...
test_oom_priority.py Loading commit data...
test_proxy_logprobs.py Loading commit data...
test_remote_execution.py Loading commit data...
test_runpod_client_scale.py Loading commit data...
test_runpod_fleet_status.py Loading commit data...
test_runpod_global_volume.py Loading commit data...
test_runpod_ocr_remotization.py Loading commit data...
test_runpod_placement.py Loading commit data...
test_runpod_pod_extra_args.py Loading commit data...
test_runpod_scale_down.py Loading commit data...
test_runpod_schedule_region_spend.py Loading commit data...
test_studio_composed_surfaces.py Loading commit data...
test_surya_runpod_fixes.py Loading commit data...
test_township_api_key.py Loading commit data...
test_township_clip_geometry.py Loading commit data...
test_township_longcat.py Loading commit data...
test_township_page_js.py Loading commit data...
test_township_templates.py Loading commit data...
test_township_video_dataset.py Loading commit data...
test_upgrade_launcher.py Loading commit data...
test_video_as_b64_scope.py Loading commit data...
test_video_geometry.py Loading commit data...
test_vllm_share_self_tuning.py Loading commit data...
test_vram_releasers.py Loading commit data...
test_weight_stores.py Loading commit data...
test_whisper_server_local_models.py Loading commit data...