# Mistral Small 3.1

Mistral Small 3.1, выпущенная в марте 2025 года компанией Mistral AI, это **плотная модель с 24 миллиардами параметров** которая дает намного больше, чем можно ожидать от её размера. С контекстным окном 128K, встроенными возможностями зрения, лучшим в классе вызовом функций и **Лицензия Apache 2.0**, это, пожалуй, лучшая модель, которую можно запустить на одной RTX 4090. Она превосходит GPT-4o Mini и Claude 3.5 Haiku в большинстве бенчмарков и при этом удобно умещается на потребительском оборудовании при квантизации.

## Ключевые особенности

* **24B плотных параметров** — без сложности MoE, простое развертывание
* **Окно контекста 128K** — RULER 128K результат 81.2%, обгоняет GPT-4o Mini (65.8%)
* **Встроенное зрение** — анализ изображений, диаграмм, документов и скриншотов
* **Лицензия Apache 2.0** — полностью открыта для коммерческого и личного использования
* **Элитный вызов функций** — нативное использование инструментов с выводом в JSON, идеально для агентных рабочих процессов
* **Мультиязычность** — более 25 языков, включая CJK, арабский, хинди и европейские языки

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

| Компонент | Квантизировано (Q4) | Полная точность (BF16)  |
| --------- | ------------------- | ----------------------- |
| GPU       | 1× RTX 4090 24GB    | 2× RTX 4090 или 1× H100 |
| VRAM      | \~16GB              | \~55GB                  |
| ОЗУ       | 32GB                | 64GB                    |
| Диск      | 20GB                | 50GB                    |
| CUDA      | 11.8+               | 12.0+                   |

**Рекомендация Clore.ai**: RTX 4090 (\~$0.5–2/день) для квантизированного вывода — лучшее соотношение цены и производительности

## Быстрый старт с Ollama

Самый быстрый способ запустить Mistral Small 3.1:

```bash
# Установите Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Запустить Mistral Small 3.1 (автозагрузка ~14GB Q4 квантизации)
ollama run mistral-small3.1

# Или указать конкретную квантизацию
ollama run mistral-small3.1:24b-instruct-2503-q4_K_M
```

### Ollama как API, совместимый с OpenAI

```bash
# Запустить сервер Ollama
ollama serve &

# Загрузить модель
ollama pull mistral-small3.1

# Запрос через API
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mistral-small3.1",
    "messages": [
      {"role": "system", "content": "Вы — полезный помощник по программированию."},
      {"role": "user", "content": "Напишите декоратор Python для ограничения частоты запросов"}
    ],
    "temperature": 0.15
  }'
```

### Ollama с поддержкой зрения

```bash
# Отправьте изображение для анализа
curl http://localhost:11434/api/chat -d '{
  "model": "mistral-small3.1",
  "messages": [{
    "role": "user",
    "content": "Что показывает это изображение?",
    "images": ["/path/to/image.jpg"]
  }]
}'
```

## Настройка vLLM (Production)

Для рабочих нагрузок в продакшене с высокой пропускной способностью и параллельными запросами:

```bash
# Установите vLLM (требуется v0.8.1+)
pip install -U vllm

# Убедитесь, что mistral_common установлен (должно устанавливаться автоматически)
python -c "import mistral_common; print(mistral_common.__version__)"
```

### Сервис на одной GPU (только текст)

```bash
vllm serve mistralai/Mistral-Small-3.1-24B-Instruct-2503 \
  --tokenizer-mode mistral \
  --config-format mistral \
  --load-format mistral \
  --tool-call-parser mistral \
  --enable-auto-tool-choice \
  --max-model-len 32768 \
  --gpu-memory-utilization 0.90
```

### Сервер с поддержкой зрения (рекомендуются 2 GPU)

```bash
vllm serve mistralai/Mistral-Small-3.1-24B-Instruct-2503 \
  --tokenizer-mode mistral \
  --config-format mistral \
  --load-format mistral \
  --tool-call-parser mistral \
  --enable-auto-tool-choice \
  --limit-mm-per-prompt 'image=10' \
  --tensor-parallel-size 2 \
  --max-model-len 65536
```

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

```python
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")

response = client.chat.completions.create(
    model="mistralai/Mistral-Small-3.1-24B-Instruct-2503",
    messages=[
        {"role": "system", "content": "Вы — полезный помощник. Сегодня 2026-02-20."},
        {"role": "user", "content": "Напишите полный REST API на FastAPI с операциями CRUD для блога"}
    ],
    temperature=0.15,
    max_tokens=4096
)
print(response.choices[0].message.content)
```

## HuggingFace Transformers

Для прямой интеграции с Python и экспериментов:

```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "mistralai/Mistral-Small-3.1-24B-Instruct-2503"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    load_in_4bit=True  # 4-битная квантизация — помещается на GPU с 24GB
)

messages = [
    {"role": "system", "content": "Вы — полезный помощник по программированию."},
    {"role": "user", "content": "Реализуйте двоичное дерево поиска на Python с методами вставки, удаления и поиска"}
]

input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)

output = model.generate(
    input_ids,
    max_new_tokens=2048,
    temperature=0.15,
    do_sample=True
)
print(tokenizer.decode(output[0][input_ids.shape[-1]:], skip_special_tokens=True))
```

## Пример вызова функций

Mistral Small 3.1 — одна из лучших небольших моделей для использования инструментов:

```python
import json
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_stock_price",
            "description": "Получить текущую цену акции по заданному тикеру",
            "parameters": {
                "type": "object",
                "required": ["ticker"],
                "properties": {
                    "ticker": {"type": "string", "description": "Тикер акции (например, AAPL)"}
                }
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "calculate_portfolio_value",
            "description": "Вычислить общую стоимость портфеля по заданным позициям",
            "parameters": {
                "type": "object",
                "required": ["holdings"],
                "properties": {
                    "holdings": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "ticker": {"type": "string"},
                                "shares": {"type": "number"}
                            }
                        }
                    }
                }
            }
        }
    }
]

response = client.chat.completions.create(
    model="mistralai/Mistral-Small-3.1-24B-Instruct-2503",
    messages=[{"role": "user", "content": "Какая сейчас цена AAPL и MSFT?"}],
    tools=tools,
    tool_choice="auto",
    temperature=0.15
)

for tool_call in response.choices[0].message.tool_calls:
    print(f"Call: {tool_call.function.name}({tool_call.function.arguments})")
```

## Быстрый старт с Docker

```bash
# Развертывание на одной GPU
docker run --gpus all -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  vllm/vllm-openai:latest \
  --model mistralai/Mistral-Small-3.1-24B-Instruct-2503 \
  --tokenizer-mode mistral \
  --config-format mistral \
  --load-format mistral \
  --tool-call-parser mistral \
  --enable-auto-tool-choice \
  --max-model-len 32768

# С поддержкой зрения (2 GPU)
docker run --gpus all -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  vllm/vllm-openai:latest \
  --model mistralai/Mistral-Small-3.1-24B-Instruct-2503 \
  --tokenizer-mode mistral \
  --config-format mistral \
  --load-format mistral \
  --tool-call-parser mistral \
  --enable-auto-tool-choice \
  --limit-mm-per-prompt 'image=10' \
  --tensor-parallel-size 2
```

## Советы для пользователей Clore.ai

* **RTX 4090 — оптимальный выбор**: При цене $0.5–2/день одна RTX 4090 запускает Mistral Small 3.1 в квантизированном виде с запасом. Лучшее соотношение цена/производительность на Clore.ai для универсальной LLM.
* **Используйте низкую температуру**: Mistral AI рекомендует `temperature=0.15` для большинства задач. Более высокие значения температуры приводят к непоследовательному выводу с этой моделью.
* **RTX 3090 тоже подходит**: При цене $0.3–1/день RTX 3090 (24GB) нормально запускает Q4 квантизированную модель с Ollama. Немного медленнее, чем 4090, но вдвое дешевле.
* **Ollama для быстрых настроек, vLLM для продакшена**: Ollama дает работающую модель за 60 секунд. Для параллельных API-запросов и большей пропускной способности переключайтесь на vLLM.
* **Вызов функций делает её особенной**: Многие 24B модели умеют разговаривать — немногие надежно вызывают инструменты. Вызов функций у Mistral Small 3.1 сопоставим с GPT-4o Mini. Создавайте агентов, бэкенды API и конвейеры автоматизации с уверенностью.

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

| Проблема                         | Решение                                                                                                              |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `OutOfMemoryError` на RTX 4090   | Используйте квантизированную модель через Ollama или `load_in_4bit=True` в Transformers. Полный BF16 требует \~55GB. |
| Модель Ollama не найдена         | Используйте `ollama run mistral-small3.1` (официальное название библиотеки).                                         |
| Ошибки токенизатора vLLM         | Всегда передавайте `--tokenizer-mode mistral --config-format mistral --load-format mistral`.                         |
| Плохое качество вывода           | Установите `temperature=0.15`. Добавьте системный промпт. Mistral Small чувствительна к температуре.                 |
| Зрение не работает на 1 GPU      | Функции зрения требуют больше VRAM. Используйте `--tensor-parallel-size 2` или уменьшите `--max-model-len`.          |
| Вызовы функций возвращают пустое | Добавьте `--tool-call-parser mistral --enable-auto-tool-choice` для vLLM serve.                                      |

## Дополнительное чтение

* [Mistral Small 3.1 на HuggingFace](https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Instruct-2503)
* [Блог-пост Mistral AI](https://mistral.ai/news/mistral-small-3-1/)
* [Страница модели Ollama](https://ollama.com/library/mistral-small3.1)
* [Документация vLLM](https://docs.vllm.ai/)
* [Библиотека Mistral Common](https://github.com/mistralai/mistral-common)
* [Платформа Mistral AI](https://console.mistral.ai/)
