Guía Completa: Crear un Servidor de Llama.cpp con Docker Incluyendo el Modelo
En este tutorial te mostraré cómo configurar un servidor de Llama.cpp utilizando Docker, con la particularidad de que el modelo de lenguaje se incluirá dentro de la imagen Docker.
Requisitos Previos
- Docker instalado en tu sistema
- Al menos 8 GB de espacio libre en disco
- 4 GB de RAM como mínimo
- Conexión a Internet estable (para descargar el modelo)
Nota: La construcción de la imagen puede tardar entre 30-60 minutos debido al tamaño del modelo (4.58 GB).
Paso 1: Crear el Directorio de Trabajo
mkdir -p /home/docker/llama-server
cd /home/docker/llama-server
Paso 2: Crear el Archivo Dockerfile
Crea un archivo llamado Dockerfile
con el siguiente contenido:
FROM ubuntu:22.04
# Instalar dependencias necesarias para compilar y descargar
RUN apt-get update && \
apt-get install -y build-essential cmake git libcurl4-openssl-dev wget && \
rm -rf /var/lib/apt/lists/*
# Clonar el repositorio de llama.cpp
WORKDIR /app
RUN git clone https://github.com/ggerganov/llama.cpp.git
WORKDIR /app/llama.cpp
# Usar una versión estable y conocida
RUN git checkout b6111
# Crear directorio de build y compilar con CMake
RUN mkdir build
WORKDIR /app/llama.cpp/build
# Configurar para compilación estática
RUN cmake .. -DLLAMA_CURL=ON -DBUILD_SHARED_LIBS=OFF -DLLAMA_STATIC=ON
# Compilar el proyecto completo
RUN make -j$(nproc)
# Buscar y copiar el ejecutable del servidor
RUN find . -name "*server*" -type f -executable -exec cp {} /app/llama-server \;
# Verificar que el binario existe
RUN ls -la /app/llama-server && chmod +x /app/llama-server
# Limpiar el código fuente para reducir el tamaño de la imagen
WORKDIR /app
RUN rm -rf llama.cpp
# Crear directorio para modelos
RUN mkdir -p /app/models
# Descargar el modelo dentro del contenedor
WORKDIR /app/models
RUN wget https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf
# Verificar que el modelo se descargó correctamente
RUN ls -la && \
[ -f "Meta-Llama-3-8B-Instruct.Q4_K_M.gguf" ] && \
echo "Modelo descargado correctamente. Tamaño: $(du -h Meta-Llama-3-8B-Instruct.Q4_K_M.gguf | cut -f1)" || \
(echo "Error: No se pudo descargar el modelo" && exit 1)
# Instalar librerías de runtime
RUN apt-get update && \
apt-get install -y --no-install-recommends libcurl4 openssl && \
rm -rf /var/lib/apt/lists/*
# Establecer directorio de trabajo
WORKDIR /app
# Exponer puerto del servidor
EXPOSE 8500
# Comando para ejecutar el servidor
CMD ["/app/llama-server", \
"-m", "/app/models/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf", \
"--host", "0.0.0.0", \
"--port", "8500", \
"--ctx-size", "4096", \
"--n-gpu-layers", "0"]
Paso 3: Crear el Archivo docker-compose.yml
Crea un archivo docker-compose.yml
con el siguiente contenido:
version: '3.8'
services:
llama-server:
build:
context: /home/docker/llama-server
dockerfile: Dockerfile
image: llama-server
container_name: llama-cpp-server
ports:
- "8500:8500"
restart: unless-stopped
Paso 4: Construir la Imagen Docker
sudo docker compose build
Nota: Este proceso puede tardar entre 30-60 minutos debido a la compilación y descarga del modelo.
Paso 5: Ejecutar el Contenedor
sudo docker compose up -d
Paso 6: Verificar el Funcionamiento
Consulta los logs para ver el progreso de la carga del modelo:
sudo docker compose logs -f
Cuando el modelo se haya cargado completamente, verás mensajes indicando que el servidor está listo.
Paso 7: Probar la API
Realiza una prueba para asegurarte de que todo funciona correctamente:
curl http://localhost:8500/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Meta-Llama-3-8B-Instruct.Q4_K_M",
"messages": [
{"role": "system", "content": "Eres un asistente útil en español."},
{"role": "user", "content": "Explícame qué es la inteligencia artificial en 3 oraciones."}
],
"max_tokens": 100,
"temperature": 0.7
}'
Solución de Problemas Comunes
Error de conflicto de nombres de contenedor
sudo docker rm -f llama-cpp-server
sudo docker compose up -d
Reconstruir la imagen completamente
sudo docker build --no-cache -t llama-server .
Verificar que el modelo se descargó correctamente
sudo docker run --rm llama-server ls -la /app/models/
Ventajas de este enfoque:
- Portabilidad: La imagen contiene todo lo necesario
- Facilidad de despliegue: Solo necesitas Docker
- Consistencia: El entorno es siempre el mismo
- Control de versiones: Puedes versionar la imagen completa
Comentarios
Publicar un comentario