#!/usr/bin/env bash # Эквивалент docker-compose.yml для Podman: один запуск — один контейнер llama-server. # Требования: Podman, драйвер NVIDIA, NVIDIA Container Toolkit с CDI для Podman # (обычно: nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml && перезапуск). # GPU по умолчанию: --device nvidia.com/gpu=all # Если не подходит: export PODMAN_GPU_FLAGS='--gpus all' (Podman 4.3+) или см. доку toolkit. # # Из каталога репозитория: ./podman-llama.sh # Переменные — как в compose / .env: PORT, MODEL_FILE, CPU_MOE, N_CPU_MOE, CTX_SIZE, # CACHE_TYPE_K, CACHE_TYPE_V, THREADS; образ: IMAGE (по умолчанию server-cuda). # Порт на хосте: только IPv4 (BIND_HOST по умолчанию 0.0.0.0), иначе Podman часто вешает [::]. set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT" if [[ -f .env ]]; then set -a # shellcheck disable=SC1091 source .env set +a fi : "${PORT:=8080}" : "${MODEL_FILE:=model.gguf}" : "${CPU_MOE:=0}" : "${N_CPU_MOE:=99}" : "${CTX_SIZE:=50000}" : "${CACHE_TYPE_K:=q8_0}" : "${CACHE_TYPE_V:=turbo2}" : "${THREADS:=8}" : "${IMAGE:=ghcr.io/ggml-org/llama.cpp:server-cuda13}" : "${BIND_HOST:=0.0.0.0}" # Разбить по пробелам для podman (пусто = только CDI-устройство). # Пример: PODMAN_GPU_FLAGS='--gpus all' read -r -a PODMAN_GPU_FLAGS_ARR <<<"${PODMAN_GPU_FLAGS:---device nvidia.com/gpu=all}" podman run -d \ --name llama-server \ --replace \ --restart no \ --shm-size 1g \ --cpuset-cpus="0-11" \ --ulimit memlock=-1:-1 \ -p "${BIND_HOST}:${PORT}:8080" \ -v "${ROOT}/models:/models:ro" \ -e NVIDIA_VISIBLE_DEVICES=all \ -e "LLAMA_ARG_CPU_MOE=${CPU_MOE}" \ "${PODMAN_GPU_FLAGS_ARR[@]}" \ "$IMAGE" \ -m "/models/${MODEL_FILE}" \ --host 0.0.0.0 \ --port 8080 \ -ngl "${N_GPU_LAYERS}" \ --n-cpu-moe "${N_CPU_MOE}" \ --spec-type draft-mtp --spec-draft-n-max 3 \ -c "${CTX_SIZE}" \ -np 1 \ -fa on \ --cache-type-k "${CACHE_TYPE_K}" \ --cache-type-v "${CACHE_TYPE_V}" \ --no-mmap \ --mlock \ --ctx-checkpoints 1 \ --cache-ram -1 \ --jinja \ --reasoning on \ --reasoning-budget -1 \ -b 2048 \ -ub 2048 \ --threads "${THREADS}"