Настройка iGPU Vulkan + eGPU CUDA для одновременного запуска LLM и мультимодальных моделей | AiManual
AiManual Logo Ai / Manual.
22 Фев 2026 Гайд

Гибридный ад: как заставить iGPU (Vulkan) и eGPU (CUDA) работать вместе для текстовых и мультимодальных моделей

Пошаговый гайд по настройке гибридной системы с iGPU (Vulkan) и eGPU (CUDA) для одновременной работы текстовых и мультимодальных AI-моделей на 22.02.2026

Почему гибридные системы — это одновременно гениально и ужасно

У тебя есть ноутбук с мощным iGPU (скажем, тот же Strix Halo с RDNA 3.5) и внешняя видеокарта в корпусе eGPU. В теории — идеальная комбинация. iGPU отлично тянет Vulkan-бэкенд для llama.cpp, eGPU с CUDA летает на тяжёлых мультимодалках. В реальности — это ад из драйверов, переменных окружения и ошибок сегментации.

Проблема в том, что никто не проектировал эти системы для совместной работы. Vulkan и CUDA живут в параллельных вселенных. AMD и NVIDIA ненавидят друг друга на уровне драйверов. А ты пытаешься заставить их работать как одна команда.

Важно: этот гайд написан 22.02.2026. Завтра всё может сломаться очередным обновлением драйверов. Сохраняй стабильные версии всего, что работает.

Что на самом деле происходит, когда ты пытаешься запустить две модели одновременно

Представь сцену: на iGPU через Vulkan работает Llama 3.2 11B для чата. На eGPU через CUDA грузится Qwen2-VL-72B для анализа изображений. В теории — идеальное разделение труда. На практике:

  • Драйверы начинают драться за ресурсы PCIe
  • Память системы забивается разными runtime библиотеками
  • Vulkan пытается найти устройства, а CUDA их уже заняла
  • Твоя система либо работает, либо падает в случайный момент

Но когда это работает — это магия. Ты можешь одновременно общаться с текстовой моделью и скармливать ей скриншоты через мультимодальную. Без переключений, без ожидания.

Железо: что сработает, а что нет

Не всякая комбинация будет работать. Вот что проверено на 22.02.2026:

iGPU eGPU Стабильность Примечания
AMD RDNA 3.5 (Strix Halo) NVIDIA RTX 5070 Высокая Лучшая совместимость с Vulkan 1.3
Intel Arc Xe-LPG+ NVIDIA RTX 4060 Ti Средняя Проблемы с одновременным доступом к памяти
AMD RDNA 3 AMD Radeon RX 8800 XT Низкая Драйверы конфликтуют между собой

Забудь про идею использовать две карты NVIDIA. Thunderbolt не даст нормальной пропускной способности для NVLink, а без него — зачем тогда eGPU? Лучшая комбинация на сегодня — AMD iGPU + NVIDIA eGPU. У них разные стеки драйверов, меньше конфликтов.

💡
Если ты только собираешь систему, посмотри мою статью про сборку ПК для локальных LLM. Там разобраны основы выбора железа под гибридные конфигурации.

1 Подготовка системы: чистый Ubuntu и правильные драйверы

Начинаем с чистого Ubuntu 24.04 LTS. Не 22.04, не 26.04 beta. Именно 24.04 — самый стабильный вариант на 22.02.2026.

Первая ошибка, которую все совершают — установка драйверов в неправильном порядке. Вот правильная последовательность:

# 1. Обновляем систему
sudo apt update && sudo apt upgrade -y

# 2. Ставим драйверы AMD ДО установки NVIDIA
sudo apt install mesa-vulkan-drivers vulkan-tools amdgpu-install

# 3. Проверяем, что Vulkan видит iGPU
vulkaninfo | grep "deviceName"
# Должна быть строка с твоим iGPU (например, "AMD Radeon Graphics")

# 4. Только теперь ставим драйверы NVIDIA
sudo apt install nvidia-driver-580 nvidia-cuda-toolkit

# 5. Черная магия: создаем правило udev для мирного сосуществования
sudo tee /etc/udev/rules.d/70-gpu-coexist.rules << EOF
KERNEL=="nvidia*", MODE="0666"
KERNEL=="renderD*", MODE="0666"
SUBSYSTEM=="drm", KERNEL=="card[0-9]*", MODE="0666"
EOF

sudo udevadm control --reload-rules
sudo udevadm trigger

Почему именно такой порядок? Потому что драйверы NVIDIA — агрессивные свиньи. Они пытаются захватить все GPU в системе. Если поставить их первыми, Vulkan может не увидеть iGPU вообще.

2 Настройка Ollama для работы с двумя бэкендами

Ollama 0.5.7 (актуальная версия на 22.02.2026) научилась работать с несколькими бэкендами одновременно. Но конфигурация — это отдельный вид искусства.

Создаем конфиг для Ollama:

mkdir -p ~/.ollama/config
cat > ~/.ollama/config/config.json << 'EOF'
{
  "runners": {
    "llama.cpp": {
      "vulkan": true,
      "cuda": false,
      "metal": false,
      "opencl": false
    },
    "onnx": {
      "cuda": true,
      "directml": false,
      "coreml": false
    }
  },
  "environment": {
    "GGML_VULKAN_DEVICE": "0",
    "CUDA_VISIBLE_DEVICES": "1",
    "HIP_VISIBLE_DEVICES": "",
    "OLLAMA_HOST": "0.0.0.0:11434",
    "OLLAMA_KEEP_ALIVE": "-1"
  }
}
EOF

Ключевые моменты:

  • GGML_VULKAN_DEVICE="0" — указываем на первый Vulkan-устройство (обычно это iGPU)
  • CUDA_VISIBLE_DEVICES="1" — скрываем устройство 0 (iGPU) от CUDA, оставляя только eGPU
  • HIP_VISIBLE_DEVICES="" — полностью отключаем ROCm, чтобы не мешал

Теперь запускаем Ollama с нашим конфигом:

# Останавливаем стандартный сервис, если запущен
sudo systemctl stop ollama

# Запускаем с нашими переменными окружения
GGML_VULKAN_DEVICE=0 CUDA_VISIBLE_DEVICES=1 OLLAMA_HOST=0.0.0.0:11434 ollama serve &

Предупреждение: Не используй systemd для запуска с кастомными переменными окружения. Systemd сбрасывает их. Запускай вручную через screen или tmux.

3 Загрузка моделей на разные устройства

Теперь самое интересное — загрузка разных моделей на разные GPU. Для текстовых моделей используем Vulkan-бэкенд, для мультимодальных — CUDA.

Сначала создаем Modelfile для текстовой модели (на iGPU):

cat > ~/Modelfile.llama-vulkan << 'EOF'
FROM llama3.2:11b

PARAMETER num_gpu 1
PARAMETER num_thread 8
PARAMETER flash_attention true

SYSTEM """
Ты — ассистент, работающий на встроенной видеокарте через Vulkan.
"""
EOF

# Создаем модель с Vulkan-бэкендом
GGML_VULKAN_DEVICE=0 ollama create llama3.2-vulkan -f ~/Modelfile.llama-vulkan

Теперь Modelfile для мультимодальной модели (на eGPU):

cat > ~/Modelfile.qwen-vl-cuda << 'EOF'
FROM qwen2.5-vl:72b

PARAMETER num_gpu 1
PARAMETER flash_attention true
PARAMETER vision_model enable

SYSTEM """
Ты — мультимодальный ассистент, работающий на внешней видеокарте через CUDA.
Можешь анализировать изображения, видео и текст.
"""
EOF

# Создаем модель с CUDA-бэкендом
CUDA_VISIBLE_DEVICES=1 ollama create qwen2.5-vl-cuda -f ~/Modelfile.qwen-vl-cuda

Проверяем, что всё работает:

# Запускаем текстовую модель на iGPU
GGML_VULKAN_DEVICE=0 ollama run llama3.2-vulkan "Привет! На каком GPU ты работаешь?"

# В другом терминале запускаем мультимодальную на eGPU
CUDA_VISIBLE_DEVICES=1 ollama run qwen2.5-vl-cuda "Опиши эту систему: у нас iGPU и eGPU"

llama-swap: автоматическое переключение между бэкендами

Вручную запускать модели с разными переменными окружения — это боль. На 22.02.2026 появился инструмент llama-swap, который делает это автоматически.

Устанавливаем и настраиваем:

# Клонируем репозиторий (версия от 15.02.2026)
git clone https://github.com/llama-swap/llama-swap.git
cd llama-swap
pip install -e .

# Создаем конфигурацию
cat > config.yaml << 'EOF'
runners:
  vulkan:
    type: llama.cpp
    device: vulkan:0
    env:
      GGML_VULKAN_DEVICE: "0"
      CUDA_VISIBLE_DEVICES: ""
    models:
      - llama3.2:11b
      - mistral:7b
      - qwen2.5:7b

  cuda:
    type: llama.cpp
    device: cuda:0
    env:
      GGML_VULKAN_DEVICE: ""
      CUDA_VISIBLE_DEVICES: "0"
    models:
      - qwen2.5-vl:72b
      - llama3.2-vision:90b
      - gemma2:27b-vision

router:
  strategy: model-based
  default: vulkan
EOF

# Запускаем роутер
llama-swap serve --config config.yaml

Теперь можно обращаться к единому endpoint, а llama-swap сам решит, на каком GPU запускать модель:

# Текстовая модель пойдет на iGPU
curl http://localhost:8080/api/generate -d '{
  "model": "llama3.2:11b",
  "prompt": "Привет"
}'

# Мультимодальная — на eGPU
curl http://localhost:8080/api/generate -d '{
  "model": "qwen2.5-vl:72b",
  "prompt": "Опиши изображение",
  "images": ["base64_encoded_image"]
}'
💡
Если ты работаешь с очень большими контекстами, посмотри мою статью про запуск контекста больше 128k. Там разобраны методы, которые помогают экономить память.

Ошибки, которые сломают тебе день (и как их избежать)

За три месяца работы с гибридными системами я собрал коллекцию самых мерзких ошибок. Вот топ-5:

1. "Vulkan failed to initialize with error: VK_ERROR_INITIALIZATION_FAILED"

Причина: Драйверы NVIDIA перехватили устройство Vulkan. Решение:

# Принудительно указываем Vulkan на использование AMD-драйверов
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json
# Или для Intel
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json

2. "CUDA error: all CUDA-capable devices are busy or unavailable"

Причина: Что-то заняло eGPU. Чаще всего — Xorg или Wayland. Решение:

# Запрещаем Xorg использовать eGPU
sudo nano /etc/X11/xorg.conf
# Добавляем в секцию Device:
Option "Ignore" "true"

# Или проще — запускаем Ollama до старта графической сессии

3. Резкое падение производительности через 10-15 минут

Причина: Перегрев iGPU или троттлинг eGPU через Thunderbolt. Решение:

# Для AMD iGPU
sudo apt install radeontop
sudo radeontop -c -T
# Следим за температурой, если >85°C — проблема

# Ограничиваем мощность eGPU
sudo nvidia-smi -pl 200  # Ограничиваем до 200W для RTX 5070

4. Модели "забываются" после перезагрузки

Причина: Ollama хранит модели в RAM, если не указать явно. Решение:

# Создаем символические ссылки на SSD
mkdir -p /mnt/ssd/ollama/models
ln -sf /mnt/ssd/ollama/models ~/.ollama/models

# В Modelfile добавляем
PARAMETER keep_alive 3600  # Храним в памяти час

5. Конфликт версий CUDA Toolkit

Самая мерзкая ошибка 2026 года. NVIDIA выпускает драйвер 580, но CUDA Toolkit 13.5. Ollama требует CUDA 12.4. Решение:

# Устанавливаем несколько версий CUDA
sudo apt install cuda-12-4 cuda-13-5

# Переключаемся между ними
sudo update-alternatives --config cuda
# Выбираем 12.4 для Ollama

Практический пример: чат-бот с поддержкой изображений

Давай соберём реально работающую систему. Чат-бот, который может и общаться, и анализировать скриншоты.

Создаём Python-скрипт:

#!/usr/bin/env python3
# chat_multimodal.py

import requests
import base64
import json
from typing import Optional

class HybridChatBot:
    def __init__(self):
        self.text_url = "http://localhost:11434/api/generate"
        self.vision_url = "http://localhost:11435/api/generate"  # Отдельный порт для eGPU
        
    def send_to_igpu(self, prompt: str) -> str:
        """Отправляем текстовый запрос на iGPU"""
        payload = {
            "model": "llama3.2-vulkan",
            "prompt": prompt,
            "stream": False
        }
        response = requests.post(self.text_url, json=payload)
        return response.json()["response"]
    
    def send_to_egpu(self, prompt: str, image_path: Optional[str] = None) -> str:
        """Отправляем мультимодальный запрос на eGPU"""
        payload = {
            "model": "qwen2.5-vl-cuda",
            "prompt": prompt,
            "stream": False
        }
        
        if image_path:
            with open(image_path, "rb") as f:
                image_b64 = base64.b64encode(f.read()).decode("utf-8")
            payload["images"] = [image_b64]
        
        # Используем отдельный Ollama-инстанс на eGPU
        response = requests.post(self.vision_url, json=payload)
        return response.json()["response"]
    
    def analyze_screenshot(self, screenshot_path: str, question: str) -> str:
        """Анализируем скриншот через eGPU, результат обсуждаем через iGPU"""
        # Шаг 1: eGPU анализирует изображение
        vision_prompt = f"Что изображено на скриншоте? {question}"
        analysis = self.send_to_egpu(vision_prompt, screenshot_path)
        
        # Шаг 2: iGPU обсуждает результат
        discussion_prompt = f"Вот анализ скриншота: {analysis}\n\nОбсуди этот анализ и дай рекомендации."
        return self.send_to_igpu(discussion_prompt)

if __name__ == "__main__":
    bot = HybridChatBot()
    
    # Пример использования
    print("Текстовый запрос на iGPU:")
    print(bot.send_to_igpu("Объясни, как работает гибридная система iGPU+eGPU"))
    
    print("\nАнализ скриншота (если есть файл screenshot.png):")
    try:
        result = bot.analyze_screenshot("screenshot.png", "Что не так с этим кодом?")
        print(result)
    except FileNotFoundError:
        print("Файл screenshot.png не найден, пропускаем")

Запускаем два Ollama-сервера на разных портах:

# Терминал 1: iGPU сервер
GGML_VULKAN_DEVICE=0 CUDA_VISIBLE_DEVICES="" OLLAMA_HOST=0.0.0.0:11434 ollama serve

# Терминал 2: eGPU сервер
GGML_VULKAN_DEVICE="" CUDA_VISIBLE_DEVICES=0 OLLAMA_HOST=0.0.0.0:11435 ollama serve

Теперь запускаем нашего бота:

python3 chat_multimodal.py

Что делать, когда ничего не работает

Бывают дни, когда система упорно не хочет работать. Вот чек-лист на такой случай:

  1. Перезагрузись. Серьёзно. 30% проблем решаются перезагрузкой.
  2. Проверь lspci | grep -i vga. Обе карты видны?
  3. Запусти vulkaninfo --summary. Виден ли iGPU?
  4. Запусти nvidia-smi. Видна ли eGPU?
  5. Попробуй отключить eGPU, запустить только iGPU. Работает?
  6. Попробуй отключить iGPU в BIOS, запустить только eGPU. Работает?
  7. Посмотри dmesg | tail -50. Есть ли ошибки драйверов?
  8. Проверь температуру: sensors. Не перегревается ли что-то?

Если ничего не помогает — сделай бэкап работающей конфигурации. Я храню весь /etc, ~/.ollama и список установленных пакетов в git.

💡
Для сложных гибридных конфигураций с несколькими картами разных производителей смотри мою статью про гибридные GPU-связки. Там разобраны более сложные сценарии.

Будущее гибридных систем (спойлер: оно уже здесь)

На 22.02.2026 ситуация меняется быстро. Вот что появилось за последние полгода:

  • AMD ROCm 6.5 — наконец-то нормальная поддержка RDNA 3.5 iGPU
  • Vulkan 1.3.285 — улучшенная поддержка AI-инференса
  • Ollama 0.5.7 — нативная поддержка нескольких бэкендов
  • llama.cpp с SYCL — единый бэкенд для Intel, AMD и NVIDIA (пока сырой)

Мой прогноз: к концу 2026 года настройка гибридных систем станет проще. Появятся стандартные конфигурации, драйверы перестанут конфликтовать, а инструменты вроде llama-swap войдут в стандартную поставку.

Но пока что — это всё ещё территория энтузиастов. Территория, где нужно копаться в логах, править конфиги и перезагружаться по пять раз на дню. Зато когда всё работает — это стоит того.

Последний совет: не обновляй драйверы, если всё работает. Сохрани стабильную конфигурацию, сделай её бэкап. А потом можешь экспериментировать с новыми версиями в отдельной виртуальной машине.

Удачи. Тебе понадобится её много.