vulkan: Get FilterID from Backend for Vulkan (#12655)

* vulkan: Get FilterID from Backend for Vulkan

* Fixing patch
This commit is contained in:
Thomas Stocker 2025-10-16 18:07:35 +02:00 committed by GitHub
parent 4be41d2d45
commit c744134287
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 11 additions and 9 deletions

View File

@ -550,13 +550,6 @@ func bootstrapDevices(ctx context.Context, ollamaLibDirs []string, extraEnvs []s
} }
logutil.Trace("runner enumerated devices", "OLLAMA_LIBRARY_PATH", ollamaLibDirs, "devices", devices) 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 return devices
} }

View File

@ -22,7 +22,7 @@ diff --git a/ggml/include/ggml-backend.h b/ggml/include/ggml-backend.h
index ba181d09..09ff75f9 100644 index ba181d09..09ff75f9 100644
--- a/ggml/include/ggml-backend.h --- a/ggml/include/ggml-backend.h
+++ b/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; const char * device_id;
// device capabilities // device capabilities
struct ggml_backend_dev_caps caps; struct ggml_backend_dev_caps caps;
@ -35,6 +35,8 @@ index ba181d09..09ff75f9 100644
+ int pci_device_id; + int pci_device_id;
+ int pci_domain_id; + int pci_domain_id;
+ const char *library; + 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); GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device);

View File

@ -175,7 +175,7 @@ index adea7783..fb7204ce 100644
ggml_backend_vk_device_get_memory(dev, &props->memory_free, &props->memory_total); ggml_backend_vk_device_get_memory(dev, &props->memory_free, &props->memory_total);
props->caps = { props->caps = {
/* .async = */ false, /* .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, /* .buffer_from_host_ptr = */ false,
/* .events = */ false, /* .events = */ false,
}; };
@ -189,6 +189,7 @@ index adea7783..fb7204ce 100644
+ props->pci_device_id = ctx->pci_device_id; + props->pci_device_id = ctx->pci_device_id;
+ props->pci_domain_id = ctx->pci_domain_id; + props->pci_domain_id = ctx->pci_domain_id;
+ props->library = GGML_VK_NAME; + 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) { static ggml_backend_t ggml_backend_vk_device_init(ggml_backend_dev_t dev, const char * params) {

View File

@ -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.PCIID = fmt.Sprintf("%02x:%02x.%x", props.pci_bus_id, props.pci_device_id, props.pci_domain_id)
info.LibraryPath = ggml.LibPaths() 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) C.ggml_backend_dev_memory(dev, &props.memory_free, &props.memory_total)
info.TotalMemory = (uint64)(props.memory_total) info.TotalMemory = (uint64)(props.memory_total)

View File

@ -178,6 +178,8 @@ extern "C" {
int pci_device_id; int pci_device_id;
int pci_domain_id; int pci_domain_id;
const char *library; 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); GGML_API const char * ggml_backend_dev_name(ggml_backend_dev_t device);

View File

@ -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_device_id = ctx->pci_device_id;
props->pci_domain_id = ctx->pci_domain_id; props->pci_domain_id = ctx->pci_domain_id;
props->library = GGML_VK_NAME; 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) { static ggml_backend_t ggml_backend_vk_device_init(ggml_backend_dev_t dev, const char * params) {