Files

79 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qwen3-VL 8B + Ollama: разбор сессии настройки auxiliary.vision
Дата: 2026-08-30. Хост: RTX 5060 Ti 16 GB VRAM, Ollama в Docker (контейнер `ollama`),
main-модель Hermes — облачная polza.ai (deepseek/deepseek-v4-flash-0731).
## Итог
`auxiliary.vision` переведён на локальную `qwen3-vl:8b`:
- model: qwen3-vl:8b (~6.14 GB на диске, ~7.2 GB VRAM при ctx 4096/8192)
- provider: custom, base_url: http://localhost:11434/v1, api_key: ollama
- остальные auxiliary остались на `auto` → облачный main-провайдер
Проверено E2E: vision-запрос через Hermes-клиент (`resolve_provider_client`) отвечает
"red"/"blue" на тестовых PNG.
## Ключевые факты о Hermes auxiliary (agent/auxiliary_client.py)
- Раздел конфига: `auxiliary.<task>.provider/model/base_url/api_key` в config.yaml.
- `provider: auto` цепочка (текст): main-провайдер → OpenRouter → Nous Portal →
custom endpoint → Anthropic → прямые провайдеры. Для vision своя цепочка:
main-провайдер (если поддерживает vision) → OpenRouter → Nous → Anthropic →
custom endpoint (локальные Qwen-VL/LLaVA/Pixtral).
- `MINIMUM_CONTEXT_LENGTH = 64_000` (agent/model_metadata.py:405) — флор только для
`compression`. Остальные задачи без флора.
- `resolve_provider_client()` сигнатура: `explicit_base_url` / `explicit_api_key`
(не `base_url`/`api_key` — TypeError).
- Vision-capable локальных моделей определяется через `query_ollama_supports_vision`
(capabilities в `/api/show`, или model_info.*.vision.block_count на старых серверах).
## Ошибки в процессе (транскрипт)
1. `HTTP 500` на `/api/chat` с картинкой 1×1 px:
```
panic: height:1 or width:1 must be larger than factor:32
github.com/ollama/ollama/model/models/qwen3vl.(*ImageProcessor).SmartResize
```
→ Ошибка картинки, не конфигурации. Входной образ должен быть ≥ 32 px.
2. Пустой `content` при `finish_reason: stop` на картинке 64×64 — reasoning ушёл в
`reasoning` поле. На 256×256 ответ нормальный ("red").
3. `hermes chat -m ... --provider custom` в CLI: "No API key found for provider 'custom'"
— CLI-запуск не отражает auxiliary-резолв; auxiliary берётся из config.yaml напрямую.
4. `curl ... | python3` в terminal — блокируется security scan (pipe to interpreter);
использовать execute_code с urllib вместо пайпов.
## VRAM-планирование (qwen3-vl:8b, GGUF)
- GGUF-контекст: `qwen3vl.context_length = 262144`, layers=36, embedding=4096.
- KV cache (f16) ≈ 2 · layers · dim · 2 · ctx · 2 bytes:
- 32K → ~38.7 GB, 64K → ~77 GB, 128K → ~155 GB, 262K → ~309 GB.
→ Физически полный контекст не влезает в 16 GB. Ollama грузит с num_ctx 4096 по умолчанию,
для запросов задавать `options: {num_ctx: 8192}`.
- Итоговое распределение: qwen3-vl 7.19 GB + bge-m3 1.21 GB = 8.4 GB занято, ~7.3 GB свободно.
- qwen3:8b и qwen2.5-coder:14b имеют GGUF-контекст 40960/32768 (имена "-64k"/"-65k" лгут) —
ниже 64K флора compression, поэтому compression оставлен на облаке.
## Полезные команды
```bash
# Pull в Docker
docker exec ollama ollama pull qwen3-vl:8b
# Проверка caps/контекста
curl -s http://localhost:11434/api/show -d '{"model":"qwen3-vl:8b"}' | jq '.capabilities, .model_info["qwen3vl.context_length"]'
# Тест vision напрямую
curl -s http://localhost:11434/api/chat -d '{"model":"qwen3-vl:8b","messages":[{"role":"user","content":"What color?","images":["<b64>"]}],"options":{"num_ctx":8192},"stream":false}'
# OpenAI-совместимый путь (что использует Hermes)
curl -s http://localhost:11434/v1/chat/completions -d '{"model":"qwen3-vl:8b","messages":[{"role":"user","content":[{"type":"text","text":"What color?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,<b64>"}}]}],"max_tokens":50}'
# Выгрузка из VRAM
docker exec ollama ollama stop qwen3-vl:8b
```
## Откат конфигурации
```bash
hermes config set auxiliary.vision.provider auto
hermes config set auxiliary.vision.model ""