SensorflowStudio / tests /test_nextgen /test_cache_compute.py
whassan's picture
Deploy Sensorflow Studio (part 4)
d4d5551 verified
Raw History Blame Contribute Delete
2.69 kB
"""Content-addressed cache: hits, version-bump misses, measured speedup."""
from __future__ import annotations
import time
from sensorflow.nextgen.cache import (
CacheKeyVersions, FeatureCache, get_feature_cache,
)
from sensorflow.nextgen import compute as compute_mod
def test_hit_on_identical_versions_miss_on_any_bump():
v = CacheKeyVersions()
key = v.key_for("scene-1")
assert key == CacheKeyVersions().key_for("scene-1") # content-addressed
# ANY single component bump changes the key -> structural miss.
for field in ("sensor_version", "preprocessing_version",
"backbone_version", "feature_schema_version"):
bumped = CacheKeyVersions(**{field: "2.0"})
assert bumped.key_for("scene-1") != key
assert v.key_for("scene-2") != key
def test_cache_serves_hits_without_recompute():
cache = FeatureCache(subdir="cache-test")
calls = {"n": 0}
def compute():
calls["n"] += 1
return {"payload": list(range(100))}
key = CacheKeyVersions().key_for("scene-x")
a = cache.get_or_compute(key, compute)
b = cache.get_or_compute(key, compute)
assert a == b
assert calls["n"] == 1
assert cache.stats.hits == 1 and cache.stats.misses == 1
# Version bump -> different key -> recompute (never cross-version reuse).
key2 = CacheKeyVersions(backbone_version="bev-2.0").key_for("scene-x")
cache.get_or_compute(key2, compute)
assert calls["n"] == 2
def test_benchmark_measures_real_speedup_and_hit_rate():
result = compute_mod.benchmark(n_scenarios=3, frames_per_sequence=10,
persist=False)
# cold pass misses (one per scenario), warm pass hits everything
assert result.cache_misses == 3
assert result.cache_hits == 3
assert result.hit_rate == 0.5
# dedup must beat naive scenario x model full inference substantially
assert result.savings_ratio > 0.4
assert result.optimized_cost_s < result.naive_cost_s
assert result.measured_backbone_s > result.measured_head_s
assert "version bump" in result.invalidation
def test_warm_rerun_measured_faster_than_cold():
cache = get_feature_cache()
from sensorflow.bevfusion.scenes import generate_sequences
seqs = generate_sequences(n_sequences=2, frames_per_sequence=10, seed=7)
models = ["baseline-v3", "candidate-v4"]
t0 = time.perf_counter()
compute_mod.evaluate_scenarios(seqs, models)
cold = time.perf_counter() - t0
t0 = time.perf_counter()
compute_mod.evaluate_scenarios(seqs, models)
warm = time.perf_counter() - t0
assert warm < cold / 2 # measured speedup threshold
assert cache.stats.hits >= 2