Установка и настройка LLM-серверов
Установка и настройка Ollama
Установка Ollama в Docker
Для примера используется модель gpt-oss:20b.
Другие модели можно посмотреть в документации Ollama.
Для NVIDIA GPU
Чтобы настроить Ollama с помощью Docker команды:
Установите NVIDIA Container Toolkit.
Настройте репозиторий:
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
Установите пакеты NVIDIA Container Toolkit:
sudo apt-get install -y nvidia-container-toolkit
Настройте репозиторий:
curl -fsSL https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo \ | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
Установите пакеты NVIDIA Container Toolkit:
sudo yum install -y nvidia-container-toolkit
Настройте Docker для использования драйвера Nvidia:
sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker
Выполните команду:
docker run -d \ --gpus=all \ -v ollama:/root/.ollama \ -p 11434:11434 \ --name ollama \ ollama/ollama
Чтобы настроить Ollama через Docker Compose:
Создайте файл 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:
Запустите docker-compose из каталога, в котором находится созданный файл docker-compose.yaml:
docker-compose up -d
Для AMD GPU (ROCm)
Чтобы настроить Ollama с помощью Docker команды:
Выполните команду:
docker run -d \ --device /dev/kfd \ --device /dev/dri \ -v ollama:/root/.ollama \ -p 11434:11434 \ --name ollama \ ollama/ollama:rocm
Чтобы настроить Ollama через Docker Compose:
Создайте файл 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:
Запустите 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
Создайте файл 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:Создайте файл .env:
HF_TOKEN=hf_your_huggingface_token_here VLLM_API_KEY=your-secret-api-key
Запустите 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
Создайте файл 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Запустите 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
Параметр |
Описание |
Значение по умолчанию |
Рекомендации |
|---|---|---|---|
--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-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 |
|
API Key |
Значение VLLM_API_KEY (или любое, если ключ не задан) |
Model |
openai/gpt-oss-20b |