aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Miller <apage43@ninjawhale.com>2023-07-01 11:14:59 -0700
committerGitHub <noreply@github.com>2023-07-01 21:14:59 +0300
commit2f8cd979ecd1fa582852e7136e92ff8990b98fd8 (patch)
tree78164d2ee6abe345271599f8b0affdafe8035e1d
parent471aab6e4cb89d8ef6d043f1bc93acb6eb78ab67 (diff)
metal : release buffers when freeing metal context (#2062)
-rw-r--r--ggml-metal.m4
-rw-r--r--llama.cpp8
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);
}
diff --git a/llama.cpp b/llama.cpp
index 69c2ab0..561accf 100644
--- a/llama.cpp
+++ b/llama.cpp
@@ -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;