Данила (Dayfing)
Жарияланымдарға оралу
2 976 сөз15 мин

Ollama, llama.cpp әлде vLLM: жергілікті LLM-серверді таңдау

Ноутбуктегі бір әзірлеушіге Ollama жеткілікті: ол бірнеше минутта орнатылады, модельдерді атауы бойынша жүктеп алады және оларды сұраныс келгенде іске қосады. Шағын команда, Mac, GPU жоқ сервер немесе тұтынушылық бейнекарта үшін llama.cpp жобасының llama-server серверін алыңыз: ол GGUF-модельдерге қызмет көрсетеді және параллель слоттарды, API кілттерін және Prometheus метрикаларын нақты басқаруға мүмкіндік береді. Дата-орталық деңгейіндегі GPU-дағы production-трафик үшін vLLM іске қосыңыз: оның continuous batching және PagedAttention тетіктері бір мезгілдегі сұраныстар көбейген сайын өткізу қабілетін жоғары ұстайды. Үшеуі де OpenAI-үйлесімді API ұсынады, сондықтан біреуінен бастап, кейін base URL мен модель атауын ауыстыру арқылы басқасына көшуге болады.

Әр сервер неге оңтайландырылған

Ollama бірінші жауапқа дейінгі уақытқа оңтайландырылған. Ол десктоп қосымшасы немесе фондық қызмет ретінде жұмыс істейді, модельдерді атауы бойынша жүктеп алады, модельді бірінші сұраныста жүктейді және бос тұрған уақыттан кейін жадтан шығарады: Ollama FAQ бойынша әдепкі мерзім бес минут. Жоспарлаушыны нәзік баптаудың орнына бірнеше OLLAMA_* орта айнымалысы бар, және бүкіл мәні осы қарапайымдылықта.

llama.cpp тасымалдылыққа оңтайландырылған. Бұл ggml кітапханасына негізделген C/C++ инференс қозғалтқышы: онда Apple Silicon үшін Metal, CUDA, AMD үшін HIP, Vulkan, SYCL бэкендтері және AVX, AVX2, AVX-512, AMX пен ARM NEON үшін оңтайландырылған CPU жолдары бар. Модель VRAM-ға сыймаса, ол қабаттардың бір бөлігін GPU-да, қалғанын жүйелік жадта ұстай алады. Оның HTTP-сервері llama-server бір бинарлық файлдан, GGUF-файлдан және флагтар жиынынан тұрады. Жоба README-інің жылдам бастау бөлімінде енді біріккен llama serve командасы көрсетілген, ал llama-server құжаттамасы мен Docker-образдар әлі де осы мақалада қолданылатын llama-server орындалатын файлын жеткізеді.

vLLM үдеткіштердегі өткізу қабілетіне оңтайландырылған. Оның README-інде KV-кэшті басқаруға арналған PagedAttention, continuous batching, chunked prefill, prefix caching, бірнеше LoRA-ға қызмет көрсету, тензорлық және конвейерлік параллелизм және кванттау форматтарының ұзын тізімі аталған. Ол NVIDIA, AMD және Intel GPU-ларын, x86, ARM және PowerPC процессорларын қолдайды, ал басқа үдеткіштер аппараттық плагиндер арқылы қосылады.

Қысқасы: Ollama мен llama.cpp қарапайым жабдыққа және бір мезгілде жұмыс істейтін бірнеше пайдаланушыға лайық, ал сұраныстар бір уақытта көптеп келе бастағанда vLLM өзінің күрделірек баптауын ақтайды. Таңдаудың аппараттық жағы, соның ішінде салмақтар мен KV-кэшке қанша жад керек екені, жергілікті LLM-ге арналған жабдық нұсқаулығында қарастырылған.

Бір OpenAI-клиент, үш base URL

Үш сервердің бәрі /v1/chat/completions, /v1/completions, /v1/embeddings, /v1/models және /v1/responses маршруттарын іске асырады. Ollama-ның OpenAI-мен үйлесімділік беті Responses тек күйді сақтамайтын режимде қолдау табатынын нақтылайды. llama-server қосымша Anthropic-үйлесімді /v1/messages ұсынады, ал vLLM OpenAI маршруттарының қатарында Anthropic Messages, аудио транскрипциясы және pooling API-ларын атайды.

Клиент коды өзгермеуі үшін сервер таңдауын конфигурацияда ұстаңыз:

import os
from openai import OpenAI

# Ollama:       http://127.0.0.1:11434/v1
# llama-server: http://127.0.0.1:8080/v1
# vLLM:         http://127.0.0.1:8000/v1
client = OpenAI(
    base_url=os.environ["LLM_BASE_URL"],
    api_key=os.environ.get("LLM_API_KEY", "not-used"),
)

reply = client.chat.completions.create(
    model=os.environ["LLM_MODEL"],
    messages=[{"role": "user", "content": "Explain HTTP 429 in two sentences."}],
    temperature=0.2,
)
print(reply.choices[0].message.content)

OpenAI SDK кілт жолын талап етеді, сондықтан серверде кілт болмаса, орнына толтырғыш мән беріңіз. Ollama жергілікті режимде кілтті елемейді, ал llama-server мен vLLM оны тек кілтпен іске қосылғанда тексереді.

Серверлердің айырмашылығы model өрісінде. Ollama өз кітапханасындағы тегті күтеді, мысалы qwen3:8b. vLLM Hugging Face репозиторийінің атауын немесе --served-model-name мәнін күтеді. Бір модельмен жұмыс істейтін llama-server өзі жүктеген модельге қызмет көрсетеді, --alias флагы /v1/models қайтаратын атауды белгілейді, ал router режимінде атау модельді таңдайды.

Үйлесімділік OpenAI спецификациясының шекарасында аяқталады. vLLM top_k сияқты қосымша параметрлерді extra_body арқылы қабылдайды және әдепкі бойынша модельдің generation_config.json файлын қолданады, сондықтан --generation-config vllm берілмесе, семплингтің әдепкі мәндері өзгеруі мүмкін. Чат үлгілері мен токенизаторлар GGUF-конвертация мен бастапқы чекпойнт арасында да ерекшеленуі мүмкін, сондықтан серверді ауыстырмас бұрын бір бағалау жиынын екі серверде де іске қосыңыз, бұл AI-агенттерді бағалау нұсқаулығында сипатталған.

Модель форматтары және салмақтар қайдан алынады

Үш сервер әртүрлі файлдарды оқиды, және бұл көбіне мәселені өнімділіктен бұрын шешеді.

Ollama модельдерді өз кітапханасынан атауы бойынша жүктеп алады, Hugging Face-тегі GGUF-репозиторийлерді ollama run hf.co/{user}/{repo}:{quant} командасымен іске қосады және жергілікті GGUF-файлдарды немесе Safetensors каталогтарын Modelfile арқылы импорттайды, онда FROM жолы салмақтарды көрсетеді. Импорт кезінде ол GGUF-файлдарды кванттамайды, сондықтан алдымен оларды llama.cpp құралдарымен кванттаңыз.

llama.cpp GGUF оқиды. Hugging Face чекпойнтын convert_hf_to_gguf.py скриптімен түрлендіріп, кванттайды немесе дайын GGUF-ті -hf user/repo:quant арқылы жүктеп алады. README 1,5 биттен 8 битке дейінгі бүтін санды кванттауды атайды. Көру қабілеті бар модельдерге проектор файлы да қажет, оны -hf автоматты түрде жүктеп алады.

vLLM Safetensors салмақтары бар Hugging Face модель репозиторийлерін, сондай-ақ GPTQ, AWQ, FP8, INT8, INT4 және compressed-tensors сияқты кванттталған чекпойнттарды оқиды. Құжаттама GGUF қолдауын өте эксперименттік деп атайды, және бұл қолдау сыртқы vllm-gguf-plugin плагиніне көшті.

# Ollama: a library model, or a GGUF repository on Hugging Face
ollama pull qwen3:8b
ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:Q8_0

# llama.cpp: download a GGUF and serve it
llama-server -hf ggml-org/Qwen3.5-0.8B-GGUF --port 8080

# vLLM: serve a Hugging Face repository
vllm serve Qwen/Qwen3-0.6B --host 127.0.0.1 --port 8000

Конкуренттілік, батчинг және KV-кэш жады

Конкуренттілік жадты қажет етеді. Әрбір белсенді тізбек өз контекстіндегі әр токен үшін attention кілттері мен мәндерін сақтайды, сондықтан жад бір мезгілдегі тізбектер санын олардың ұзындығына көбейткенге сай өседі, әрі бұл салмақтардың үстіне қосылады. Стандартты трансформер үшін мына бағалау пайдалы:

KV bytes per token = 2 × layers × kv_heads × head_dim × bytes_per_value
Qwen3-8B, 16-bit cache: 2 × 36 × 8 × 128 × 2 = 147,456 bytes = 144 KiB
One 32,768-token sequence: 144 KiB × 32,768 = 4.5 GiB

Қабаттар саны, KV-бастар саны және бас өлшемі модельдің config.json файлынан алынады. Осындай төрт тізбекке салмақтарды есептемегенде 18 GiB кэш керек. Sliding-window немесе гибридті attention қабаттары бар модельдерге азырақ жад қажет, сондықтан олар үшін формула жоғарғы шекті береді.

Ollama

OLLAMA_NUM_PARALLEL әрбір жүктелген модель бір уақытта қанша сұранысты өңдейтінін белгілейді, ал FAQ әдепкі мәнді 1 деп көрсетеді. OLLAMA_MAX_LOADED_MODELS әдепкі бойынша GPU санының үш еселенген мәніне, ал CPU-дағы инференсте үшке тең. OLLAMA_MAX_QUEUE әдепкі бойынша кезекте 512 сұранысқа рұқсат береді, одан кейін сервер 503 қатесімен жауап береді. FAQ сондай-ақ қажетті жад OLLAMA_NUM_PARALLEL × OLLAMA_CONTEXT_LENGTH көбейтіндісіне сай өсетінін ескертеді. Әдепкі контекст ұзындығын құжаттаманың әр беті әртүрлі сипаттайды және ол қолжетімді VRAM-ға байланысты, сондықтан оны нақты көрсетіп, ollama ps шығысының CONTEXT бағанынан тексеріңіз.

OLLAMA_HOST=127.0.0.1:11434 \
OLLAMA_NUM_PARALLEL=4 \
OLLAMA_CONTEXT_LENGTH=16384 \
OLLAMA_KEEP_ALIVE=30m \
ollama serve

llama-server

llama-server жұмысты слоттарға бөледі. Әр слот бір диалогты ұстайды, -np слоттар санын белгілейді, ал әдепкі -1 мәні автоматты таңдауды білдіреді. Continuous batching әдепкі бойынша қосулы, сондықтан жаңа сұраныстар декодтау қадамдарының арасында ағымдағы батчқа қосылады. Слоттар саны автоматты таңдалса, барлық слоттар бір ортақ KV-буферді бөліседі. -np қолмен берілсе, ортақ буфер әдепкі бойынша өшірулі болады және -c слоттар арасында бөлінеді: -c 32768 -np 4 әр диалогқа 8192 токен береді. Нәтижені әр слоттың n_ctx мәнін көрсететін GET /slots арқылы тексеріңіз.

GPU-ға жүктеу -ngl флагымен беріледі, ол санды, auto (әдепкі) немесе all мәнін қабылдайды. Модель сыймаса, CPU-да қалған қабаттар жүйелік жадтың өткізу қабілетіне тіреледі, сондықтан жартылай жүктелген модель жұмыс істейді, бірақ әдетте токендерді баяуырақ генерациялайды.

llama-server -m /models/qwen3-8b-q4_k_m.gguf \
  --host 127.0.0.1 --port 8080 \
  -c 32768 -np 4 -ngl all \
  --api-key-file /etc/llama/api-keys.txt \
  --metrics

vLLM

vLLM-дегі continuous batching бос KV-кэш блоктары болғанша әр декодтау итерациясында жаңа тізбектерді қабылдайды, ал PagedAttention бұл кэшті ең үлкен ұзындықты алдын ала резервтемей, тізбектер өскен сайын тұрақты өлшемді блоктармен бөледі. Іске қосылғанда vLLM GPU жадының --gpu-memory-utilization белгілеген үлесін алады да, салмақтар мен активацияларға арналған жұмыс жадынан кейін қалған бөлігін KV-кэш блоктарына айналдырады. Жүктеме кезінде блоктар таусылса, ол сұраныстардың бір бөлігін ығыстырып шығарады және орын босағанда оларды қайта есептейді. Бұл vllm:num_preemptions метрикасында және кідірістің құйрығында көрінеді.

Негізгі тұтқалар: қабылданатын ең ұзын контекст үшін --max-model-len, бір итерациядағы тізбектердің ең көп саны үшін --max-num-seqs, --max-num-batched-tokens, --gpu-memory-utilization және бір модельді бірнеше GPU арасында бөлу үшін --tensor-parallel-size. --max-model-len мәнін қосымшаға шын мәнінде қажет деңгейге дейін азайту әдетте бір мезгілдегі сұраныстарды көбірек сыйғызудың ең арзан жолы.

export VLLM_API_KEY="$(openssl rand -hex 32)"
vllm serve Qwen/Qwen3-8B \
  --host 127.0.0.1 --port 8000 \
  --max-model-len 32768 \
  --max-num-seqs 64 \
  --gpu-memory-utilization 0.90

Құрылымдалған шығыс және құралдарды шақыру

Үш сервердің бәрі OpenAI-дің response_format өрісі арқылы шығысты JSON-схемамен шектей алады, сондықтан мұндай сұраныс олардың арасында өзгеріссіз ауысады:

schema = {
    "type": "object",
    "properties": {
        "severity": {"type": "string", "enum": ["low", "medium", "high"]},
        "summary": {"type": "string"},
    },
    "required": ["severity", "summary"],
    "additionalProperties": False,
}

reply = client.chat.completions.create(
    model=os.environ["LLM_MODEL"],
    messages=[{"role": "user", "content": "Triage this log line: disk /var is 97% full"}],
    response_format={
        "type": "json_schema",
        "json_schema": {"name": "triage", "schema": schema},
    },
)

Ollama-ның нативті API-і format өрісінде "json" мәнін немесе схеманы да қабылдайды, ал құжаттама схеманы промптта қайталауға кеңес береді. llama-server JSON-схемаларды өзінің GBNF грамматика форматына түрлендіреді және басқа шығыс пішіндері үшін дайын грамматиканы қабылдайды. vLLM response_format өрісін және extra_body ішіндегі json, regex, choice, grammar және structural_tag кілттері бар structured_outputs объектісін қолдайды. vLLM structured outputs беті атап өткендей, ескі guided_* параметрлері v0.12.0 нұсқасында алынып тасталды. Шектелген декодтау синтаксисті кепілдендіреді, бірақ ақиқаттықты емес, ал max_tokens бойынша қиылған жауап бәрібір жарамсыз JSON болады, сондықтан әр нәтижені өз кодыңызда схема бойынша тексеріңіз.

Құралдарды шақыру үш серверде де жұмыс істейді, бірақ әртүрлі бапталады:

  • Ollama /api/chat және /v1/chat/completions маршруттарында tools өрісін, соның ішінде параллель шақыруларды, үлгілері құралдарды қолдайтын модельдер үшін қабылдайды.
  • llama-server OpenAI стиліндегі құралдарды әдепкі бойынша қосулы тұратын Jinja чат үлгілері арқылы қолдайды. llama.cpp-тің function calling жазбалары бірнеше модель отбасына арналған нативті өңдеуіштерді және көбірек токен жұмсайтын әмбебап резервтік өңдеуішті атайды. Сұраныс "parallel_tool_calls": true жібермейінше, параллель шақырулар өшірулі тұрады.
  • vLLM үшін --enable-auto-tool-choice және модель отбасына сәйкес --tool-call-parser қажет, мысалы Qwen2.5 үшін hermes немесе Llama 3.1 мен 3.2 үшін llama3_json. vLLM tool calling беті аталған функциялар мен tool_choice="required" structured outputs қолданатынын, ал auto режимі аргументтердің дұрыс талданатынына кепілдік бермейтінін түсіндіреді.
vllm serve Qwen/Qwen2.5-7B-Instruct \
  --host 127.0.0.1 --port 8000 \
  --enable-auto-tool-choice --tool-call-parser hermes

Құрал аргументтерін сенімсіз кіріс деп санаңыз. Оларды модель таңдайды, ал табылған құжаттың ішіндегі мәтін бұл таңдауға әсер етуі мүмкін, бұл prompt injection және MCP қауіпсіздігі нұсқаулығында түсіндірілген.

Docker-де GPU қолжетімділігімен іске қосу

NVIDIA GPU бар Linux-та --gpus жұмыс істеуі үшін алдымен NVIDIA Container Toolkit орнатыңыз. Төмендегі командалар әр жобаның құжатталған образдары мен флагтарын бір өзгеріспен қайталайды: әр порт тек 127.0.0.1 мекенжайында жарияланады. Docker-дің порттарды жариялау туралы құжаттамасы хост мекенжайы көрсетілмеген порттар хосттың барлық мекенжайында жарияланатынын айтады, ал Docker-дің брандмауэр туралы жазбалары жарияланған порттардың трафигі ufw ережелеріне жеткенше басқа бағытқа бұрылатынын қосады.

# Ollama with NVIDIA GPUs
docker run -d --name ollama --gpus=all \
  -v ollama:/root/.ollama \
  -p 127.0.0.1:11434:11434 \
  ollama/ollama

# llama-server, CUDA build
docker run -d --name llama --gpus all \
  -v /srv/models:/models:ro \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/ggml-org/llama.cpp:server-cuda \
  -m /models/qwen3-8b-q4_k_m.gguf --host 0.0.0.0 --port 8080 -ngl all

# vLLM with NVIDIA GPUs
docker run -d --name vllm --runtime nvidia --gpus all --ipc=host \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  --env "HF_TOKEN=$HF_TOKEN" \
  -p 127.0.0.1:8000:8000 \
  vllm/vllm-openai:latest \
  --model Qwen/Qwen3-8B

Контейнер ішінде сервер 0.0.0.0 мекенжайын тыңдауы керек, әйтпесе жарияланған порт оған жетпейді. Оны жабық ететін нәрсе хост жағындағы 127.0.0.1. vLLM-нің құжатталған командасында --ipc=host бар, өйткені PyTorch процестер арасында деректерді ортақ жад арқылы алмасады, әсіресе тензорлық-параллель инференсте. AMD GPU үшін --device /dev/kfd --device /dev/dri параметрлерімен ollama/ollama:rocm образын, llama.cpp-тің server-rocm немесе server-vulkan образдарын, не болмаса vllm/vllm-openai-rocm қолданыңыз. Production ортасында latest орнына образ тегтерін немесе digest мәндерін бекітіңіз.

Қауіпсіздік: жергілікті байланыстыру және проксиде аутентификация

Инференс портына дерекқор портына қарағандай қараңыз. Оған қол жеткізген кез келген адам GPU уақытыңызды жұмсай алады, модель қайтарғанның бәрін оқи алады, ал кейбір конфигурацияларда әкімшілік маршруттарды шақыра алады.

Байланыстыру мекенжайынан бастаңыз. Ollama әдепкі бойынша 127.0.0.1:11434 мекенжайын, ал llama-server 127.0.0.1:8080 мекенжайын тыңдайды. vLLM басқаша әрекет етеді: --host берілмесе, оның launcher-і барлық интерфейсті тыңдайды, сондықтан контейнерден тыс әрқашан --host 127.0.0.1 беріңіз.

Содан кейін әр сервердің кілті шын мәнінде нені қорғайтынын тексеріңіз:

  • Ollama-ның жергілікті API-інде API кілтінің баптауы жоқ. Портқа жеткен кез келген адам оны пайдалана алады, сондықтан оған қолжетімділікті тек аутентификация жасайтын прокси арқылы ашыңыз.
  • llama-server өз API-інде --api-key немесе --api-key-file тексереді, ал /health әдейі ашық қалады. README-де CORS әдепкі бойынша кез келген Origin мәнін кері қайтаратыны айтылған және жергілікті желілер үшін --cors-origins ұсынылады.
  • vLLM-дегі --api-key тек бірнеше жол префиксін, соның ішінде /v1 префиксін қамтиды. vLLM қауіпсіздік нұсқаулығы қорғалмаған маршруттарды атайды, мысалы сол инференс функцияларына апаратын /invocations, сондай-ақ /pause немесе /abort_requests, және рұқсат етілген эндпоинттар тізімі бар кері проксиді ұсынады.

Nginx-тегі шағын фронтенд екі мәселені де шешеді. Ол TLS-ті аяқтайды, bearer-токенді тексереді, тек /v1/ жолын өткізеді және қалғанының бәріне 404 қайтарады.

map $http_authorization $llm_client {
    default "";
    "Bearer REPLACE_WITH_A_LONG_RANDOM_TOKEN" "team";
}

server {
    listen 443 ssl;
    server_name llm.example.internal;
    ssl_certificate     /etc/nginx/tls/llm.crt;
    ssl_certificate_key /etc/nginx/tls/llm.key;
    client_max_body_size 10m;

    location /v1/ {
        if ($llm_client = "") { return 401; }
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_read_timeout 600s;
    }

    location / {
        return 404;
    }
}

proxy_buffering off ағындық токендердің клиентке генерацияланған сайын жетуіне мүмкіндік береді. Upstream-сервердің өз кілті болса, проксиді айналып өткен сұраныс бәрібір өтпеуі үшін оған да сол токенді беріңіз. Ollama үшін proxy_pass бағытын 11434 портына бұрып, FAQ-тағы мысалдағыдай proxy_set_header Host localhost:11434 жолын қосыңыз. Бір GPU-ды бірнеше пайдаланушы бөлісетін болса, limit_req қосыңыз. Әзірлеуші ноутбугында OLLAMA_ORIGINS=* сіз ашқан кез келген веб-беттің браузеріңіз арқылы жергілікті серверге жүгінуіне жол беретінін ұмытпаңыз.

Мониторинг және жұмыс қабілетін тексеру

Дайындықтан бастаңыз. llama-server-дегі /health модель жүктеліп жатқанда 503, дайын болғанда 200 қайтарады, ал vLLM де /health ұсынады. Оларды контейнерлердің health check тексерулері мен балансировщик сынамалары үшін қолданыңыз, бірақ генерация сапасының дұрыстығына дәлел ретінде емес.

vLLM әдепкі бойынша Prometheus метрикаларын /metrics арқылы береді. vLLM метрикалар беті vllm:num_requests_running, vllm:num_requests_waiting, vllm:kv_cache_usage_perc, бірінші токенге дейінгі уақыттың, токендер арасындағы кідірістің және сұраныстың толық кідірісінің гистограммаларын, сондай-ақ ығыстыру есептегішін атайды. llama-server /metrics жолын тек --metrics флагымен іске қосылғанда береді, оның ішінде llamacpp:requests_processing, llamacpp:requests_deferred, llamacpp:prompt_tokens_seconds және llamacpp:predicted_tokens_seconds бар, ал GET /slots әр слоттың күйін көрсетеді.

scrape_configs:
  - job_name: vllm
    static_configs:
      - targets: ["127.0.0.1:8000"]
  - job_name: llama-server
    static_configs:
      - targets: ["127.0.0.1:8080"]

Ollama-ның құжатталған API-інде Prometheus эндпоинты жоқ. Жүктелген модельдерді, олардың VRAM тұтынуын, контекст ұзындығын және жадтан шығару уақытын көру үшін GET /api/ps қолданыңыз, әрі әр жауаптағы уақыт өрістерін оқыңыз. Ұзақтықтар наносекундпен берілген, сондықтан генерация жылдамдығы секундына eval_count / eval_duration × 10^9 токенге тең:

curl -s http://127.0.0.1:11434/api/generate \
  -d '{"model": "qwen3:8b", "prompt": "Say ready.", "stream": false}' |
  jq '{tokens: .eval_count, tokens_per_second: (.eval_count / .eval_duration * 1e9)}'

Пайдаланушылардың күтіп тұрғанын білдіретін сигналдарға алерт қойыңыз: нөлге түспейтін waiting немесе deferred кезегі, 1-ге жақын KV-кэш пайдаланымы, өсіп жатқан ығыстыру есептегіші және p95 деңгейінде бірінші токенге дейінгі уақыттың ұлғаюы. Сервер метрикалары сыйымдылықты сипаттайды. Олар сұранысты қай промпт, құрал шақыруы немесе іздеу қадамы баяулатқанын айтпайды, сондықтан оларды сұраныстар трассировкасымен байланыстырыңыз, бұл AI-агенттердің бақыланымдылығы нұсқаулығында сипатталған.

Бір кестедегі салыстыру

Ollama llama.cpp llama-server vLLM
Неге оңтайландырылған Жылдам орнату және модельдерді басқару CPU, Apple Silicon және тұтынушылық GPU-дағы тасымалдылық Дата-орталық GPU-ларындағы өткізу қабілеті
Модель форматтары Кітапхана модельдері, GGUF, Safetensors импорты GGUF Hugging Face Safetensors, GPTQ, AWQ, FP8 және басқалар; GGUF эксперименттік
Әдепкі мекенжай 127.0.0.1:11434 127.0.0.1:8080 Барлық интерфейс, 8000 порты
Кіріктірілген API кілті Жоқ --api-key, --api-key-file --api-key немесе VLLM_API_KEY, шектеулі жол префикстері
Конкуренттілік Әр модельге OLLAMA_NUM_PARALLEL, әдепкі 1 Continuous batching бар слоттар (-np) PagedAttention бар continuous batching
Құрылымдалған шығыс format, response_format response_format, JSON-схема, GBNF response_format, structured_outputs
Құралдарды шақыру Нативті және OpenAI маршруттарындағы tools Jinja үлгілері, нативті немесе әмбебап өңдеуіштер Парсермен бірге --enable-auto-tool-choice
Метрикалар /api/ps және жауап уақыттары --metrics арқылы /metrics, /slots Әдепкі бойынша /metrics
Кімге ең лайық Бір әзірлеушіге, прототиптерге Шағын командаларға, қарапайым немесе аралас жабдыққа Көп бір мезгілдегі пайдаланушыға, production SLO

Әзірлеу, команда және production үшін таңдау жолы

Сұрақтарды ретімен қарап, алғашқы нақты жауапта тоқтаңыз.

  1. Модельдерді ноутбукта немесе жұмыс станциясында бір адам сынап жатыр ма? Ollama қолданыңыз. Метрикалар, аутентификация немесе жеке сұраныс деңгейіндегі бақылау қажет болғанда келесі қадамға өтіңіз.
  2. Сіз Mac-та, GPU жоқ серверде немесе модель VRAM-ға әрең сиятын не мүлде сыймайтын тұтынушылық бейнекартада жұмыс істейсіз бе? llama-server қолданыңыз. GGUF кванттауы мен жартылай жүктеу оған vLLM модельді жүктей алмайтын жерде де жұмыс істеуге мүмкіндік береді.
  3. Бұл бір машинада бір мезгілде жұмыс істейтін бірнеше пайдаланушысы бар шағын команда ма? -np мәні ең жоғары конкуренттілікке тең, API кілті, --metrics және проксиі бар llama-server қолданыңыз. Егер барлығы бір-екі модельді пайдаланса және аутентификацияны прокси атқарса, Ollama да жарайды.
  4. Тұрақты конкурентті трафик, мақсатты кідірістер, бірнеше GPU немесе FP8 не AWQ сияқты GPU кванттау форматтары күтіле ме? Шлюздің артында localhost-қа байланыстырылған, бекітілген образдары бар және бірінші күннен Prometheus метрикаларын жинайтын vLLM қолданыңыз.

Көптеген командалар ақырында екеуін қолданады: әзірлеушілердің машиналарында Ollama немесе llama-server, staging пен production ортасында vLLM, және барлық жерде бірдей OpenAI-клиент коды. Бұл бағалау жиыны production-артефактіде іске қосылғанда ғана жұмыс істейді, өйткені бір модельдің GGUF-кванттауы мен FP8-чекпойнты іс жүзінде әртүрлі модельдер сияқты әрекет етеді. Production AI-агентінің архитектурасы нұсқаулығы осы серверлердің кез келгенінің алдында тұруы тиіс шлюзді, тайм-ауттарды, қайталауларды және резервтік нұсқаларды сипаттайды.

Орналастыру чеклисті

  • Серверді таңдау жолы бойынша таңдап, қызмет көрсететін модель файлын, кванттауды және чат үлгісін нақты тіркеңіз.
  • Ең жоғары конкуренттілік пен ең ұзын контекст үшін KV-кэш жадын есептеп, содан кейін OLLAMA_CONTEXT_LENGTH, -c пен -np немесе --max-model-len пен --max-num-seqs мәндерін баптаңыз.
  • Серверлерді 127.0.0.1 мекенжайына байланыстырыңыз, vLLM-ге --host 127.0.0.1 мәнін нақты беріңіз және Docker порттарын 127.0.0.1:port:port түрінде жариялаңыз.
  • TLS, аутентификация, рұқсат етілген эндпоинттар тізімі және сұраныс жиілігін шектеуді кері проксиге шығарыңыз. Аутентификациясыз инференс портын ешқашан ашпаңыз.
  • Қорғаныстың екінші деңгейі ретінде llama-server немесе vLLM-де кілт орнатыңыз және оны shell тарихында немесе образ қабаттарында қалдырмаңыз.
  • llama-server мен vLLM-нен /metrics жинап, Ollama-ның /api/ps жолын жабық желі арқылы сұрап отырыңыз.
  • Күтілетін конкуренттілікте өз промпттарыңызбен жүктеме сынағын өткізіп, бірінші токенге дейінгі уақытты, секундына токенді, кезек ұзындығын және жадты жазып алыңыз.
  • Құрылымдалған шығысты кодта схема бойынша тексеріп, құрал аргументтерін сенімсіз кіріс деп санаңыз.
  • Нұсқалар мен образ digest мәндерін бекітіп, сервер, модель файлы, кванттау немесе образ өзгерген сайын бағалау жиынын қайта іске қосыңыз.

Басқа жарияланымдар