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_ptrs 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_cpuis moved from here:and then pushed to
backend_ptrshere:which causes a segfault in ggml-backend.cpp when that backend (
NULL) is attempted to have itsdevicemember accessed:This PR fixes that, and then also properly checks which backend
unique_ptris pointing to a cpu backend to setn_threads.Repro
The issue can be observed by setting
use_gputo false in gemma3-cli.cpp.Click to see segfault in output
Fix
Output with these changes
Click to see correct output