mirror of
https://github.com/ollama/ollama.git
synced 2025-05-11 10:26:53 +02:00
gemma3: Allow multiple image in a single input
Previously processing multiple images in a batch would trigger segfaults so sending images together was disabled as a way to mitigate this. The trigger was processing one image on the CPU and one on the GPU. This can no longer happen: - The vision encoder is now on the GPU so both images would be processed on the GPU. - We require images to be fully contained in a batch and each image including its special tokens is over half the batch size. As a result, we will never get two images in the same batch. Fixes #9731
This commit is contained in:
parent
282bfaaa95
commit
7bf793a600
1 changed files with 1 additions and 11 deletions
|
@ -26,7 +26,6 @@ func chatPrompt(ctx context.Context, m *Model, tokenize tokenizeFunc, opts *api.
|
||||||
var system []api.Message
|
var system []api.Message
|
||||||
|
|
||||||
isMllama := checkMllamaModelFamily(m)
|
isMllama := checkMllamaModelFamily(m)
|
||||||
isGemma3 := checkGemma3ModelFamily(m)
|
|
||||||
|
|
||||||
var imageNumTokens int
|
var imageNumTokens int
|
||||||
// TODO: Ideally we would compute this from the projector metadata but some pieces are implementation dependent
|
// TODO: Ideally we would compute this from the projector metadata but some pieces are implementation dependent
|
||||||
|
@ -41,7 +40,7 @@ func chatPrompt(ctx context.Context, m *Model, tokenize tokenizeFunc, opts *api.
|
||||||
n := len(msgs) - 1
|
n := len(msgs) - 1
|
||||||
// in reverse, find all messages that fit into context window
|
// in reverse, find all messages that fit into context window
|
||||||
for i := n; i >= 0; i-- {
|
for i := n; i >= 0; i-- {
|
||||||
if (isMllama || isGemma3) && len(msgs[i].Images) > 1 {
|
if isMllama && len(msgs[i].Images) > 1 {
|
||||||
return "", nil, errTooManyImages
|
return "", nil, errTooManyImages
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,12 +157,3 @@ func checkMllamaModelFamily(m *Model) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkGemma3ModelFamily(m *Model) bool {
|
|
||||||
for _, arch := range m.Config.ModelFamilies {
|
|
||||||
if arch == "gemma3" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue