Guía de Práctica · 11 min de lectura

# Servir Llama 3.3 70B en un nodo.

De una máquina entregada hace cinco minutos a un endpoint compatible con OpenAI que responde solicitudes — con los dos flags que reducen a la mitad su rendimiento sin que se note, y el que le deja comprometido.

La respuesta corta

- **Memoria necesaria:** 43 GB en 4 bits, 82 GB en FP8, 164 GB en BF16 — todo con contexto de 8k
- **Máquina más sencilla:** Una tarjeta de 80 GB. Sin sharding, sin interconexión, sin sincronización
- **Tiempo hasta el primer token:** Menos de quince minutos desde la entrega, la mayor parte descargando los pesos
- **El único error:** Publicar el puerto 8000 en una dirección pública. No tiene autenticación

## Lo que necesita

70 000 millones de parámetros. En 4 bits son 35 GB de pesos; la caché KV añade 2.5 GB con un contexto de 8k para una sola solicitud, y la sobrecarga de tiempo de ejecución, un 15 % aproximadamente. Todo lo demás se deduce de estas tres cifras — la [guía de dimensionamiento](https://gpuserver.io/es/guides/vram-sizing) muestra de dónde salen.

**Memoria necesaria para Llama 3.3 70B, por precisión y contexto**

| Precisión | Pesos | Total a 8k | Total a 32k | Total a 128k |
|---|---|---|---|---|
| BF16 / FP16 Calidad de referencia | 140 GB | 164 GB | 173 GB | 207 GB |
| FP8 Casi de referencia, Hopper y Blackwell | 70 GB | 82 GB | 86 GB | 103 GB |
| 4-bit (AWQ, GPTQ) Pesos más pequeños, la caché se mantiene en FP16 | 35 GB | 43 GB | 52 GB | 86 GB |

Fíjese en la fila de 4 bits a 128k: los pesos se reducen a 35 GB, pero la caché no se reduce en absoluto, porque AWQ y GPTQ solo cuantizan los pesos. Ese único hecho decide la mayor parte de la elección de máquina que sigue.

## Elegir el nodo

Las máquinas más baratas de nuestro catálogo que alojan este modelo en *una sola* tarjeta, que es la configuración que conviene tener si es posible — sin sharding significa sin sincronización, y una cosa menos que depurar.

**Nodos que alojan Llama 3.3 70B en una tarjeta**

| Nodo | Precisión que cabe | Memoria de la tarjeta | tok/s estimados | Al mes |
|---|---|---|---|---|
| [NVIDIA RTX A6000](https://gpuserver.io/es/gpu/rtx-a6000) PCIe 5.0 · 768 GB/s | 4-bit (AWQ, GPTQ) | 48 GB | ~10 | $286/mes |
| [2 × NVIDIA RTX A6000](https://gpuserver.io/es/gpu/rtx-a6000) PCIe 5.0 ×16 · 768 GB/s | 4-bit (AWQ, GPTQ) | 48 GB | ~10 | $597/mes |
| [NVIDIA L40S](https://gpuserver.io/es/gpu/l40s) PCIe 5.0 · 864 GB/s | 4-bit (AWQ, GPTQ) | 48 GB | ~11 | $714/mes |
| [NVIDIA A100 PCIe](https://gpuserver.io/es/gpu/a100-80gb) PCIe 5.0 · 1,935 GB/s | 4-bit (AWQ, GPTQ) | 80 GB | ~25 | $1,091/mes |

El rendimiento es generación de flujo único, limitado por el ancho de banda de memoria, y deliberadamente conservador. Con el procesamiento continuo por lotes, el *total agregado* entre solicitudes concurrentes es varias veces mayor — ese es precisamente el objetivo de vLLM.

## Diez minutos de configuración

Nada de esto es específico de nosotros salvo la dirección. Docker, el NVIDIA Container Toolkit y una pila de controladores en funcionamiento ya están en la máquina.

Confirme la máquina y, después, proporcione a los pesos un lugar donde alojarse

```
$ ssh root@203.0.113.42
$ nvidia-smi --query-gpu=name,memory.total --format=csv

# Weights on the fast local NVMe, not the system volume.
$ mkdir -p /scratch/models
$ df -h /scratch

# A gated model needs a token. Skip if yours is open.
$ export HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxx
```

## Iniciar el servidor

Un contenedor. La primera ejecución descarga unos 40 GB de pesos cuantizados, lo que en un puerto 1 Gbit/s tarda unos minutos; cada reinicio posterior es cuestión de segundos.

vLLM, una tarjeta, 4 bits

```
$ docker run -d --name vllm --restart unless-stopped \
    --gpus all --ipc=host \
    -v /scratch/models:/root/.cache/huggingface \
    -e HF_TOKEN="$HF_TOKEN" \
    -p 127.0.0.1:8000:8000 \
    vllm/vllm-openai:latest \
    --model casperhansen/llama-3.3-70b-instruct-awq \
    --quantization awq_marlin \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.92

# Watch it load. "Application startup complete" is the signal.
$ docker logs -f vllm
```

Primera solicitud

```
$ curl -s http://127.0.0.1:8000/v1/models | head

$ curl -s http://127.0.0.1:8000/v1/chat/completions \
    -H 'Content-Type: application/json' \
    -d '{"model":"casperhansen/llama-3.3-70b-instruct-awq",
         "messages":[{"role":"user","content":"In one sentence: what is a KV cache?"}],
         "max_tokens":80}'
```

## Los flags que importan

--max-model-len Ajústelo al contexto que sirve vLLM reserva caché KV para el máximo declarado. Declarar 131072 cuando sirve 8192 desperdicia dieciséis veces la memoria que necesita, y el síntoma es «concurrencia insuficiente», no un error.

--gpu-memory-utilization 0.90 to 0.95 La fracción de la tarjeta que vLLM puede reclamar. Todo lo que no reclama se desperdicia; dejar el valor predeterminado de 0.90 en una máquina dedicada le cuesta concurrencia real. No supere 0.95.

--ipc=host Obligatorio, no opcional Sin ella, la memoria compartida del contenedor queda limitada a 64 MB. En una sola tarjeta puede que no pase nada; en un modelo con sharding, NCCL se queda colgado sin ningún error útil.

--tensor-parallel-size Solo cuando el modelo no cabe Aplicar sharding a un modelo que cabe en una tarjeta lo hace *más lento*. Consulte la [guía de interconexión](https://gpuserver.io/es/guides/nvlink-vs-pcie) — esta es la forma más habitual de hacer que un nodo caro rinda peor que uno barato.

--kv-cache-dtype fp8 Reduce su caché a la mitad En Hopper y Blackwell. Duplica el contexto o la concurrencia que puede contener, a un coste de calidad que normalmente no es medible. La ganancia más fácil de esta lista.

--max-num-seqs Limítelo a su concurrencia real Dejarlo en 256 en una máquina que sirve a ocho usuarios significa que vLLM planifica para 256 y admite solicitudes que no puede contener, lo que se manifiesta como picos de latencia en lugar de rechazos.

## No publicarlo para todo el mundo

**La API compatible con OpenAI no tiene autenticación de forma predeterminada.** Vinculado a `0.0.0.0` en una dirección pública, es un servidor de inferencia abierto, y los escáneres encuentran ese tipo de servidores en cuestión de horas. Fíjese en `-p 127.0.0.1:8000:8000` del comando anterior — esa dirección inicial es lo que lo mantiene fuera de internet, y es el carácter que más a menudo se omite al copiar un comando de otro sitio.

Acceda a él desde su propia máquina a través de un túnel SSH — sin abrir puertos, sin certificados que gestionar, sin nada que configurar mal:

Desde su portátil

```
$ ssh -N -L 8000:127.0.0.1:8000 root@203.0.113.42

# Now http://127.0.0.1:8000 on your laptop is the server.
```

Si de verdad tiene que ser público, coloque un proxy inverso delante con TLS y una clave de API, y restrinja también las direcciones de origen en el cortafuegos. La [documentación](https://gpuserver.io/es/docs#firewall) tiene un conjunto de reglas mínimo. Cinturón y tirantes es la postura correcta para un endpoint que responderá a quien pregunte.

## Aumentar el rendimiento

En el orden en que merece la pena probarlos. Los dos primeros son gratis y normalmente ofrecen las mayores ganancias.

1. **Reduzca `--max-model-len` a su contexto real.** Casi siempre es la mayor ganancia por sí sola, y no le cuesta nada que estuviera usando.
2. **Suba `--gpu-memory-utilization` a 0.95.** Es una máquina dedicada; no hay nada más en la tarjeta para lo que dejar espacio.
3. **Active la caché KV en FP8** si la tarjeta lo permite. Duplica lo que puede contener.
4. **Agrupe por lotes desde el cliente.** El procesamiento continuo por lotes solo ayuda si las solicitudes llegan de forma concurrente. Las solicitudes de una en una dejan la mayor parte de la tarjeta inactiva, sea cual sea la configuración.
5. **Solo entonces, y no antes, plantéese una tarjeta más rápida.** La generación está limitada por el ancho de banda de memoria, así que una H200 a 4800 GB/s es aproximadamente 2,4× una H100 PCIe a 2000 para el mismo modelo — una ganancia real, y la más cara de esta lista.

Mida antes y después — no adivine.

```
$ docker exec vllm python -m vllm.entrypoints.openai.api_server --help | head -1
$ docker exec vllm vllm bench serve \
    --model casperhansen/llama-3.3-70b-instruct-awq \
    --num-prompts 200 --request-rate 8

# And watch the card while it runs: if utilisation sits below 90%,
# the bottleneck is your client, not the GPU.
$ nvidia-smi dmon -s um
```

## Mantenerlo en marcha

Tres cosas que merece la pena hacer el primer día, porque las tres son molestas de descubrir el día catorce.

### Política de reinicio

`--restart unless-stopped` está en el comando anterior. Tras un reinicio, el contenedor vuelve a arrancar y los pesos ya están en `/scratch`, así que está listo en menos de un minuto.

### Vigile la tarjeta, no el proceso

Una GPU que se ha caído del bus mantiene un contenedor con aspecto saludable. `nvidia-smi -q -d PERFORMANCE` en una comprobación de estado la detecta; una comprobación de puerto no.

### Los pesos no tienen copia de seguridad

Están en su NVMe local y en ningún otro sitio. Eso está bien — se pueden volver a descargar. Sus adaptadores de fine-tuning no, así que guárdelos en algún lugar fuera de la máquina.

Y cuando el plazo termina, los discos se borran en menos de una hora, sin periodo de gracia. Todo lo que hay en `/scratch` desaparece con ellos. Es deliberado — es la misma garantía que asegura que la máquina que le entregaron no tenía datos de nadie más — pero significa que el último día de un plazo no es el momento de empezar a copiar cosas fuera.

## Compruebe este modelo con cada nodo que alquilamos.

El configurador indica qué configuraciones la alojan en una sola tarjeta, cuáles tienen que dividirla, y cuánto cuesta cada una.

[Abrir el configurador](https://gpuserver.io/es/configure) [Leer las guías](https://gpuserver.io/es/guides)

## Otras guías

- [Práctica · 10 min Fine-tuning de un modelo de 70B en una sola tarjeta QLoRA en una sola GPU de 48 GB: qué cabe, cuánto cuesta al mes y por qué el fine-tuning completo exige otro tipo de máquina. Leer la guía](https://gpuserver.io/es/guides/lora-finetune)
- [Pago · 8 min Pagar un servidor en cripto Qué ocurre realmente entre pulsar pagar y obtener root, qué moneda elegir, y los cuatro errores que hacen perder dinero en un primer pago. Leer la guía](https://gpuserver.io/es/guides/pay-in-crypto)
- [Dimensionamiento · 9 min Cuánta VRAM necesita realmente un modelo La aritmética que hay detrás de «¿cabe?»: los pesos, la caché KV, y los dos puntos en los que una regla general se equivoca por un factor de tres. Leer la guía](https://gpuserver.io/es/guides/vram-sizing)

---

Fuente: https://gpuserver.io/es/guides/serve-llama-70b/. Este archivo se genera a partir de los mismos datos que el sitio web; si una cifra aquí difiere de la de una página, prevalece la página y este archivo está desactualizado: la fuente canónica es https://gpuserver.io/.
