Skip to content

Commit 1706b32

Browse files
authored
fix: re-clamp streaming VRAM budget to currently free memory (#1878)
1 parent 58b6cb6 commit 1706b32

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

src/core/ggml_extend.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2456,13 +2456,14 @@ struct GGMLRunner {
24562456
GGML_ASSERT(gf != nullptr);
24572457

24582458
size_t effective_budget = max_graph_vram_bytes;
2459+
size_t free_clamp = SIZE_MAX;
24592460
if (stream_layers_enabled && max_graph_vram_bytes > 0 && runtime_backend != nullptr) {
24602461
ggml_backend_dev_t dev = ggml_backend_get_device(runtime_backend);
24612462
if (dev != nullptr && ggml_backend_dev_type(dev) != GGML_BACKEND_DEVICE_TYPE_CPU) {
24622463
size_t free_vram = 0, total_vram = 0;
24632464
ggml_backend_dev_memory(dev, &free_vram, &total_vram);
24642465
constexpr size_t safety_margin = 512ull * 1024 * 1024;
2465-
size_t free_clamp = (free_vram > safety_margin) ? (free_vram - safety_margin) : 0;
2466+
free_clamp = (free_vram > safety_margin) ? (free_vram - safety_margin) : 0;
24662467
if (free_clamp < effective_budget) {
24672468
LOG_DEBUG("%s clamping streaming budget: actual free VRAM %.2f MB < user cap %.2f MB",
24682469
get_desc().c_str(),
@@ -2479,7 +2480,9 @@ struct GGMLRunner {
24792480
observed_max_effective_budget_ = effective_budget;
24802481
budget_increased = true;
24812482
} else {
2482-
effective_budget = observed_max_effective_budget_;
2483+
// Keep the plan cache stable, but never plan above what is free now:
2484+
// another model or process can take VRAM after the first measurement.
2485+
effective_budget = std::min(observed_max_effective_budget_, free_clamp);
24832486
}
24842487
}
24852488

0 commit comments

Comments
 (0)