From 396f745ae1422599590bbeb2126edf3cbff6fddd Mon Sep 17 00:00:00 2001 From: Wagner Bruna Date: Sun, 31 Aug 2025 13:15:16 -0300 Subject: [PATCH] feat: throttle model loading progress updates Some terminals have slow display latency, so frequent output during model loading can actually slow down the process. Also, since tensor loading times can vary a lot, the progress display now shows the average across past iterations instead of just the last one. --- model.cpp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/model.cpp b/model.cpp index df1c8637f..958ff2c52 100644 --- a/model.cpp +++ b/model.cpp @@ -1942,8 +1942,11 @@ bool ModelLoader::load_tensors(on_new_tensor_cb_t on_new_tensor_cb, ggml_backend return true; }; int tensor_count = 0; - int64_t t1 = ggml_time_ms(); - bool partial = false; + int64_t t0 = ggml_time_ms(); + int64_t t1 = t0; + bool partial = true; + int tensor_max = (int)processed_tensor_storages.size(); + pretty_progress(0, tensor_max, 0.0f); for (auto& tensor_storage : processed_tensor_storages) { if (tensor_storage.file_index != file_index) { ++tensor_count; @@ -2046,19 +2049,27 @@ bool ModelLoader::load_tensors(on_new_tensor_cb_t on_new_tensor_cb, ggml_backend ggml_backend_tensor_set(dst_tensor, convert_buffer.data(), 0, ggml_nbytes(dst_tensor)); } } - size_t tensor_max = processed_tensor_storages.size(); - int64_t t2 = ggml_time_ms(); - pretty_progress(++tensor_count, tensor_max, (t2 - t1) / 1000.0f); - t1 = t2; - partial = tensor_count != tensor_max; + ++tensor_count; + int64_t t2 = ggml_time_ms(); + if ((t2 - t1) >= 200) { + t1 = t2; + pretty_progress(tensor_count, tensor_max, (t1 - t0) / (1000.0f * tensor_count)); + partial = tensor_count != tensor_max; + } } - if (zip != NULL) { - zip_close(zip); + if (partial) { + if (tensor_count >= 1) { + t1 = ggml_time_ms(); + pretty_progress(tensor_count, tensor_max, (t1 - t0) / (1000.0f * tensor_count)); + } + if (tensor_count < tensor_max) { + printf("\n"); + } } - if (partial) { - printf("\n"); + if (zip != NULL) { + zip_close(zip); } if (!success) {