Skip to content

Commit 7b2477c

Browse files
author
ashwinijadhavpartner
committed
Fixed Eval Bug: 12163 : Fallback to CPU when loading model: vk::PhysicalDevice::createDevice: ErrorExtensionNotPresent.
1 parent e128a1b commit 7b2477c

File tree

5 files changed

+379
-82
lines changed

5 files changed

+379
-82
lines changed

ggml/src/ggml-alloc.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,11 @@ static bool alloc_tensor_range(struct ggml_context * ctx,
982982
}
983983

984984
ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft) {
985+
986+
if (buft == NULL) {
987+
// Fall back to CPU buffer type
988+
return ggml_backend_alloc_ctx_tensors_from_buft(ctx, ggml_backend_cpu_buffer_type());
989+
}
985990
GGML_ASSERT(ggml_get_no_alloc(ctx) == true);
986991

987992
size_t alignment = ggml_backend_buft_get_alignment(buft);

ggml/src/ggml-backend.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ const char * ggml_backend_buft_name(ggml_backend_buffer_type_t buft) {
3636
}
3737

3838
ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
39+
if (buft == NULL) {
40+
// Fall back to CPU buffer type
41+
return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
42+
}
43+
3944
if (size == 0) {
4045
// return a dummy buffer for zero-sized allocations
4146
return ggml_backend_buffer_init(buft, {}, NULL, 0);
@@ -45,11 +50,20 @@ ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer_type_t
4550
}
4651

4752
size_t ggml_backend_buft_get_alignment(ggml_backend_buffer_type_t buft) {
53+
if (buft == NULL) {
54+
// Return a safe default alignment or use CPU buffer type's alignment
55+
return ggml_backend_buft_get_alignment(ggml_backend_cpu_buffer_type());
56+
}
4857
return buft->iface.get_alignment(buft);
4958
}
5059

5160
size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) {
5261
// get_max_size is optional, defaults to SIZE_MAX
62+
if (buft == NULL) {
63+
// Return a safe default (CPU buffer type's max size)
64+
return ggml_backend_buft_get_max_size(ggml_backend_cpu_buffer_type());
65+
}
66+
5367
if (buft->iface.get_max_size) {
5468
return buft->iface.get_max_size(buft);
5569
}
@@ -58,6 +72,11 @@ size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) {
5872

5973
size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor) {
6074
// get_alloc_size is optional, defaults to ggml_nbytes
75+
if (buft == NULL) {
76+
// Return ggml_nbytes as fallback
77+
return ggml_nbytes(tensor);
78+
}
79+
6180
if (buft->iface.get_alloc_size) {
6281
size_t size = buft->iface.get_alloc_size(buft, tensor);
6382
assert(size >= ggml_nbytes(tensor));
@@ -67,13 +86,20 @@ size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, struct
6786
}
6887

6988
bool ggml_backend_buft_is_host(ggml_backend_buffer_type_t buft) {
89+
if (buft == NULL) {
90+
return true; // CPU is host, so assume true for NULL
91+
}
92+
7093
if (buft->iface.is_host) {
7194
return buft->iface.is_host(buft);
7295
}
7396
return false;
7497
}
7598

7699
ggml_backend_dev_t ggml_backend_buft_get_device(ggml_backend_buffer_type_t buft) {
100+
if (buft == NULL) {
101+
return NULL;
102+
}
77103
return buft->device;
78104
}
79105

0 commit comments

Comments
 (0)