Установка и настройка LLM-серверов

Установка и настройка Ollama

Установка Ollama в Docker

Для примера используется модель gpt-oss:20b.

Другие модели можно посмотреть в документации Ollama.

Для NVIDIA GPU

  • Чтобы настроить Ollama с помощью Docker команды:

  1. Установите NVIDIA Container Toolkit.

    1. Настройте репозиторий:

      curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
          | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
      curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
          | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
          | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
      sudo apt-get update
      
    2. Установите пакеты NVIDIA Container Toolkit:

      sudo apt-get install -y nvidia-container-toolkit
      
  2. Настройте Docker для использования драйвера Nvidia:

    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    
  3. Выполните команду:

    docker run -d \
        --gpus=all \
        -v ollama:/root/.ollama \
        -p 11434:11434 \
        --name ollama \
        ollama/ollama
    
  • Чтобы настроить Ollama через Docker Compose:

  1. Создайте файл docker-compose.yaml:

    services:
        ollama:
            image: ollama/ollama:latest
            container_name: ollama
            ports:
                - "11434:11434"
            volumes:
                - ollama_data:/root/.ollama
            deploy:
                resources:
                    reservations:
                        devices:
                            - driver: nvidia
                            count: all
                            capabilities: [gpu]
            environment:
                - OLLAMA_HOST=0.0.0.0
                - OLLAMA_ORIGINS=*
                # Дополнительные настройки (представлены в таблице ниже)
                - OLLAMA_CONTEXT_LENGTH=8192
                - OLLAMA_FLASH_ATTENTION=1
                - OLLAMA_NUM_PARALLEL=4
                - OLLAMA_MAX_LOADED_MODELS=2
                restart: unless-stopped
    
    volumes:
        ollama_data:
    
  2. Запустите docker-compose из каталога, в котором находится созданный файл docker-compose.yaml:

    docker-compose up -d
    

Для AMD GPU (ROCm)

  • Чтобы настроить Ollama с помощью Docker команды:

  1. Выполните команду:

    docker run -d \
        --device /dev/kfd \
        --device /dev/dri \
        -v ollama:/root/.ollama \
        -p 11434:11434 \
        --name ollama \
        ollama/ollama:rocm
    
  • Чтобы настроить Ollama через Docker Compose:

  1. Создайте файл docker-compose.yaml:

    services:
        ollama:
            image: ollama/ollama:rocm
            container_name: ollama
            ports:
                - "11434:11434"
            volumes:
                - ollama_data:/root/.ollama
            devices:
                - /dev/kfd:/dev/kfd
                - /dev/dri:/dev/dri
            environment:
                - OLLAMA_HOST=0.0.0.0
                - OLLAMA_ORIGINS=*
                - OLLAMA_CONTEXT_LENGTH=8192
                - OLLAMA_FLASH_ATTENTION=1
            restart: unless-stopped
    
    volumes:
        ollama_data:
    
  2. Запустите docker-compose из каталога, в котором находится созданный файл docker-compose.yaml:

    docker-compose up -d
    

Дополнительные настройки

Переменные окружения

Переменная

Описание

Значение по умолчанию

OLLAMA_HOST

Адрес и порт сервера

127.0.0.1:11434

OLLAMA_ORIGINS

Разрешённые CORS origins

*

OLLAMA_CONTEXT_LENGTH

Размер контекстного окна (токены)

Зависит от модели

OLLAMA_FLASH_ATTENTION

Включает Flash Attention (экономия памяти)

0

OLLAMA_NUM_PARALLEL

Максимум параллельных запросов на модель

1

OLLAMA_MAX_LOADED_MODELS

Максимум одновременно загруженных моделей

3

OLLAMA_MAX_QUEUE

Максимум запросов в очереди

512

OLLAMA_NUM_GPU

Количество слоёв, загружаемых в GPU

auto

OLLAMA_KV_CACHE_TYPE

Тип квантизации KV-кеша (f16, q8_0, q4_0)

f16

OLLAMA_MODELS

Путь к директории с моделями

~/.ollama/models

  • OLLAMA_CONTEXT_LENGTH — размер контекстного окна в токенах. Большие значения требуют больше памяти GPU. Возможные значения:

    • 8192 — стандартное значение;

    • 32768 — для длинных документов;

    • 131072 — максимум для некоторых моделей.

  • OLLAMA_FLASH_ATTENTION — включает Flash Attention, что значительно снижает потребление памяти при увеличении контекста.

  • OLLAMA_KV_CACHE_TYPE — квантизация кеша ключей-значений. Возможные значения:

    • f16 — полная точность;

    • q8_0 — потребляет примерно в два раза меньше памяти, чем использование формата f16, потеря точности незначительная. Установка этого значения не оказывает заметного влияния на качество работы модели;

    • q4_0 — потребляет примерно в четыре раза меньше памяти, чем f16, с потерей точности от небольшой до средней, которая может быть более заметна при работе с большими контекстами.

  • OLLAMA_NUM_PARALLEL — количество параллельных запросов. Увеличивает пропускную способность, но требует больше памяти.

Загрузка модели

Загрузить модель можно с помощью следующих команд:

# В контейнере
docker exec -it ollama ollama pull gpt-oss:20b

# Через API
curl http://localhost:11434/api/pull -d '{"name": "gpt-oss:20b"}'

Чтобы проверить загруженные модели, выполните следующую команду:

docker exec -it ollama ollama list

Подключение через OpenAI API

Для подключения через OpenAI API используются следующие параметры:

  • Base URL: http://localhost:11434/v1/;

  • API Key: ollama (требуется, но игнорируется);

  • Model: имя модели, например, gpt-oss:20b.

Установка и настройка vLLM

Для примера используется модель gpt-oss:20b.

Другие модели можно посмотреть в документации vLLM.

Установка vLLM для NVIDIA GPU

Для установки и настройки можно использовать Docker Compose (docker-compose.yaml) или выполнить команду Docker.

Docker Compose

  1. Создайте файл docker-compose.yaml:

    services:
        vllm-gpt-oss-20b:
            image: vllm/vllm-openai:v0.12.0
            container_name: vllm-gpt-oss-20b
            runtime: nvidia
            ports:
                - "8000:8000"
            environment:
                - HF_TOKEN=${HF_TOKEN}
            ipc: host
            shm_size: '32gb'
            command: >
                --model openai/gpt-oss-20b
                --tensor-parallel-size 1
                --gpu-memory-utilization 0.85
                --max-num-batched-tokens 4096
                --max-num-seqs 128
                --enable-chunked-prefill
                --host 0.0.0.0
                --port 8000
                --api-key ${VLLM_API_KEY:-}
                --uvicorn-log-level info
                --enable-request-id-headers
            volumes:
                - hf_cache:/root/.cache/huggingface
            restart: unless-stopped
    
    volumes:
        hf_cache:
    
  2. Создайте файл .env:

    HF_TOKEN=hf_your_huggingface_token_here
    VLLM_API_KEY=your-secret-api-key
    
  3. Запустите docker-compose из каталога, в котором находится созданный файл docker-compose.yaml:

    docker-compose up -d
    

Docker команда

  docker run -d \
--runtime nvidia \
--gpus all \
-p 8000:8000 \
-e HF_TOKEN=${HF_TOKEN} \
--ipc=host \
--shm-size=32g \
-v hf_cache:/root/.cache/huggingface \
--name vllm-gpt-oss-20b \
vllm/vllm-openai:v0.12.0 \
--model openai/gpt-oss-20b \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.85 \
--max-num-batched-tokens 4096 \
--max-num-seqs 128 \
--enable-chunked-prefill \
--host 0.0.0.0 \
--port 8000 \
--api-key ${VLLM_API_KEY:-} \
--uvicorn-log-level info \
--enable-request-id-headers

Установка vLLM для AMD GPU (ROCm)

Docker Compose

  1. Создайте файл docker-compose.yaml:

    services:
        vllm-gpt-oss-20b:
            image: rocm/vllm-dev:nightly
            container_name: vllm-gpt-oss-20b
            network_mode: host
            ipc: host
            cap_add:
                - SYS_PTRACE
        security_opt:
            - seccomp:unconfined
        group_add:
            - video
        devices:
            - /dev/kfd:/dev/kfd
            - /dev/dri:/dev/dri
        environment:
            - HF_TOKEN=${HF_TOKEN}
            - HF_HOME=/app/models
        volumes:
            - ./models:/app/models
            - /dev/shm:/dev/shm
        command: >
            vllm serve openai/gpt-oss-20b
            --port 8000
            --host 0.0.0.0
            --trust-remote-code
            --gpu-memory-utilization 0.85
            --max-num-batched-tokens 4096
            --max-num-seqs 128
            --enable-chunked-prefill
            --api-key ${VLLM_API_KEY:-}
            --uvicorn-log-level info
            --enable-request-id-headers
        restart: unless-stopped
    
  2. Запустите docker-compose из каталога, в котором находится созданный файл docker-compose.yaml:

    docker-compose up -d
    

Docker команда

  docker run -d \
--network=host \
--group-add=video \
--ipc=host \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--device /dev/kfd \
--device /dev/dri \
-e HF_TOKEN=${HF_TOKEN} \
-e HF_HOME=/app/models \
-v $(pwd)/models:/app/models \
--name vllm-gpt-oss-20b \
rocm/vllm-dev:nightly \
vllm serve openai/gpt-oss-20b \
--port 8000 \
--host 0.0.0.0 \
--trust-remote-code \
--gpu-memory-utilization 0.85 \
--max-num-batched-tokens 4096 \
--max-num-seqs 128 \
--enable-chunked-prefill \
--api-key ${VLLM_API_KEY:-} \
--uvicorn-log-level info \
--enable-request-id-headers

Параметры vLLM

Основные параметры vLLM

Параметр

Описание

Значение по умолчанию

Рекомендации

--model

Путь или ID модели HuggingFace

-

Обязательный параметр

--tensor-parallel-size

Количество GPU для распределения модели

1

--gpu-memory-utilization

Доля памяти GPU (0-1)

0.9

0.85 — баланс производительности и стабильности

--max-model-len

Макс. длина последовательности (контекст)

Из конфигурации

Уменьшить для экономии памяти

--max-num-batched-tokens

Макс. токенов в батче

8192

4096 — хороший баланс

--max-num-seqs

Макс. параллельных последовательностей

256

128 — для стабильности

--trust-remote-code

Доверять коду из HuggingFace

False

Для некоторых моделей

--enable-chunked-prefill

Chunked prefill для длинных промптов

False

Рекомендуется включить

Параметры сервера

Параметр

Описание

Значение по умолчанию

--host

Адрес сервера

None (localhost)

--port

Порт сервера

8000

--api-key

API ключ для аутентификации

None

--served-model-name

Альтернативное имя модели в API

Значение –model

--uvicorn-log-level

Уровень логирования (debug, info, warning)

info

--enable-request-id-headers

Добавлять X-Request-Id в ответы

False

--enable-auto-tool-choice

Авто-выбор инструментов для function calling

False

Параметры памяти и KV-кеша

Параметр

Описание

Значение по умолчанию

--kv-cache-memory-bytes

Размер KV-кеша в байтах (например, 10G)

Auto

--swap-space|

Размер swap на CPU (GiB)

4

Подключение через OpenAI API

Имя модели в API запросах должно точно совпадать с параметром --model в Docker конфигурации. Если указан --model openai/gpt-oss-20b, то в API используйте model: "openai/gpt-oss-20b".

Если вы хотите использовать короткое имя (например, gpt-oss-20b), добавьте параметр --served-model-name gpt-oss-20b в Docker конфигурацию.

Параметр

Значение

Base URL

http://localhost:8000/v1/

API Key

Значение VLLM_API_KEY (или любое, если ключ не задан)

Model

openai/gpt-oss-20b