Skip to content

Commit f057808

Browse files
authored
ggml: Don't assert fail when tensor data changes (#13222)
The following scenario will cause an assertion failure in the graph allocator: - Build and allocate a graph containing a tensor with a non-NULL data pointer - Build and allocate a new graph where that data is NULL Result: ggml-alloc.c:819: GGML_ASSERT(talloc->buffer_id >= 0) failed This happens during revalidation because we think that memory should have been previously allocated based on the current graph but in reality the previous graph was different. In this situation, we should do a full reallocation pass.
1 parent d7a14c4 commit f057808

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

ggml/src/ggml-alloc.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,10 @@ static void ggml_gallocr_init_tensor(ggml_gallocr_t galloc, struct ggml_tensor *
816816
static bool ggml_gallocr_node_needs_realloc(ggml_gallocr_t galloc, struct ggml_tensor * node, struct tensor_alloc * talloc) {
817817
size_t node_size = 0;
818818
if (!node->data && !node->view_src) {
819-
GGML_ASSERT(talloc->buffer_id >= 0); // prevent segfault when misusing the API
819+
// If we previously had data but don't now then reallocate
820+
if (talloc->buffer_id < 0) {
821+
return false;
822+
}
820823
node_size = ggml_backend_buft_get_alloc_size(galloc->bufts[talloc->buffer_id], node);
821824
}
822825
return talloc->size_max >= node_size;

0 commit comments

Comments
 (0)