# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/phi4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
