Настройка Ollama для работы с несколькими видеокартами NVIDIA

Настройка Ollama для работы с несколькими видеокартами NVIDIA

Введение

С ростом популярности локальных больших языковых моделей (LLM) вопрос эффективного использования аппаратных ресурсов становится критическим для инфраструктуры. Для инженеров и исследователей, работающих с тяжелыми моделями вроде Llama 3 или Mixtral, ключевым решением является грамотная настройка Ollama для нескольких видеокарт в Windows или Linux окружения. Правильная конфигурация позволяет распределить слои нейросети между доступными графическими процессорами, значительно ускоряя генерацию токенов и снижая задержки при инференсе.

В данной статье мы рассмотрим архитектурные особенности работы Ollama в мульти-GPU среде, методы ручного управления памятью и диагностику проблем. Мы опираемся на актуальные данные середины 2026 года, где стандартом де-факто стала версия ПО выше 0.4, поддерживающая гетерогенные вычисления.

Архитектура и автоматическое распределение

Современная Ollama обладает встроенным интеллектуальным механизмом обнаружения оборудования. Начиная с версии 0.4, сервер автоматически сканирует систему на наличие совместимых устройств NVIDIA CUDA или AMD ROCm. Если в системе установлено несколько видеокарт, движок самостоятельно рассчитывает оптимальное распределение слоев модели (layer splitting) с учетом объема VRAM каждого адаптера.

Вам не требуется прописывать сложные конфигурационные файлы для базовой работы. Достаточно установить актуальные драйверы и запустить сервис. Однако для продвинутой настройки может потребоваться вмешательство в переменные окружения, чтобы ограничить использование конкретных устройств или зарезервировать видеопамять под другие задачи, например, рендеринг или обучение.

Принцип работы прост: модель загружается в VRAM последовательно. Если одна карта заполнена, остальные слои переходят на следующую. Это позволяет запускать модели, размер которых превышает объем памяти одного ускорителя. Важно учитывать пропускную способность шины PCIe, так как она может стать узким местом при активном обмене данными между GPU.

Управление через переменные окружения

Для тонкого контроля над тем, какие именно GPU участвуют в вычислениях, используются системные переменные. Ниже приведена таблица основных параметров, влияющих на поведение сервера и распределение ресурсов.

Переменная Описание Значение по умолчанию
CUDA_VISIBLE_DEVICES Ограничивает видимые устройства для процесса Все доступные
OLLAMA_NUM_GPU Максимальное количество GPU для использования Все доступные
OLLAMA_MAX_VRAM Лимит видеопамяти на карту (в байтах) 95% от объема
OLLAMA_HOST Адрес и порт для прослушивания запросов 127.0.0.1:11434

Пример установки переменных в PowerShell перед запуском сервера выглядит следующим образом:

$env:CUDA_VISIBLE_DEVICES="0,1"
$env:OLLAMA_MAX_VRAM="4294967296"
$env:OLLAMA_HOST="0.0.0.0:11434"
ollama serve

В Linux команда будет отличаться синтаксисом экспорта. Важно помнить, что изменения применяются только к текущей сессии терминала, если не прописаны в системном профиле пользователя или реестре Windows.

Запуск нескольких экземпляров

В корпоративных сценариях иногда требуется жесткая изоляция нагрузок. Документация описывает возможность запуска четырех независимых экземпляров сервера параллельно. Каждый экземпляр может быть привязан к своему устройству или группе устройств через переменную CUDA_VISIBLE_DEVICES. Это полезно, когда разные команды работают с разными моделями одновременно, не конкурируя за ресурсы памяти.

Для реализации необходимо запустить несколько процессов ollama serve на разных портах, предварительно установив переменную OLLAMA_HOST для каждого экземпляра. Например, первый сервер на порту 11434, второй на 11435. Это позволяет балансировать нагрузку на уровне приложения.

Диагностика и производительность

Чтобы убедиться, что настройка Ollama для нескольких видеокарт в Windows прошла успешно, используйте мониторинг загрузки GPU. В диспетчере задач или через утилиту nvidia-smi вы должны видеть активность на всех подключенных адаптерах во время генерации ответа. Загрузка памяти должна быть распределена пропорционально.

Если загрузка идет только на одну карту, проверьте драйверы CUDA и убедитесь, что модели не помещаются в VRAM одиночного устройства. Часто проблема кроется в устаревшем ПО или конфликте версий библиотек. Логи сервера можно найти в стандартных путях системы, они содержат информацию о том, сколько слоев было загружено на каждое устройство.

Вопрос-ответ (FAQ)

Вопрос 1: Нужно ли вручную распределять слои модели?

Ответ 1: Нет, начиная с версии 0.4, система делает это автоматически на этапе загрузки модели. Вмешательство требуется только для специфических ограничений памяти.

Вопрос 2: Работает ли это с разными моделями видеокарт?

Ответ 2: Да, можно использовать карты разных серий и объемов памяти, но общая производительность будет ограничена самым медленным устройством в цепочке передачи данных.

Вопрос 3: Как сбросить настройки окружения?

Ответ 3: Достаточно перезапустить терминал или службу Ollama без установленных переменных. Конфигурация не сохраняется постоянно без записи в реестр или профиль пользователя.

Обсуждение закрыто.