# Phi-4

Запустите Phi-4 от Microsoft — небольшую, но мощную языковую модель.

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

## Аренда на CLORE.AI

1. Посетите [CLORE.AI Marketplace](https://clore.ai/marketplace)
2. Отфильтруйте по типу GPU, объему VRAM и цене
3. Выберите **On-Demand** (фиксированная ставка) или **Spot** (цена по ставке)
4. Настройте ваш заказ:
   * Выберите Docker-образ
   * Установите порты (TCP для SSH, HTTP для веб-интерфейсов)
   * Добавьте переменные окружения при необходимости
   * Введите команду запуска
5. Выберите способ оплаты: **CLORE**, **BTC**, или **USDT/USDC**
6. Создайте заказ и дождитесь развертывания

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

* Найдите данные для подключения в **Моих заказах**
* Веб-интерфейсы: используйте URL HTTP-порта
* SSH: `ssh -p <port> root@<proxy-address>`

## Что такое Phi-4?

Phi-4 от Microsoft предлагает:

* 14 млрд параметров с отличной производительностью
* Превосходит более крупные модели в бенчмарках
* Сильные навыки рассуждения и математики
* Эффективный вывод

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

| Модель         | Параметры                   | VRAM | Специализация        |
| -------------- | --------------------------- | ---- | -------------------- |
| Phi-4          | 14B                         | 16GB | Общее                |
| Phi-3.5-mini   | 3.8 млрд                    | 4 ГБ | Лёгкая (легковесная) |
| Phi-3.5-MoE    | 42 млрд (6.6 млрд активных) | 16GB | Смесь экспертов      |
| Phi-3.5-vision | 4.2 млрд                    | 6 ГБ | Зрение               |

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

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

```
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime
```

**Порты:**

```
22/tcp
8000/http
```

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

```bash
pip install transformers accelerate torch && \
python phi4_server.py
```

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

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

1. Перейдите на **Моих заказах** страницу
2. Нажмите на ваш заказ
3. Найдите `http_pub` URL (например, `abc123.clorecloud.net`)

Используйте `https://YOUR_HTTP_PUB_URL` вместо `localhost` в примерах ниже.

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

```bash

# Запустить Phi-4
ollama run phi4

# Phi-3.5 mini (быстрее)
ollama run phi3.5

# Phi-3.5 vision
ollama run phi3.5-vision
```

## Установка

```bash
pip install transformers accelerate torch
```

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

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

model_id = "microsoft/Phi-4"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    trust_remote_code=True
)

messages = [
    {"role": "system", "content": "You are a helpful AI assistant."},
    {"role": "user", "content": "Explain the difference between TCP and UDP."}
]

inputs = tokenizer.apply_chat_template(
    messages,
    return_tensors="pt",
    add_generation_prompt=True
).to("cuda")

outputs = model.generate(
    inputs,
    max_new_tokens=512,
    temperature=0.7,
    do_sample=True
)

response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True)
print(response)
```

## Phi-3.5-Vision

Для понимания изображений:

```python
from transformers import AutoModelForCausalLM, AutoProcessor
from PIL import Image
import torch

model_id = "microsoft/Phi-3.5-vision-instruct"

processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    trust_remote_code=True
)

image = Image.open("diagram.png")

messages = [
    {"role": "user", "content": "<|image_1|>\nDescribe this diagram in detail."}
]

prompt = processor.tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)

inputs = processor(prompt, [image], return_tensors="pt").to("cuda")

outputs = model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.7
)

response = processor.decode(outputs[0], skip_special_tokens=True)
print(response)
```

## Математика и рассуждения

```python
messages = [
    {"role": "user", "content": """
Решать пошагово:
У фермера есть куры и кролики.
Всего голов: 35
Всего ног: 94
Сколько каждого животного?
"""}
]

# Phi-4 превосходен в пошаговом рассуждении
```

## Генерация кода

```python
messages = [
    {"role": "user", "content": """
Напишите реализацию бинарного дерева поиска на Python с:
- Вставкой
- Поиском
- Удалением
- Обходом в порядке возрастания (in-order)
Включите аннотации типов и докстринги.
"""}
]
```

## Квантованный (квантованная) инференс

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

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16
)

model = AutoModelForCausalLM.from_pretrained(
    "microsoft/Phi-4",
    quantization_config=quantization_config,
    device_map="auto",
    trust_remote_code=True
)
```

## Интерфейс Gradio

```python
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "microsoft/Phi-4"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True
)

def chat(message, history, system_prompt, temperature):
    messages = [{"role": "system", "content": system_prompt}]
    for h in history:
        messages.append({"role": "user", "content": h[0]})
        messages.append({"role": "assistant", "content": h[1]})
    messages.append({"role": "user", "content": message})

    inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
    outputs = model.generate(inputs, max_new_tokens=512, temperature=temperature, do_sample=True)

    return tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True)

demo = gr.ChatInterface(
    fn=chat,
    additional_inputs=[
        gr.Textbox(value="You are a helpful assistant.", label="System"),
        gr.Slider(0.1, 1.5, value=0.7, label="Temperature")
    ],
    title="Phi-4 Chat"
)

demo.launch(server_name="0.0.0.0", server_port=7860)
```

## Производительность

| Модель        | GPU      | Токенов/с |
| ------------- | -------- | --------- |
| Phi-3.5-mini  | RTX 3060 | \~100     |
| Phi-3.5-mini  | RTX 4090 | \~150     |
| Phi-4         | RTX 4090 | \~60      |
| Phi-4         | A100     | \~90      |
| Phi-4 (4-бит) | RTX 3090 | \~40      |

## Бенчмарки

| Модель        | MMLU  | HumanEval | GSM8K |
| ------------- | ----- | --------- | ----- |
| Phi-4         | 84.8% | 82.6%     | 94.6% |
| GPT-4-Turbo   | 86.4% | 85.4%     | 94.2% |
| Llama-3.1-70B | 83.6% | 80.5%     | 92.1% |

*Phi-4 сопоставим или превосходит гораздо большие модели*

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

### Ошибка "trust\_remote\_code"

* Добавьте `trust_remote_code=True` до `from_pretrained()`
* Это требуется для моделей Phi

### Повторяющиеся ответы

* Понизьте температуру (0.3–0.6)
* Добавьте repetition\_penalty=1.1
* Используйте правильный шаблон чата

### Проблемы с памятью

* Phi-4 эффективен, но всё ещё требует \~8 ГБ для 14B
* Используйте 4-битную квантизацию при необходимости
* Уменьшите длину контекста

### Неправильный формат вывода

* Используйте `apply_chat_template()` для правильного форматирования
* Проверьте, что вы используете версию instruct, а не базовую

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

Типичные ставки на маркетплейсе CLORE.AI (по состоянию на 2024):

| GPU       | Почасовая ставка | Дневная ставка | Сессия 4 часа |
| --------- | ---------------- | -------------- | ------------- |
| RTX 3060  | \~$0.03          | \~$0.70        | \~$0.12       |
| RTX 3090  | \~$0.06          | \~$1.50        | \~$0.25       |
| RTX 4090  | \~$0.10          | \~$2.30        | \~$0.40       |
| A100 40GB | \~$0.17          | \~$4.00        | \~$0.70       |
| A100 80GB | \~$0.25          | \~$6.00        | \~$1.00       |

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

**Экономьте деньги:**

* Используйте **Spot** рынок для гибких рабочих нагрузок (часто на 30–50% дешевле)
* Платите с помощью **CLORE** токенов
* Сравнивайте цены у разных провайдеров

## Сценарии использования

* Репетитор по математике
* Помощь в кодировании
* Анализ документов (зрение)
* Эффективное развёртывание на краю
* Экономичный инференс

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

* Qwen2.5 — альтернативная модель
* Gemma 2 — модель от Google
* Llama 3.2 — модель от Meta
