Skip to content

Commit d4e0ea7

Browse files
jessegrosstimwu
authored andcommitted
ggml: Don't assert fail when tensor data changes (ggml-org#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 64938f0 commit d4e0ea7

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

ggml/src/ggml-alloc.c

Lines changed: 4 additions & 1 deletion
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)