Pick cheapest GPU SKU and pin the VM to an existing disk AZ.
Scan ru-6 by Nova availability zones (a/b/c). First boot uses FLAVOR_SIZE_PRESET=cheap; reruns stay on the disk segment. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+55
-3
@@ -9,13 +9,25 @@ from gpu_rent.inventory import (
|
||||
|
||||
|
||||
class FakeFlavor:
|
||||
def __init__(self, flavor_id: str, name: str, extra=None, disabled: bool = False):
|
||||
def __init__(
|
||||
self,
|
||||
flavor_id: str,
|
||||
name: str,
|
||||
extra=None,
|
||||
disabled: bool = False,
|
||||
vcpus: int = 8,
|
||||
ram: int = 32768,
|
||||
disk: int = 0,
|
||||
availability_zones=None,
|
||||
):
|
||||
self.id = flavor_id
|
||||
self.name = name
|
||||
self.extra_specs = extra or {}
|
||||
self.is_disabled = disabled
|
||||
self.vcpus = 8
|
||||
self.ram = 32768
|
||||
self.vcpus = vcpus
|
||||
self.ram = ram
|
||||
self.disk = disk
|
||||
self.availability_zones = list(availability_zones or [])
|
||||
|
||||
|
||||
def test_match_4090_24_not_48():
|
||||
@@ -74,6 +86,46 @@ def test_resolve_flavor_no_fallback_requires_default():
|
||||
assert picked.id == "ok"
|
||||
|
||||
|
||||
def test_rank_cheap_prefers_1gpu_min_sku():
|
||||
extra = {"aggregate_instance_extra_specs:gpu": "RTX4090", "gpu_memory": "24"}
|
||||
flavors = [
|
||||
FakeFlavor("dual", "GL10.8-65536-0-2GPU", extra, vcpus=8, ram=65536),
|
||||
FakeFlavor("fat", "GL10.8-32768-0-1GPU", extra, vcpus=8, ram=32768),
|
||||
FakeFlavor("tiny", "GL10.4-16384-0-1GPU", extra, vcpus=4, ram=16384),
|
||||
]
|
||||
ranked = rank_flavors(flavors, ("4090-24",), size_preset="cheap")
|
||||
assert ranked[0].id == "tiny"
|
||||
assert ranked[0].gpu_count == 1
|
||||
balanced = rank_flavors(flavors, ("4090-24",), size_preset="balanced")
|
||||
assert balanced[0].id == "fat"
|
||||
|
||||
|
||||
def test_rank_filters_availability_zone():
|
||||
extra = {"aggregate_instance_extra_specs:gpu": "RTX4090", "gpu_memory": "24"}
|
||||
flavors = [
|
||||
FakeFlavor(
|
||||
"a",
|
||||
"GL10.4-16384-0-1GPU",
|
||||
extra,
|
||||
vcpus=4,
|
||||
ram=16384,
|
||||
availability_zones=["ru-6a"],
|
||||
),
|
||||
FakeFlavor(
|
||||
"h200",
|
||||
"GL-H200",
|
||||
{"aggregate_instance_extra_specs:gpu": "H200"},
|
||||
vcpus=12,
|
||||
ram=120000,
|
||||
availability_zones=["ru-6b"],
|
||||
),
|
||||
]
|
||||
in_a = rank_flavors(flavors, ("4090-24", "a5000"), az="ru-6a")
|
||||
assert [x.id for x in in_a] == ["a"]
|
||||
in_b = rank_flavors(flavors, ("4090-24",), az="ru-6b")
|
||||
assert in_b == []
|
||||
|
||||
|
||||
def test_pick_boot_image_prefers_24_580_without_docker():
|
||||
class Img:
|
||||
def __init__(self, name):
|
||||
|
||||
Reference in New Issue
Block a user