233 lines
9.4 KiB
Python
233 lines
9.4 KiB
Python
"""M10 advanced residency and GPU scheduling.
|
|
|
|
Revision ID: 20260826_0014
|
|
Revises: 20260826_0013
|
|
"""
|
|
|
|
import uuid
|
|
from collections.abc import Sequence
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import op
|
|
|
|
revision: str = "20260826_0014"
|
|
down_revision: str | None = "20260826_0013"
|
|
branch_labels: str | Sequence[str] | None = None
|
|
depends_on: str | Sequence[str] | None = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"residency_allocations",
|
|
sa.Column("generation", sa.Integer(), server_default="1", nullable=False),
|
|
)
|
|
op.add_column(
|
|
"residency_allocations", sa.Column("transition_reason", sa.String(length=64), nullable=True)
|
|
)
|
|
op.add_column(
|
|
"serving_gpu_leases",
|
|
sa.Column(
|
|
"lease_type", sa.String(length=32), server_default="request_execution", nullable=False
|
|
),
|
|
)
|
|
op.add_column(
|
|
"serving_gpu_leases",
|
|
sa.Column("materialized_vram_bytes", sa.BigInteger(), server_default="0", nullable=False),
|
|
)
|
|
op.add_column("serving_gpu_leases", sa.Column("serving_job_id", sa.Uuid(), nullable=True))
|
|
op.add_column(
|
|
"serving_gpu_leases",
|
|
sa.Column("generation", sa.Integer(), server_default="1", nullable=False),
|
|
)
|
|
op.create_foreign_key(
|
|
"fk_serving_gpu_leases_job",
|
|
"serving_gpu_leases",
|
|
"serving_jobs",
|
|
["serving_job_id"],
|
|
["id"],
|
|
ondelete="SET NULL",
|
|
)
|
|
op.create_index(
|
|
"ix_serving_gpu_leases_serving_job_id", "serving_gpu_leases", ["serving_job_id"]
|
|
)
|
|
op.create_table(
|
|
"scheduler_policy_revisions",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("revision", sa.String(length=64), nullable=False),
|
|
sa.Column("configuration", sa.JSON(), nullable=False),
|
|
sa.Column("active", sa.Boolean(), nullable=False),
|
|
sa.Column(
|
|
"created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("revision"),
|
|
)
|
|
op.create_index(
|
|
"ix_scheduler_policy_revisions_active", "scheduler_policy_revisions", ["active"]
|
|
)
|
|
policy_table = sa.table(
|
|
"scheduler_policy_revisions",
|
|
sa.column("id", sa.Uuid()),
|
|
sa.column("revision", sa.String()),
|
|
sa.column("configuration", sa.JSON()),
|
|
sa.column("active", sa.Boolean()),
|
|
)
|
|
op.bulk_insert(
|
|
policy_table,
|
|
[
|
|
{
|
|
"id": uuid.UUID("8e4d6a85-8e50-4f78-a182-000000000010"),
|
|
"revision": "m10-v1",
|
|
"configuration": {
|
|
"reserve_minimum_bytes": 1073741824,
|
|
"reserve_percentage": 0.05,
|
|
"runtime_margin_bytes": 268435456,
|
|
"deployment_margin_minimum_bytes": 134217728,
|
|
"deployment_margin_percentage": 0.1,
|
|
"request_execution_floor_bytes": 67108864,
|
|
"pressure_stable_seconds": 30,
|
|
"eviction_cooldown_seconds": 60,
|
|
"global_queue_limit": 128,
|
|
"placement_history_limit": 500,
|
|
"lab_paused": False,
|
|
},
|
|
"active": True,
|
|
}
|
|
],
|
|
)
|
|
op.create_table(
|
|
"scheduler_accelerator_states",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("accelerator_id", sa.Uuid(), nullable=False),
|
|
sa.Column("pressure_state", sa.String(length=16), nullable=False),
|
|
sa.Column("recovery_candidate", sa.String(length=16), nullable=True),
|
|
sa.Column("recovery_candidate_since", sa.DateTime(timezone=True), nullable=True),
|
|
sa.Column(
|
|
"pressure_changed_at",
|
|
sa.DateTime(timezone=True),
|
|
server_default=sa.func.now(),
|
|
nullable=False,
|
|
),
|
|
sa.Column(
|
|
"last_observed_at",
|
|
sa.DateTime(timezone=True),
|
|
server_default=sa.func.now(),
|
|
nullable=False,
|
|
),
|
|
sa.ForeignKeyConstraint(["accelerator_id"], ["accelerators.id"], ondelete="CASCADE"),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("accelerator_id"),
|
|
)
|
|
op.create_index(
|
|
"ix_scheduler_accelerator_states_accelerator_id",
|
|
"scheduler_accelerator_states",
|
|
["accelerator_id"],
|
|
unique=True,
|
|
)
|
|
op.create_table(
|
|
"placement_plans",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("capability_deployment_id", sa.Uuid(), nullable=False),
|
|
sa.Column("request_id", sa.Uuid(), nullable=True),
|
|
sa.Column("policy_revision", sa.String(length=64), nullable=False),
|
|
sa.Column("verdict", sa.String(length=32), nullable=False),
|
|
sa.Column("reason_codes", sa.JSON(), nullable=False),
|
|
sa.Column("evidence", sa.JSON(), nullable=False),
|
|
sa.Column("evidence_fingerprint", sa.String(length=64), nullable=False),
|
|
sa.Column("dry_run", sa.Boolean(), nullable=False),
|
|
sa.Column(
|
|
"created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["capability_deployment_id"], ["capability_deployments.id"], ondelete="RESTRICT"
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
for column in (
|
|
"capability_deployment_id",
|
|
"request_id",
|
|
"verdict",
|
|
"evidence_fingerprint",
|
|
"created_at",
|
|
):
|
|
op.create_index(f"ix_placement_plans_{column}", "placement_plans", [column])
|
|
op.create_table(
|
|
"co_residency_evidence",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("left_deployment_id", sa.Uuid(), nullable=False),
|
|
sa.Column("right_deployment_id", sa.Uuid(), nullable=False),
|
|
sa.Column("status", sa.String(length=32), nullable=False),
|
|
sa.Column("expected_combined_bytes", sa.BigInteger(), nullable=False),
|
|
sa.Column("measured_combined_bytes", sa.BigInteger(), nullable=True),
|
|
sa.Column("evidence", sa.JSON(), nullable=False),
|
|
sa.Column("measured_at", sa.DateTime(timezone=True), nullable=True),
|
|
sa.Column(
|
|
"created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["left_deployment_id"], ["capability_deployments.id"], ondelete="RESTRICT"
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["right_deployment_id"], ["capability_deployments.id"], ondelete="RESTRICT"
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint(
|
|
"left_deployment_id", "right_deployment_id", name="uq_co_residency_pair"
|
|
),
|
|
)
|
|
for column in ("left_deployment_id", "right_deployment_id", "status"):
|
|
op.create_index(f"ix_co_residency_evidence_{column}", "co_residency_evidence", [column])
|
|
op.create_table(
|
|
"scheduler_evictions",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("capability_deployment_id", sa.Uuid(), nullable=False),
|
|
sa.Column("requested_deployment_id", sa.Uuid(), nullable=True),
|
|
sa.Column("reason_code", sa.String(length=64), nullable=False),
|
|
sa.Column("expected_reclaimed_bytes", sa.BigInteger(), nullable=False),
|
|
sa.Column("actual_reclaimed_bytes", sa.BigInteger(), nullable=True),
|
|
sa.Column("state", sa.String(length=32), nullable=False),
|
|
sa.Column(
|
|
"created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["capability_deployment_id"], ["capability_deployments.id"], ondelete="RESTRICT"
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["requested_deployment_id"], ["capability_deployments.id"], ondelete="SET NULL"
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
for column in ("capability_deployment_id", "requested_deployment_id", "reason_code"):
|
|
op.create_index(f"ix_scheduler_evictions_{column}", "scheduler_evictions", [column])
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index(
|
|
"ix_scheduler_accelerator_states_accelerator_id", table_name="scheduler_accelerator_states"
|
|
)
|
|
op.drop_table("scheduler_accelerator_states")
|
|
for column in ("capability_deployment_id", "requested_deployment_id", "reason_code"):
|
|
op.drop_index(f"ix_scheduler_evictions_{column}", table_name="scheduler_evictions")
|
|
op.drop_table("scheduler_evictions")
|
|
for column in ("left_deployment_id", "right_deployment_id", "status"):
|
|
op.drop_index(f"ix_co_residency_evidence_{column}", table_name="co_residency_evidence")
|
|
op.drop_table("co_residency_evidence")
|
|
for column in (
|
|
"capability_deployment_id",
|
|
"request_id",
|
|
"verdict",
|
|
"evidence_fingerprint",
|
|
"created_at",
|
|
):
|
|
op.drop_index(f"ix_placement_plans_{column}", table_name="placement_plans")
|
|
op.drop_table("placement_plans")
|
|
op.drop_index("ix_scheduler_policy_revisions_active", table_name="scheduler_policy_revisions")
|
|
op.drop_table("scheduler_policy_revisions")
|
|
op.drop_index("ix_serving_gpu_leases_serving_job_id", table_name="serving_gpu_leases")
|
|
op.drop_constraint("fk_serving_gpu_leases_job", "serving_gpu_leases", type_="foreignkey")
|
|
for column in ("generation", "serving_job_id", "materialized_vram_bytes", "lease_type"):
|
|
op.drop_column("serving_gpu_leases", column)
|
|
op.drop_column("residency_allocations", "transition_reason")
|
|
op.drop_column("residency_allocations", "generation")
|