# Phi-4

Ejecute Phi-4 de Microsoft: un modelo de lenguaje pequeño pero potente.

{% hint style="success" %}
Todos los ejemplos se pueden ejecutar en servidores GPU alquilados a través de [CLORE.AI Marketplace](https://clore.ai/marketplace).
{% endhint %}

## Alquilar en CLORE.AI

1. Visita [CLORE.AI Marketplace](https://clore.ai/marketplace)
2. Filtrar por tipo de GPU, VRAM y precio
3. Elegir **Bajo demanda** (tarifa fija) o **Spot** (precio de puja)
4. Configura tu pedido:
   * Selecciona imagen Docker
   * Establece puertos (TCP para SSH, HTTP para interfaces web)
   * Agrega variables de entorno si es necesario
   * Introduce el comando de inicio
5. Selecciona pago: **CLORE**, **BTC**, o **USDT/USDC**
6. Crea el pedido y espera el despliegue

### Accede a tu servidor

* Encuentra los detalles de conexión en **Mis Pedidos**
* Interfaces web: Usa la URL del puerto HTTP
* SSH: `ssh -p <port> root@<proxy-address>`

## ¿Qué es Phi-4?

Phi-4 de Microsoft ofrece:

* 14B de parámetros con un rendimiento excelente
* Supera a modelos más grandes en benchmarks
* Fuerte razonamiento y matemáticas
* Inferencia eficiente

## Variantes de modelo

| Modelo         | Parámetros         | VRAM | Especialidad       |
| -------------- | ------------------ | ---- | ------------------ |
| Phi-4          | 14B                | 16GB | General            |
| Phi-3.5-mini   | 3.8B               | 4GB  | Ligero             |
| Phi-3.5-MoE    | 42B (6.6B activos) | 16GB | Mezcla de Expertos |
| Phi-3.5-vision | 4.2B               | 6GB  | Visión             |

## Despliegue rápido

**Imagen Docker:**

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

**Puertos:**

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

**Comando:**

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

## Accediendo a tu servicio

Después del despliegue, encuentra tu `http_pub` URL en **Mis Pedidos**:

1. Ir a **Mis Pedidos** página
2. Haz clic en tu pedido
3. Encuentra la `http_pub` URL (por ejemplo, `abc123.clorecloud.net`)

Usa `https://TU_HTTP_PUB_URL` en lugar de `localhost` en los ejemplos abajo.

## Usando Ollama

```bash

# Ejecutar Phi-4
ollama run phi4

# Phi-3.5 mini (más rápido)
ollama run phi3.5

# Phi-3.5 visión
ollama run phi3.5-vision
```

## Instalación

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

## Uso básico

```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

Para comprensión de imágenes:

```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)
```

## Matemáticas y razonamiento

```python
messages = [
    {"role": "user", "content": """
Resolver paso a paso:
Un granjero tiene gallinas y conejos.
Total de cabezas: 35
Total de patas: 94
¿Cuántos de cada animal?
"""}
]

# Phi-4 sobresale en el razonamiento paso a paso
```

## Generación de Código

```python
messages = [
    {"role": "user", "content": """
Escribe una implementación en Python de un árbol binario de búsqueda con:
- Insertar
- Buscar
- Eliminar
- Recorrido inorden
Incluye anotaciones de tipo y docstrings.
"""}
]
```

## Inferencia cuantizada

```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
)
```

## Interfaz 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)
```

## Rendimiento

| Modelo         | GPU      | Tokens/seg |
| -------------- | -------- | ---------- |
| 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 bits) | RTX 3090 | \~40       |

## Benchmarks

| Modelo        | 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 iguala o supera a modelos mucho más grandes*

## Solución de problemas

### "trust\_remote\_code" error

* Agregar `trust_remote_code=True` a `from_pretrained()`
* Esto es requerido para los modelos Phi

### Salidas repetitivas

* Temperatura más baja (0.3-0.6)
* Agregar repetition\_penalty=1.1
* Usar la plantilla de chat adecuada

### Problemas de memoria

* Phi-4 es eficiente pero aún necesita \~8GB para 14B
* Usa cuantización de 4 bits si es necesario
* Reducir la longitud del contexto

### Formato de salida incorrecto

* Usa `apply_chat_template()` para un formateo adecuado
* Verifica que estés usando la versión instruct, no la base

## Estimación de costos

Tarifas típicas del marketplace de CLORE.AI (a fecha de 2024):

| GPU       | Tarifa por hora | Tarifa diaria | Sesión de 4 horas |
| --------- | --------------- | ------------- | ----------------- |
| 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           |

*Los precios varían según el proveedor y la demanda. Consulta* [*CLORE.AI Marketplace*](https://clore.ai/marketplace) *para las tarifas actuales.*

**Ahorra dinero:**

* Usa **Spot** market para cargas de trabajo flexibles (a menudo 30-50% más barato)
* Paga con **CLORE** tokens
* Compara precios entre diferentes proveedores

## Casos de uso

* Tutoría de matemáticas
* Asistencia de código
* Análisis de documentos (visión)
* Despliegue eficiente en el edge
* Inferencia rentable

## Próximos pasos

* Qwen2.5 - Modelo alternativo
* Gemma 2 - El modelo de Google
* Llama 3.2 - El modelo de Meta
