]> git.djapps.eu Git - pkg/ggml/sources/ggml/commitdiff
metal : log more info on error (llama/6987)
authorKevin Gibbons <redacted>
Tue, 30 Apr 2024 09:34:50 +0000 (02:34 -0700)
committerGeorgi Gerganov <redacted>
Sat, 11 May 2024 18:30:08 +0000 (21:30 +0300)
src/ggml-metal.m

index 71b8a099b7e14b60c44f89879c76e20b06f307d2..43752f7295d451a8cb5033ddb9244b297f4885b4 100644 (file)
@@ -2794,6 +2794,45 @@ static enum ggml_status ggml_metal_graph_compute(
         MTLCommandBufferStatus status = [command_buffer status];
         if (status != MTLCommandBufferStatusCompleted) {
             GGML_METAL_LOG_INFO("%s: command buffer %d failed with status %lu\n", __func__, i, status);
+            if (status == MTLCommandBufferStatusError) {
+                MTLCommandBufferError error_code = [command_buffer error].code;
+                switch (error_code) {
+                    case MTLCommandBufferErrorNone:
+                        GGML_METAL_LOG_INFO("no error code reported\n");
+                        break;
+                    case MTLCommandBufferErrorTimeout:
+                        GGML_METAL_LOG_INFO("timeout\n");
+                        break;
+                    case MTLCommandBufferErrorPageFault:
+                        GGML_METAL_LOG_INFO("unserviceable page fault\n");
+                        break;
+                    case MTLCommandBufferErrorOutOfMemory:
+                        GGML_METAL_LOG_INFO("out of memory\n");
+                        break;
+                    case MTLCommandBufferErrorInvalidResource:
+                        GGML_METAL_LOG_INFO("invalid reference to resource\n");
+                        break;
+                    case MTLCommandBufferErrorMemoryless:
+                        GGML_METAL_LOG_INFO("GPU ran out of one or more of its internal resources that support memoryless render pass attachments\n");
+                        break;
+                    case MTLCommandBufferErrorDeviceRemoved:
+                        GGML_METAL_LOG_INFO("device removed\n");
+                        break;
+                    case MTLCommandBufferErrorStackOverflow:
+                        GGML_METAL_LOG_INFO("kernel function of tile shader used too many stack frames\n");
+                        break;
+                    case MTLCommandBufferErrorAccessRevoked:
+                        GGML_METAL_LOG_INFO("access to device revoked by system\n");
+                        break;
+                    case MTLCommandBufferErrorInternal:
+                        GGML_METAL_LOG_INFO("internal error\n");
+                        break;
+                    default:
+                        GGML_METAL_LOG_INFO("unknown error %lu\n", error_code);
+                        break;
+                }
+            }
+
             return GGML_STATUS_FAILED;
         }
     }