From c744134287788cef18a64f7c022fc7cfee9a8737 Mon Sep 17 00:00:00 2001 From: Thomas Stocker Date: Thu, 16 Oct 2025 18:07:35 +0200 Subject: [PATCH] vulkan: Get FilterID from Backend for Vulkan (#12655) * vulkan: Get FilterID from Backend for Vulkan * Fixing patch --- discover/runner.go | 7 ------- llama/patches/0026-GPU-discovery-enhancements.patch | 4 +++- llama/patches/0028-vulkan-pci-and-memory.patch | 3 ++- ml/backend/ggml/ggml.go | 3 +++ ml/backend/ggml/ggml/include/ggml-backend.h | 2 ++ ml/backend/ggml/ggml/src/ggml-vulkan/ggml-vulkan.cpp | 1 + 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/discover/runner.go b/discover/runner.go index 318d4059..21fca950 100644 --- a/discover/runner.go +++ b/discover/runner.go @@ -550,13 +550,6 @@ func bootstrapDevices(ctx context.Context, ollamaLibDirs []string, extraEnvs []s } logutil.Trace("runner enumerated devices", "OLLAMA_LIBRARY_PATH", ollamaLibDirs, "devices", devices) - // Enumerate returned devices starting at 0 per library and assign the per-library index as FilteredID - libCounts := make(map[string]int) - for i := range devices { - lib := devices[i].Library - devices[i].FilteredID = strconv.Itoa(libCounts[lib]) - libCounts[lib]++ - } return devices } diff --git a/llama/patches/0026-GPU-discovery-enhancements.patch b/llama/patches/0026-GPU-discovery-enhancements.patch index e7073914..b505f900 100644 --- a/llama/patches/0026-GPU-discovery-enhancements.patch +++ b/llama/patches/0026-GPU-discovery-enhancements.patch @@ -22,7 +22,7 @@ diff --git a/ggml/include/ggml-backend.h b/ggml/include/ggml-backend.h index ba181d09..09ff75f9 100644 --- a/ggml/include/ggml-backend.h +++ b/ggml/include/ggml-backend.h -@@ -169,6 +169,15 @@ extern "C" { +@@ -169,6 +169,17 @@ extern "C" { const char * device_id; // device capabilities struct ggml_backend_dev_caps caps; @@ -35,6 +35,8 @@ index ba181d09..09ff75f9 100644 + int pci_device_id; + int pci_domain_id; + const char *library; ++ // number with which the devices are accessed (Vulkan) ++ const char *numeric_id; }; GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device); diff --git a/llama/patches/0028-vulkan-pci-and-memory.patch b/llama/patches/0028-vulkan-pci-and-memory.patch index 337eb847..c20ccf5c 100644 --- a/llama/patches/0028-vulkan-pci-and-memory.patch +++ b/llama/patches/0028-vulkan-pci-and-memory.patch @@ -175,7 +175,7 @@ index adea7783..fb7204ce 100644 ggml_backend_vk_device_get_memory(dev, &props->memory_free, &props->memory_total); props->caps = { /* .async = */ false, -@@ -12564,6 +12633,16 @@ static void ggml_backend_vk_device_get_props(ggml_backend_dev_t dev, struct ggml +@@ -12564,6 +12633,17 @@ static void ggml_backend_vk_device_get_props(ggml_backend_dev_t dev, struct ggml /* .buffer_from_host_ptr = */ false, /* .events = */ false, }; @@ -189,6 +189,7 @@ index adea7783..fb7204ce 100644 + props->pci_device_id = ctx->pci_device_id; + props->pci_domain_id = ctx->pci_domain_id; + props->library = GGML_VK_NAME; ++ props->numeric_id = ctx->id.empty() ? nullptr : ctx->id.c_str(); } static ggml_backend_t ggml_backend_vk_device_init(ggml_backend_dev_t dev, const char * params) { diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index 07e55dd3..88078d77 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -726,6 +726,9 @@ func (b *Backend) BackendDevices() []ml.DeviceInfo { } info.PCIID = fmt.Sprintf("%02x:%02x.%x", props.pci_bus_id, props.pci_device_id, props.pci_domain_id) info.LibraryPath = ggml.LibPaths() + if props.numeric_id != nil { + info.FilteredID = C.GoString(props.numeric_id) + } C.ggml_backend_dev_memory(dev, &props.memory_free, &props.memory_total) info.TotalMemory = (uint64)(props.memory_total) diff --git a/ml/backend/ggml/ggml/include/ggml-backend.h b/ml/backend/ggml/ggml/include/ggml-backend.h index 09ff75f9..094fc3c8 100644 --- a/ml/backend/ggml/ggml/include/ggml-backend.h +++ b/ml/backend/ggml/ggml/include/ggml-backend.h @@ -178,6 +178,8 @@ extern "C" { int pci_device_id; int pci_domain_id; const char *library; + // number with which the devices are accessed (Vulkan) + const char *numeric_id; }; GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device); diff --git a/ml/backend/ggml/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ml/backend/ggml/ggml/src/ggml-vulkan/ggml-vulkan.cpp index aa48a63c..564bc4a7 100644 --- a/ml/backend/ggml/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ml/backend/ggml/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -12640,6 +12640,7 @@ static void ggml_backend_vk_device_get_props(ggml_backend_dev_t dev, struct ggml props->pci_device_id = ctx->pci_device_id; props->pci_domain_id = ctx->pci_domain_id; props->library = GGML_VK_NAME; + props->numeric_id = ctx->id.empty() ? nullptr : ctx->id.c_str(); } static ggml_backend_t ggml_backend_vk_device_init(ggml_backend_dev_t dev, const char * params) {