Guía Completa: Ejecutar Modelos LLM Locales con llama.cpp
Esta guía te muestra cómo ejecutar modelos de lenguaje grandes (LLM) localmente usando binarios precompilados de llama.cpp, sin necesidad de GPU.
Requisitos Previos
- Sistema Linux (Ubuntu/Debian recomendado)
- Al menos 8GB de RAM (16GB recomendado para modelos grandes)
- Conexión a Internet para descargar binarios y modelos
- Conocimientos básicos de terminal
📂 Paso 1: Preparar el entorno
Descargar binarios precompilados
Crea un directorio y descarga los binarios precompilados de llama.cpp:
# Crear directorio principal
mkdir ~/llama-app
cd ~/llama-app
# Descargar binarios precompilados
wget https://github.com/ggml-org/llama.cpp/releases/download/b6111/llama-b6111-bin-ubuntu-x64.zip
# Descomprimir y organizar
unzip llama-b6111-bin-ubuntu-x64.zip
mv build llama.cpp # Renombrar carpeta
cd llama.cpp/bin # Acceder a los ejecutables
Configurar carpeta de modelos
Crea un directorio para almacenar todos tus modelos:
# Crear carpeta para modelos
mkdir -p ~/models
cd ~/models
🤖 Paso 2: Descargar y ejecutar modelos
Modelo Liviano: TinyLlama 1.1B
Recomendado para pruebas rápidas o sistemas con recursos limitados.
Descargar modelo
cd ~/models
wget https://huggingface.co/TheBloke/TinyLlama-1.1B-1T-OpenOrca-GGUF/resolve/main/tinyllama-1.1b-1t-openorca.Q4_K_M.gguf
Ejecutar modelo
cd ~/llama-app/llama.cpp/bin
./llama-cli -m ~/models/tinyllama-1.1b-1t-openorca.Q4_K_M.gguf \
-p "¿Qué es el machine learning?" \
-n 100 \
--temp 0.7
Modelo Equilibrado: Mistral 7B
Excelente equilibrio entre rendimiento y calidad de respuestas.
Descargar modelo
cd ~/models
wget https://huggingface.co/TheBloke/Mistral-7B-v0.1-GGUF/resolve/main/mistral-7b-v0.1.Q4_K_M.gguf
Ejecutar modelo
cd ~/llama-app/llama.cpp/bin
./llama-cli -m ~/models/mistral-7b-v0.1.Q4_K_M.gguf \
-p "[INST] Eres un asistente preciso y factual. Responde en español: ¿Qué es la teoría de la relatividad? [/INST]" \
-n 300 \
--temp 0.5 \
--ctx-size 4096
Tip: Mistral usa una estructura de prompt especial con
[INST]...[/INST]
para mejores resultados.
Modelo Avanzado: Llama 3 8B
Lo último en capacidades de LLM, ideal para tareas complejas.
Descargar modelo
cd ~/models
wget https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf
Ejecutar modelo
cd ~/llama-app/llama.cpp/bin
./llama-cli -m ~/models/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf \
-p "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\nEres un científico experto. Explica en español simple pero preciso.<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n¿Cómo funciona la fotosíntesis?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" \
-n 400 \
--temp 0.4 \
--ctx-size 4096
Estructura de prompt para Llama 3:
<|begin_of_text|>
<|start_header_id|>system<|end_header_id|>
[Tus instrucciones aquí]
<|eot_id|>
<|start_header_id|>user<|end_header_id|>
[Tu pregunta aquí]
<|eot_id|>
<|start_header_id|>assistant<|end_header_id|>
\n\n
Modelo en Español: Llama-2-7B-ft-instruct-es
Optimizado para español, ideal para contenido educativo.
Descargar modelo
# Obtén tu token en: https://huggingface.co/settings/tokens
cd ~/models
wget --header="Authorization: Bearer TU_TOKEN_AQUÍ" \
https://huggingface.co/lucas0/llama-2-7b-ft-instruct-es-GGUF/resolve/main/llama-2-7b-ft-instruct-es.Q4_K_M.gguf
Ejecutar modelo
cd ~/llama-app/llama.cpp/bin
./llama-cli -m ~/models/llama-2-7b-ft-instruct-es.Q4_K_M.gguf \
-p "### Instrucción: Eres un profesor de biología\n### Pregunta: Explica el proceso de fotosíntesis a estudiantes de secundaria\n### Respuesta:" \
-n 300 \
--temp 0.5
Alternativa sin autenticación:
wget https://huggingface.co/TheBloke/Llama-2-7B-fp16/resolve/main/llama-2-7b.Q4_K_M.gguf
🚀 Paso 3: Usar llama-server (API HTTP)
Levantar el servidor HTTP local
cd ~/llama-app/llama.cpp/bin
./llama-server \
-m /home/sistema/models/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8000 \
--ctx-size 4096 \
--n-gpu-layers 0
Nota: Ajusta el path del modelo según tu configuración.
Probar el servidor con curl
# Desde otra terminal
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama",
"messages": [{"role": "user", "content": "¿Qué es primero, el huevo o la gallina?"}]
}'
Probar desde otro dispositivo
# Reemplaza 'tu-ip' con la IP de tu servidor
curl http://tu-ip:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama",
"messages": [{"role": "user", "content": "¿Cómo estás?"}]
}'
Acceso desde navegador: Visita
http://localhost:8000/docs
o http://localhost:8000
para probar el endpoint interactivamente.
⚙️ Consejos de Optimización
Reducir alucinaciones:
--temp 0.3 # Menos creatividad, más precisión
--repeat-penalty 1.2 # Penalizar repeticiones
Ahorrar memoria:
-c 1024 # Reducir contexto
--mlock # Evitar swapping
Mejorar velocidad:
-t $(nproc) # Usar todos los núcleos
--batch-size 512 # Procesamiento por lotes
Prompt efectivo:
-p "Eres un experto en [tema]. Da una respuesta factual y concisa en español: [pregunta]"
🔍 Solución de Problemas Comunes
Error: "No such file or directory"
- Verificar rutas exactas:
- Usar rutas absolutas:
- Verificar rutas exactas:
ls -lh ~/models
- Usar rutas absolutas:
/home/usuario/models/modelo.gguf
Modelo no responde bien:
- Reducir temperatura:
- Especificar rol en prompt: "Eres un experto en..."
- Verificar formato de prompt para cada modelo
- Reducir temperatura:
--temp 0.3
- Especificar rol en prompt: "Eres un experto en..."
- Verificar formato de prompt para cada modelo
Descargas lentas:
- Usar
- Alternativa: Descargar desde navegador y copiar via SCP
- Usar
wget -c
para continuar descargas interrumpidas- Alternativa: Descargar desde navegador y copiar via SCP
Error al iniciar llama-server:
- Verificar que el puerto 8000 esté disponible
- Asegurar que el usuario tenga permisos para ejecutar el binario
- Comprobar que el modelo existe en la ruta especificada
- Verificar que el puerto 8000 esté disponible
- Asegurar que el usuario tenga permisos para ejecutar el binario
- Comprobar que el modelo existe en la ruta especificada
📝 Notas Finales
- Los tiempos de carga inicial del modelo pueden ser largos (1-5 minutos)
- La primera ejecución suele ser más lenta que las siguientes
- Para mejores resultados, usa modelos con cuantización Q4_K_M o Q5_K_M
- Los modelos más grandes requieren más RAM pero ofrecen respuestas de mejor calidad
- El servidor HTTP permite integrar los modelos con otras aplicaciones
Comentarios
Publicar un comentario