# Ollama

Самый простой способ запускать LLM локально на GPU CLORE.AI.

{% hint style="info" %}
**Текущая версия: v0.6+** — Это руководство охватывает Ollama v0.6 и выше. Ключевые новые функции включают структурированные выводы (принудительное соблюдение JSON-схемы), совместимую с OpenAI конечную точку для эмбеддингов (`/api/embed`), и параллельную загрузку моделей (запуск нескольких моделей одновременно без подмены). См. [Новое в v0.6+](#new-in-v06) для подробностей.
{% endhint %}

{% hint style="success" %}
Все примеры можно запускать на GPU-серверах, арендуемых через [CLORE.AI Marketplace](https://clore.ai/marketplace).
{% endhint %}

## Требования к серверу

| Параметр      | Минимум     | Рекомендуется |
| ------------- | ----------- | ------------- |
| ОЗУ           | 8GB         | 16 ГБ+        |
| VRAM          | 6 ГБ        | 8 ГБ+         |
| Сеть          | 100 Мбит/с  | 500 Мбит/с+   |
| Время запуска | \~30 секунд | -             |

{% hint style="info" %}
Ollama легковесна и работает на большинстве GPU-серверов. Для больших моделей (13B+) выбирайте серверы с 16 ГБ+ ОЗУ и 12 ГБ+ VRAM.
{% endhint %}

## Почему Ollama?

* **Настройка в одну команду** - Без Python, без зависимостей
* **Библиотека моделей** - Загружайте модели с помощью `ollama pull`
* **Совместимый с API OpenAI** - Прямая замена
* **Ускорение на GPU** - Автоматическое обнаружение CUDA
* **Много моделей** - Запуск нескольких моделей одновременно (v0.6+)

## Быстрое развертывание на CLORE.AI

**Docker-образ:**

```
ollama/ollama
```

**Порты:**

```
22/tcp
11434/http
```

**Команда:**

```bash
ollama serve
```

### Проверьте, что всё работает

После развертывания найдите ваш `http_pub` URL в **Моих заказах** и протестируйте:

```bash
# Замените на ваш реальный http_pub URL
curl https://your-http-pub.clorecloud.net/

# Ожидаемый ответ: "Ollama is running"
```

{% hint style="warning" %}
Если вы получаете HTTP 502, подождите 30–60 секунд — сервис всё ещё запускается.
{% endhint %}

## Доступ к вашему сервису

При развертывании на CLORE.AI доступ к вашему экземпляру Ollama осуществляется через `http_pub` URL:

```bash
# Найдите ваш http_pub в разделе My Orders, затем:
curl https://your-http-pub.clorecloud.net/api/tags

# Для API вызовов используйте ваш http_pub URL:
curl https://your-http-pub.clorecloud.net/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello!"}],
  "stream": false
}'
```

{% hint style="info" %}
Все `localhost:11434` примеры ниже работают при подключении через SSH. Для внешнего доступа замените на ваш `https://your-http-pub.clorecloud.net/` URL.
{% endhint %}

## Установка

### Использование Docker (рекомендуется)

```bash
docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```

### Ручная установка

```bash
curl -fsSL https://ollama.com/install.sh | sh
```

Эта единая команда устанавливает последнюю версию Ollama, настраивает systemd-сервис и автоматически настраивает обнаружение GPU. Работает на Ubuntu, Debian, Fedora и большинстве современных дистрибутивов Linux.

## Запуск моделей

### Скачать и запустить

```bash
# Загрузить модель
ollama pull llama3.2

# Запустить интерактивный чат
ollama run llama3.2

# Запустить с подсказкой
ollama run llama3.2 "Explain quantum computing"
```

### Популярные модели

| Модель              | Размер  | Случай использования         |
| ------------------- | ------- | ---------------------------- |
| `llama3.2`          | 3B      | Быстрая, общего назначения   |
| `llama3.1`          | 8B      | Лучшее качество              |
| `llama3.1:70b`      | 70B     | Лучшее качество              |
| `mistral`           | 7B      | Быстро, хорошее качество     |
| `mixtral`           | 47B     | MoE, высокое качество        |
| `codellama`         | 7-34B   | Генерация кода               |
| `deepseek-coder-v2` | 16B     | Лучше всего для кода         |
| `deepseek-r1`       | 7B-671B | Модель для рассуждений       |
| `deepseek-r1:32b`   | 32B     | Сбалансированные рассуждения |
| `qwen2.5`           | 7B      | Мультиязычность              |
| `qwen2.5:72b`       | 72B     | Лучшее качество Qwen         |
| `phi4`              | 14B     | Последняя от Microsoft       |
| `gemma2`            | 9B      | Модель Google                |

### Варианты моделей

```bash
# Варианты квантизации
ollama pull llama3.1:8b-instruct-q4_K_M   # 4-бит (меньше, быстрее)
ollama pull llama3.1:8b-instruct-q8_0     # 8-бит (лучшее качество)
ollama pull llama3.1:8b-instruct-fp16     # Полная точность

# Варианты по размеру
ollama pull llama3.1:8b    # 8 миллиардов параметров
ollama pull llama3.1:70b   # 70 миллиардов параметров

# Новые модели (эпоха v0.6+)
ollama pull deepseek-r1:7b      # Рассуждения, бюджетный
ollama pull deepseek-r1:14b     # Рассуждения, эффективный
ollama pull deepseek-r1:32b     # Рассуждения, сбалансированный
ollama pull deepseek-r1:70b     # Рассуждения, высокое качество
ollama pull qwen2.5:72b         # Самый большой Qwen, высшее качество
ollama pull phi4                # Microsoft Phi-4 14B
```

## Новое в v0.6+

Ollama v0.6 представила несколько основных функций для производственных нагрузок:

### Структурированные выводы (JSON Schema)

Принудительное соответствие ответов модели определённой JSON-схеме. Полезно при создании приложений, которым нужен надёжный, парсируемый вывод:

```bash
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Tell me about Canada."}],
  "format": {
    "type": "object",
    "properties": {
      "name": {"type": "string"},
      "capital": {"type": "string"},
      "population": {"type": "integer"},
      "languages": {
        "type": "array",
        "items": {"type": "string"}
      }
    },
    "required": ["name", "capital", "population", "languages"]
  },
  "stream": false
}'
```

Пример на Python со структурированными выводами:

```python
from openai import OpenAI
import json

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

response = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "List 3 programming languages with their main use cases"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "languages",
            "schema": {
                "type": "object",
                "properties": {
                    "languages": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {"type": "string"},
                                "use_case": {"type": "string"},
                                "popularity_rank": {"type": "integer"}
                            }
                        }
                    }
                }
            }
        }
    }
)

data = json.loads(response.choices[0].message.content)
print(data)
```

### Совместимая с OpenAI конечная точка для эмбеддингов (`/api/embed`)

Новое в v0.6+: `/api/embed` конечная точка полностью совместима с OpenAI и поддерживает пакетные входы:

```bash
# Эмбеддинг одного текста
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": "Hello world"
}'

# Пакетные эмбеддинги (новое в v0.6)
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": ["First document", "Second document", "Third document"]
}'
```

Клиент OpenAI работает напрямую с `/v1/embeddings`:

```python
from openai import OpenAI
import numpy as np

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

# Сначала загрузите модель эмбеддингов: ollama pull nomic-embed-text
response = client.embeddings.create(
    model="nomic-embed-text",
    input=["Hello world", "Goodbye world"]
)

emb1 = np.array(response.data[0].embedding)
emb2 = np.array(response.data[1].embedding)

# Косинусное сходство
similarity = np.dot(emb1, emb2) / (np.linalg.norm(emb1) * np.linalg.norm(emb2))
print(f"Similarity: {similarity:.4f}")
```

Популярные модели эмбеддингов:

```bash
ollama pull nomic-embed-text      # 137M, быстро, хорошее качество
ollama pull mxbai-embed-large     # 335M, более высокое качество
ollama pull all-minilm            # 23M, самое быстрое
```

### Параллельная загрузка моделей

До v0.6 Ollama выгружала одну модель, чтобы загрузить другую. V0.6+ поддерживает запуск нескольких моделей одновременно, ограниченный только доступным VRAM:

```bash
# Загрузить две модели одновременно
ollama run llama3.2 &
ollama run deepseek-r1:7b &

# Проверить, что запущено
curl http://localhost:11434/api/ps
```

Настройка параллелизма:

```bash
# Разрешить загрузку до 4 моделей одновременно
OLLAMA_MAX_LOADED_MODELS=4 ollama serve

# Каждый раннер в отдельном процессе (лучше изоляция)
OLLAMA_NUM_PARALLEL=2 ollama serve
```

Это особенно полезно для:

* A/B тестирования разных моделей
* Специализированных моделей для разных задач (кодирование + чат)
* Поддержания часто используемых моделей в VRAM

## Использование API

### Chat Completion

```bash
# Через http_pub (внешний доступ):
curl https://your-http-pub.clorecloud.net/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello!"}],
  "stream": false
}'

# Через SSH-туннель (localhost):
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [{"role": "user", "content": "Hello!"}],
  "stream": false
}'
```

{% hint style="info" %}
Добавьте `"stream": false` чтобы получить полный ответ сразу вместо потоковой передачи.
{% endhint %}

### Совместимая с OpenAI конечная точка

```python
from openai import OpenAI

# Для внешнего доступа используйте ваш http_pub URL:
client = OpenAI(
    base_url="https://your-http-pub.clorecloud.net/v1",
    api_key="ollama"  # любая строка подходит
)

# Или через SSH-туннель:
# client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

response = client.chat.completions.create(
    model="llama3.2",
    messages=[
        {"role": "user", "content": "What is machine learning?"}
    ]
)

print(response.choices[0].message.content)
```

### Потоковая передача (Streaming)

```python
stream = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "Write a poem"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
```

### Эмбеддинги

```bash
# Устаревшая конечная точка (всё ещё работает)
curl http://localhost:11434/api/embeddings -d '{
  "model": "nomic-embed-text",
  "prompt": "Hello world"
}'

# Новая конечная точка v0.6+ (поддержка пакетов, совместима с OpenAI)
curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": ["Hello world", "Another text"]
}'
```

### Генерация текста (не-чат)

```bash
curl https://your-http-pub.clorecloud.net/api/generate -d '{
  "model": "llama3.2",
  "prompt": "The meaning of life is",
  "stream": false
}'
```

## Полная справочная документация API

Все конечные точки работают как с `http://localhost:11434` (через SSH), так и с `https://your-http-pub.clorecloud.net` (внешний).

### Управление моделями

| Эндпоинт       | Метод  | Описание                          |
| -------------- | ------ | --------------------------------- |
| `/api/tags`    | GET    | Список всех загруженных моделей   |
| `/api/show`    | POST   | Получить подробности модели       |
| `/api/pull`    | POST   | Скачать модель                    |
| `/api/delete`  | DELETE | Удалить модель                    |
| `/api/ps`      | GET    | Список текущих запущенных моделей |
| `/api/version` | GET    | Получить версию Ollama            |

#### Список моделей

```bash
curl https://your-http-pub.clorecloud.net/api/tags
```

Ответ:

```json
{
  "models": [
    {"name": "llama3.2:latest", "size": 2019393189, "digest": "...", "modified_at": "..."}
  ]
}
```

#### Показать детали модели

```bash
curl https://your-http-pub.clorecloud.net/api/show -d '{"name": "llama3.2"}'
```

#### Загрузить модель через API

```bash
curl https://your-http-pub.clorecloud.net/api/pull -d '{
  "name": "mistral:7b",
  "stream": false
}'
```

Ответ:

```json
{"status": "success"}
```

{% hint style="warning" %}
Загрузка больших моделей может занять несколько минут. Для очень больших моделей (30 ГБ+) рассмотрите использование SSH и CLI: `ollama pull model-name`
{% endhint %}

#### Удалить модель

```bash
curl -X DELETE https://your-http-pub.clorecloud.net/api/delete -d '{"name": "mistral:7b"}'
```

#### Список запущенных моделей

```bash
curl https://your-http-pub.clorecloud.net/api/ps
```

Ответ:

```json
{
  "models": [
    {"name": "llama3.2:latest", "size": 2019393189, "expires_at": "2025-01-25T12:00:00Z"}
  ]
}
```

#### Получить версию

```bash
curl https://your-http-pub.clorecloud.net/api/version
```

Ответ:

```json
{"version": "0.6.8"}
```

### Конечные точки инференса

| Эндпоинт               | Метод | Описание                                                    |
| ---------------------- | ----- | ----------------------------------------------------------- |
| `/api/generate`        | POST  | Завершение текста                                           |
| `/api/chat`            | POST  | Чат-завершение                                              |
| `/api/embeddings`      | POST  | Генерация эмбеддингов (устаревшее)                          |
| `/api/embed`           | POST  | Генерация эмбеддингов v0.6+ (пакетная, совместима с OpenAI) |
| `/v1/chat/completions` | POST  | Чат, совместимый с OpenAI                                   |
| `/v1/embeddings`       | POST  | Эмбеддинги, совместимые с OpenAI                            |

### Создание пользовательских моделей

Создавайте пользовательские модели с конкретными системными подсказками через API:

```bash
curl https://your-http-pub.clorecloud.net/api/create -d '{
  "name": "my-assistant",
  "modelfile": "FROM llama3.2\nSYSTEM You are a helpful coding assistant."
}'
```

## Конфигурация GPU

### Проверить использование GPU

```bash
# В контейнере или на сервере
nvidia-smi

# Ollama показывает GPU в логах
ollama run llama3.2 --verbose
```

### Мульти-GPU

Ollama автоматически использует доступные GPU. Для указания конкретного GPU:

```bash
CUDA_VISIBLE_DEVICES=0 ollama serve
```

### Управление памятью

```bash
# Установить лимит памяти GPU
OLLAMA_GPU_MEMORY=8GiB ollama serve

# Держать модель загруженной
OLLAMA_KEEP_ALIVE=24h ollama serve

# Разрешить параллельные модели (v0.6+)
OLLAMA_MAX_LOADED_MODELS=3 ollama serve
```

## Пользовательские модели (Modelfile)

Создавайте пользовательские модели с системными подсказками:

```dockerfile
# Modelfile
FROM llama3.2

SYSTEM You are a helpful coding assistant. Always provide code examples.

PARAMETER temperature 0.7
PARAMETER top_p 0.9
```

```bash
ollama create coding-assistant -f Modelfile
ollama run coding-assistant
```

## Запуск как сервис

### Systemd

```ini
# /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ollama serve
Restart=always
Environment="OLLAMA_HOST=0.0.0.0"

[Install]
WantedBy=multi-user.target
```

```bash
systemctl enable ollama
systemctl start ollama
```

## Советы по производительности

1. **Используйте подходящую квантизацию**
   * Q4\_K\_M для скорости
   * Q8\_0 для качества
   * fp16 для максимального качества
2. **Подбирайте модель под VRAM**
   * 8GB: модели 7B (Q4)
   * 16GB: модели 13B или 7B (Q8)
   * 24GB: модели 34B (Q4)
   * 48GB+: модели 70B
3. **Держать модель загруженной**

   ```bash
   OLLAMA_KEEP_ALIVE=1h ollama serve
   ```
4. **Быстрый SSD улучшает производительность**
   * Загрузка моделей и KV-кэш выигрывают от быстрого хранилища
   * Серверы с NVMe SSD могут обеспечить в 2-3 раза лучшую производительность

## Бенчмарки

### Скорость генерации (токен/с)

| Модель               | RTX 3060 | RTX 3090 | RTX 4090 | A100 40GB |
| -------------------- | -------- | -------- | -------- | --------- |
| Llama 3.2 3B (Q4)    | 120      | 160      | 200      | 220       |
| Llama 3.1 8B (Q4)    | 60       | 100      | 130      | 150       |
| Llama 3.1 8B (Q8)    | 45       | 80       | 110      | 130       |
| Mistral 7B (Q4)      | 70       | 110      | 140      | 160       |
| Mixtral 8x7B (Q4)    | -        | 35       | 55       | 75        |
| Llama 3.1 70B (Q4)   | -        | -        | 18       | 35        |
| DeepSeek-R1 7B (Q4)  | 65       | 105      | 135      | 155       |
| DeepSeek-R1 32B (Q4) | -        | -        | 22       | 42        |
| Qwen2.5 72B (Q4)     | -        | -        | 15       | 30        |
| Phi-4 14B (Q4)       | -        | 50       | 75       | 90        |

*Бенчмарки обновлены в январе 2026. Фактическая скорость может варьироваться в зависимости от конфигурации сервера.*

### Время до первого токена (мс)

| Модель | RTX 3090 | RTX 4090 | A100 |
| ------ | -------- | -------- | ---- |
| 3B     | 50       | 35       | 25   |
| 7-8B   | 120      | 80       | 60   |
| 13B    | 250      | 150      | 100  |
| 34B    | 600      | 350      | 200  |
| 70B    | -        | 1200     | 500  |

### Длина контекста vs VRAM (Q4)

| Модель | 2K контекст | 4K контекст | 8K контекст | 16K контекст |
| ------ | ----------- | ----------- | ----------- | ------------ |
| 7B     | 5 ГБ        | 6 ГБ        | 8GB         | 12GB         |
| 13B    | 8GB         | 10GB        | 14GB        | 22GB         |
| 34B    | 20GB        | 24 ГБ       | 32GB        | 48GB         |
| 70B    | 40GB        | 48GB        | 64GB        | 96GB         |

## Требования к GPU

| Модель | Q4 VRAM | Q8 VRAM |
| ------ | ------- | ------- |
| 3B     | 3GB     | 5 ГБ    |
| 7-8B   | 5 ГБ    | 9 ГБ    |
| 13B    | 8GB     | 15GB    |
| 34B    | 20GB    | 38GB    |
| 70B    | 40GB    | 75GB    |

## Оценка стоимости

Типичные расценки на маркетплейсе CLORE.AI:

| GPU      | VRAM  | Цена/день  | Подходит для       |
| -------- | ----- | ---------- | ------------------ |
| RTX 3060 | 12GB  | $0.15–0.30 | Модели 7B          |
| RTX 3090 | 24 ГБ | $0.30–1.00 | Модели 13B-34B     |
| RTX 4090 | 24 ГБ | $0.50–2.00 | Модели 34B, быстро |
| A100     | 40GB  | $1.50–3.00 | Модели 70B         |

*Цены в USD/день. Тарифы зависят от провайдера — проверьте* [*CLORE.AI Marketplace*](https://clore.ai/marketplace) *для текущих тарифов.*

## Устранение неполадок

### Модель не загружается

```bash
# Проверить доступную память
nvidia-smi

# Попробуйте меньшую квантизацию
ollama pull llama3.1:8b-q4_0
```

### Медленная генерация

```bash
# Проверить, используется ли GPU
ollama run llama3.2 --verbose

# Убедиться, что CUDA доступна
nvidia-smi
```

### Соединение отклонено

```bash
# Убедитесь, что сервер запущен
ollama serve

# Проверьте привязку к всем интерфейсам
OLLAMA_HOST=0.0.0.0 ollama serve
```

### HTTP 502 на http\_pub URL

Это означает, что сервис всё ещё запускается. Подождите 30–60 секунд и повторите попытку:

```bash
# Проверить, готова ли служба
curl https://your-http-pub.clorecloud.net/

# Ожидаемый: "Ollama is running"
# Если 502: подождите и повторите
```

## Дальнейшие шаги

* [Открыть WebUI](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/open-webui) - Красивый интерфейс чата для Ollama
* [vLLM](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/vllm) - Высокопроизводительное продакшн-обслуживание
* [DeepSeek-R1](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/deepseek-r1) - Модель для рассуждений
* [DeepSeek-V3](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/deepseek-v3) - Лучшая общая модель
* [Qwen2.5](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/qwen25) - Многоязычная альтернатива
* [Text Generation WebUI](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/text-generation-webui) - Расширенные функции
