Ollama: локальные LLM без боли

ollamallmself-hostingai

Когда я впервые попробовал ChatGPT, мысль была одна: «Круто, но я не хочу отправлять свой код на чужие серверы». Потом появился вопрос стоимости — API-ключи не бесконечные. А ещё бывают ситуации, когда интернета просто нет. Всё это привело меня к Ollama — инструменту, который превращает запуск локальных LLM из квеста с компиляцией C++ в одну команду в терминале.

Зачем вообще локальные LLM

Причин несколько, и каждая сама по себе достаточно весомая:

Приватность. Код вашего проекта, внутренняя документация, конфиги с секретами — всё это остаётся на вашей машине. Никаких data processing agreements, никаких «мы не используем ваши данные для обучения (но может быть)».

Стоимость. API-вызовы к GPT-4 или Claude набегают в ощутимую сумму, если пользоваться активно. Локальная модель — это одноразовая инвестиция в железо, а дальше бесплатно.

Офлайн-доступ. В самолёте, на даче, в бункере — модель работает без интернета.

Эксперименты. Хотите попробовать 10 разных моделей, поменять system prompt, покрутить temperature? Без лимитов и rate limits.

Установка

Ollama доступна для macOS, Linux и Windows. На Linux — одна команда:

curl -fsSL https://ollama.ai/install.sh | sh

На macOS проще всего через Homebrew:

brew install ollama

После установки Ollama работает как сервис и поднимает REST API на порту 11434. Проверяем:

ollama --version
curl http://localhost:11434/api/tags

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

Ollama использует концепцию, знакомую всем, кто работал с Docker — pull модели из реестра:

ollama pull llama3.2
ollama pull mistral
ollama pull qwen2.5
ollama pull phi3

Запуск интерактивного чата:

ollama run llama3.2

Посмотреть все загруженные модели:

ollama list

Схема архитектуры Ollama — сервер, модели, API и клиенты

GPU и квантизация: что нужно знать

Вот здесь начинается самое интересное. Полноразмерная Llama 3 70B в fp16 займёт ~140 ГБ видеопамяти. Очевидно, это не влезет в вашу RTX 3060. Поэтому существует квантизация — уменьшение точности весов модели.

Основные форматы, которые вы встретите:

  • Q4_K_M — 4-битная квантизация, средний вариант. Хороший баланс качества и размера. Llama 3 8B в Q4_K_M занимает ~4.9 ГБ. Для большинства задач этого достаточно.
  • Q5_K_M — 5-битная, чуть лучше качество, чуть больше размер. Разница с Q4 заметна на сложных задачах рассуждения.
  • Q8_0 — 8-битная, почти без потери качества, но занимает вдвое больше места, чем Q4. Llama 3 8B в Q8 — около 8.5 ГБ.

Правило простое: если модель влезает в VRAM в Q8 — берите Q8. Не влезает — берите Q4_K_M. Промежуточный Q5_K_M — для тех, кто хочет выжать максимум из доступной памяти.

# Скачать конкретную квантизацию
ollama pull llama3.2:8b-instruct-q5_K_M

Кастомизация через Modelfile

Modelfile — это как Dockerfile, но для LLM. Позволяет настроить модель под конкретную задачу:

FROM llama3.2

PARAMETER temperature 0.3
PARAMETER num_ctx 8192
PARAMETER top_p 0.9

SYSTEM """
Ты — опытный DevOps-инженер. Отвечай кратко и по делу.
Всегда приводи примеры команд. Если не уверен — так и скажи.
Формат ответа: сначала краткий ответ, потом детали.
"""

Создаём кастомную модель:

ollama create devops-helper -f Modelfile
ollama run devops-helper

Ключевые параметры:

  • temperature — креативность (0.0-1.0). Для кода ставлю 0.1-0.3, для текстов 0.7-0.8.
  • num_ctx — размер контекстного окна. По умолчанию 2048, но для анализа кода лучше 8192 или 16384.
  • top_p — nucleus sampling. Обычно оставляю 0.9.

REST API

Ollama поднимает полноценный HTTP API, совместимый с форматом OpenAI. Это означает, что большинство инструментов, написанных для OpenAI API, работают с Ollama из коробки.

# Генерация ответа
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Объясни разницу между CMD и ENTRYPOINT в Dockerfile",
  "stream": false
}'

# Chat-формат (с историей сообщений)
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    {"role": "system", "content": "Отвечай как senior DevOps engineer"},
    {"role": "user", "content": "Как настроить health check в docker-compose?"}
  ],
  "stream": false
}'

Интеграция с Python

import requests
import json

def ask_ollama(prompt: str, model: str = "llama3.2") -> str:
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": model,
            "prompt": prompt,
            "stream": False,
            "options": {
                "temperature": 0.3,
                "num_ctx": 4096
            }
        }
    )
    return response.json()["response"]

# Использование
result = ask_ollama("Напиши Ansible task для установки nginx")
print(result)

Или через официальную библиотеку:

import ollama

response = ollama.chat(
    model="llama3.2",
    messages=[
        {"role": "user", "content": "Напиши systemd unit для Python-приложения"}
    ]
)
print(response["message"]["content"])

Бенчмарки на разном железе

Я протестировал генерацию токенов на нескольких конфигурациях с Llama 3 8B Q4_K_M:

КонфигурацияTokens/secОщущения
RTX 3060 12GB~45 t/sБыстро, комфортно для работы
Apple M1 16GB~25 t/sХорошо, нативная поддержка Metal
CPU-only (i7-12700)~6 t/sТерпимо для коротких запросов
RTX 4090 24GB~90 t/sМоментально, можно крутить 70B

Сравнение уровней квантизации LLM — размер модели, использование памяти и качество

На M1/M2 Mac Ollama работает через Metal — модель загружается в unified memory, и это на удивление эффективно. 8B-модель на M1 с 16 ГБ RAM — вполне рабочий вариант.

Для RTX 3060 с 12 ГБ VRAM потолок — модели до ~13B в Q4. Если модель не влезает полностью в видеопамять, часть уходит в RAM, и скорость падает в разы.

Работа с несколькими моделями

Ollama умеет держать несколько моделей загруженными одновременно (если хватает памяти). Это удобно, когда разные задачи требуют разных моделей:

# Кодовые задачи — модель, заточенная под код
ollama run deepseek-coder:6.7b

# Общие вопросы — универсальная модель
ollama run llama3.2

# Маленькая и быстрая — для простых задач
ollama run phi3:mini

Можно переключаться между моделями через API, указывая разный model в запросе. Ollama автоматически выгружает неиспользуемые модели, когда заканчивается память.

Практические советы

Начните с малого. Не пытайтесь сразу запустить 70B модель. Начните с 8B, поймите, достаточно ли качества для ваших задач. Часто — достаточно.

Настройте system prompt. Модель без system prompt — как сотрудник без ТЗ. Чем конкретнее вы опишете роль и формат ответа, тем лучше результат.

Контекстное окно имеет значение. Если передаёте модели длинный файл и получаете бессмыслицу — скорее всего, контекст обрезался. Увеличьте num_ctx.

Ollama + Open WebUI = полноценный ChatGPT. Поставьте Open WebUI, подключите к Ollama, и получите веб-интерфейс, неотличимый от ChatGPT. Но полностью локальный.

Итого

Ollama убрала главный барьер для использования локальных LLM — сложность настройки. Если у вас есть GPU с 8+ ГБ VRAM или Mac с Apple Silicon, вы можете получить вполне рабочего AI-ассистента, который работает полностью локально, бесплатно и без каких-либо ограничений на использование. Не замена GPT-4 или Claude для сложных задач, но для повседневной работы — генерации конфигов, объяснения кода, написания скриптов — более чем достаточно.

© 2026 Terminal Notes. Built with SvelteKit.