Настройка Qwen 3.5 для обработки изображений через OpenCode и Llama.cpp в 2026 | AiManual
AiManual Logo Ai / Manual.
28 Фев 2026 Гайд

Как включить обработку изображений в Qwen 3.5 через OpenCode и Llama.cpp: готовое решение

Полное руководство по активации многомодальности в Qwen 3.5. Готовая JSON-конфигурация для OpenCode и Llama.cpp, шаги установки и решение типичных ошибок.

Почему Qwen 3.5 молча игнорирует ваши картинки

Вы скачали свежую Qwen 3.5, запустили через llama.cpp, отправили скриншот с просьбой «опиши что тут» – и получили ответ в духе «я текстовый ассистент». Знакомая история? Она бесит каждого второго, кто пытается заставить эту штуку видеть. А причина проста: по умолчанию конвейер обработки мультимодальных данных выключен. Модель загружена, но «глаза» у неё закрыты.

В феврале 2026 года ситуация стала проще, но неочевиднее. OpenCode – это по сути стандартизированный способ упаковки моделей и их конфигов для llama.cpp. Если брать модель с Hugging Face, там будет папка opencode с парой JSON-файлов. Именно они решают, будет ли модель принимать картинки или нет. Проблема в том, что эти файлы часто или криво сгенерированы, или отсутствуют для конкретной версии GGUF. Итог – вы часами ищете волшебный флаг, а его нет в CLI.

Не путайте: Qwen 3.5 – это семейство моделей. Для работы с изображениями вам нужна Qwen 3.5 VL (Vision Language) или её производные. Базовая Qwen 3.5 – только текст.

Готовое решение: JSON, который зажигает «лампочку» зрения

Всё сводится к одному файлу – config.json в папке OpenCode. Его структура обновилась к 2026 году, добавились поля для контроля препроцессинга и распределения слоёв. Ниже – рабочая конфигурация, которую я отладил на комбинации llama.cpp версии b3560 (актуально на 28.02.2026) и модели Qwen3.5-VL-7B-Instruct-Q4_K_M.gguf.

{
  "opencode_schema_version": "2.1",
  "model": {
    "type": "gguf",
    "path": "./models/Qwen3.5-VL-7B-Instruct-Q4_K_M.gguf",
    "family": "qwen3.5_vl"
  },
  "vision": {
    "enabled": true,
    "mmproj": {
      "required": true,
      "path": "./models/qwen3.5-vl-7b-mmproj-q4_0.gguf"
    },
    "image_preprocess": {
      "type": "clip",
      "size": 448,
      "mean": [0.48145466, 0.4578275, 0.40821073],
      "std": [0.26862954, 0.26130258, 0.27577711]
    },
    "max_image_pixels": 1024 * 1024
  },
  "llama_cpp": {
    "n_gpu_layers": 40,
    "main_gpu": 0,
    "tensor_split": null,
    "flash_attn": true,
    "cache_type": "f16",
    "offload_kqv": true
  },
  "generation": {
    "image_token": "",
    "prefix": "<|im_start|>user\n",
    "suffix": "<|im_end|>\n<|im_start|>assistant\n"
  }
}

Этот файл делает три ключевые вещи: включает vision-модуль, прописывает путь к проекционной матрице (mmproj) и задаёт параметры препроцессинга изображений под Qwen. Без mmproj модель не сконвертирует картинку в эмбеддинги, которые поймёт текстовый энкодер. Ошибка «Failed to load vision model» – как раз оттуда.

1 Качаем правильные файлы (не только модель)

Первая и главная ошибка – скачать только файл модели GGUF. Для многомодальной работы нужен второй файл: проекционная матрица (mmproj). Ищите её в том же репозитории на Hugging Face, где брали модель. Часто она называется *-mmproj-*.gguf. Без неё – как монитор без видеокарты.

# Пример скачивания полного комплекта для версии 7B
wget https://huggingface.co/user/Qwen3.5-VL-7B-Instruct-GGUF/resolve/main/Qwen3.5-VL-7B-Instruct-Q4_K_M.gguf
wget https://huggingface.co/user/Qwen3.5-VL-7B-Instruct-GGUF/resolve/main/qwen3.5-vl-7b-mmproj-q4_0.gguf

# Создаём структуру папок
mkdir -p ./models
mv *.gguf ./models/
💡
Если вы экспериментировали с Qwen3 VL в Ollama, то знаете про проблему галлюцинаций tool-calls. В llama.cpp такого нет, но зато есть свои грабли с путями к файлам.

2 Собираем или обновляем llama.cpp с vision-поддержкой

Ваш llama.cpp должен быть скомпилирован с поддержкой CLIP (это библиотека для обработки изображений). Если вы просто скачали бинарник год назад, велик шанс, что vision-функции отключены. Собираем из исходников.

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# На февраль 2026 актуальна ветка master с полной поддержкой Qwen 3.5 VL
make -j8 \
  LLAMA_CLIP=1 \
  LLAMA_CUBLAS=1  # Если у вас NVIDIA GPU

# Проверяем, что в помощи есть флаги для изображений
./bin/main --help | grep -i image
# Должно показать опции --image, --mmproj и т.д.

Если сборка вызывает проблемы (особенно с Intel Arc), есть детальный гайд по сборке llama.cpp с SYCL. Для облачных энтузиастов – инструкция по запуску в LXC-контейнере Proxmox.

3 Упаковываем конфиг и модель в OpenCode-структуру

OpenCode не требует установки. Это просто соглашение о расположении файлов. Создаём папку my_qwen_vision и кладём в неё наш config.json, поправив пути к моделям относительно этой папки.

mkdir my_qwen_vision
cd my_qwen_vision
# Копируем config.json сюда
# Копируем папку models с GGUF-файлами сюда же
# Структура должна получиться такой:
# my_qwen_vision/
#   config.json
#   models/
#     Qwen3.5-VL-7B-Instruct-Q4_K_M.gguf
#     qwen3.5-vl-7b-mmproj-q4_0.gguf

4 Запускаем с правильными флагами (ключевой момент)

Теперь запускаем llama.cpp, указав и модель, и mmproj, и изображение. Флаги важнее конфига, потому что конфиг – это для OpenCode-обёрток, а мы запускаем напрямую. Вот команда, которая точно работает:

cd path/to/llama.cpp
./bin/main -m ../my_qwen_vision/models/Qwen3.5-VL-7B-Instruct-Q4_K_M.gguf \
  --mmproj ../my_qwen_vision/models/qwen3.5-vl-7b-mmproj-q4_0.gguf \
  --image ../path/to/your/image.jpg \
  -p "<|im_start|>user\nОпиши эту картинку<|im_end|>\n<|im_start|>assistant\n" \
  -n 512 \
  --temp 0.7 \
  -ngl 40

Обратите внимание на промпт: он использует специфичные для Qwen тэги <|im_start|> и <|im_end|>. Если их нарушить, модель может запутаться. Флаг -ngl 40 загружает 40 слоёв на GPU (подбирайте под свой объём памяти).

Где спрятаны грабли: ошибки и как их обойти

Теория гладкая, практика – ухабистая. Вот что сломается в первую очередь и как починить.

Ошибка Причина Решение
error: failed to load vision model Не найден или не загружен mmproj файл. Или llama.cpp собран без LLAMA_CLIP. Проверьте путь в --mmproj. Пересоберите llama.cpp с LLAMA_CLIP=1.
error: tensor split does not match Конфликт настроек распределения слоёв между JSON и флагами CLI. Уберите tensor_split из JSON или используйте только флаг --tensor-split в командной строке. Читайте про обновление llama.cpp для multi-GPU.
Модель отвечает, но не видит изображение Неправильный промпт. Модель не получила токен или он не обработан. Используйте точный формат промпта из примера выше. В llama.cpp токен добавляется автоматически при использовании --image.
Краш при загрузке с ошибкой CUDA Не хватает VRAM для загрузки модели и проекционной матрицы. Уменьшите -ngl (например, до 20). Или используйте квантованную модель (Q3_K_S). Гайд по квантованию здесь.

Вопросы, которые вы зададите (и мои ответы)

Можно ли использовать эту настройку с другими многомодальными моделями, например, с Llama 4 16x17B?

Да, принцип тот же: нужна модель GGUF с поддержкой зрения и соответствующий mmproj файл. Но JSON-конфигурация будет отличаться (другие токены, параметры препроцессинга). Если решитесь на гиганта, вот инструкция для Llama 4 16x17B.

Какие форматы изображений поддерживаются?

На февраль 2026: JPEG, PNG, WEBP, BMP. Через библиотеку stb_image. Анимации (GIF) не поддерживаются – будет взят только первый кадр.

Почему бы не использовать Ollama? Там вроде проще.

Ollama – это удобно, но чёрный ящик. Когда что-то ломается (а с Qwen VL оно ломается, см. про галлюцинации tool-calls), вы не полезете в логи C++ кода. llama.cpp даёт полный контроль. И он быстрее на низкоуровневых оптимизациях.

Модель отвечает очень медленно. Что делать?

  • Увеличьте -ngl, чтобы больше слоёв было на GPU.
  • Используйте флаг --flash-attn при сборке (уже есть в конфиге).
  • Поэкспериментируйте с --cache-type f16 или f8 (новая фича 2026 года).
  • Если память ограничена, посмотрите в сторону Qwen-Image-Layered – это специализированная модель для работы с изображениями, может быть эффективнее.

Что делать, если всё равно не работает

Сначала упростите задачу. Запустите тестовую команду из папки llama.cpp на маленькой картинке и простейшем промпте. Отключите GPU (-ngl 0), чтобы исключить проблемы с видеопамятью. Если заработало – значит, проблема в конфигурации окружения, а не в модели.

Самый надёжный способ – собрать минимальный воспроизводимый пример на Python с использованием llama-cpp-python. Вот кусок кода, который точно скажет, видит ли модель картинку:

from llama_cpp import Llama

llm = Llama(
    model_path="./models/Qwen3.5-VL-7B-Instruct-Q4_K_M.gguf",
    n_gpu_layers=40,
    vision_model_path="./models/qwen3.5-vl-7b-mmproj-q4_0.gguf"
)

response = llm.create_chat_completion(
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Опиши эту картинку"},
                {"type": "image_url", "image_url": {"url": "file://./test.jpg"}}
            ]
        }
    ]
)
print(response['choices'][0]['message']['content'])

Если и это падает – проблема в файлах модели. Скачайте их заново, проверьте контрольные суммы. И да, иногда помогает банальное обновление драйверов CUDA до версии, актуальной на февраль 2026 (подсказка: 12.6).

А если захотите не просто описывать, а генерировать изображения – это уже совсем другая история. Придётся смотреть в сторону Qwen-Image-2512. Но это уже для отдельного вечера с мощной видеокартой.

Подписаться на канал