Explorar o código

metal : release buffers when freeing metal context (#2062)

Aaron Miller %!s(int64=2) %!d(string=hai) anos
pai
achega
2f8cd979ec
Modificáronse 2 ficheiros con 10 adicións e 2 borrados
  1. 3 1
      ggml-metal.m
  2. 7 1
      llama.cpp

+ 3 - 1
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);
 }
 

+ 7 - 1
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;