llava: Fix cpu-only clip image encoding sefault #12907
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Properly manage/use backend
unique_ptr
s and the memory that they point to in clip.cpp when only using cpu backend. Note that I've observed CPU-only to perform better than Metal on my M3 Pro 36GB for image encoding in certain situations.Issue
In clip.cpp,
backend_cpu
is moved from here:and then pushed to
backend_ptrs
here:which causes a segfault in ggml-backend.cpp when that backend (
NULL
) is attempted to have itsdevice
member accessed:This PR fixes that, and then also properly checks which backend
unique_ptr
is pointing to a cpu backend to setn_threads
.Repro
The issue can be observed by setting
use_gpu
to false in gemma3-cli.cpp.Click to see segfault in output
Fix
Output with these changes
Click to see correct output