diff options
author | Aaron Miller <apage43@ninjawhale.com> | 2023-07-01 11:14:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-01 21:14:59 +0300 |
commit | 2f8cd979ecd1fa582852e7136e92ff8990b98fd8 (patch) | |
tree | 78164d2ee6abe345271599f8b0affdafe8035e1d | |
parent | 471aab6e4cb89d8ef6d043f1bc93acb6eb78ab67 (diff) |
metal : release buffers when freeing metal context (#2062)
-rw-r--r-- | ggml-metal.m | 4 | ||||
-rw-r--r-- | llama.cpp | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/ggml-metal.m b/ggml-metal.m index 7551231..fd69c41 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -202,7 +202,9 @@ struct ggml_metal_context * ggml_metal_init(void) { void ggml_metal_free(struct ggml_metal_context * ctx) { fprintf(stderr, "%s: deallocating\n", __func__); - + for (int i = 0; i < ctx->n_buffers; ++i) { + [ctx->buffers[i].metal release]; + } free(ctx); } @@ -253,7 +253,13 @@ struct llama_model { struct llama_context { llama_context(const llama_model & model, const llama_vocab & vocab) : model(model), vocab(vocab), t_load_us(model.t_load_us), t_start_us(model.t_start_us) {} - +#ifdef GGML_USE_METAL + ~llama_context() { + if (ctx_metal) { + ggml_metal_free(ctx_metal); + } + } +#endif std::mt19937 rng; bool has_evaluated_once = false; |