Ir al contenido principal

Docker y Llama.cpp: imagen con modelo y servidor compilados

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

Entradas populares de este blog

Instalación y Configuración de MySQL 5.7 en Ubuntu 24.04 LTS

Instalar MySQL 5.7 en Ubuntu 24.04 1. Descargar e instalar MySQL Copiar mkdir ~/mysql57 cd ~/mysql57 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 2. Instalar dependencias necesarias IMPORTANTE: Se descargan las versiones nuevas de las librerías y se las vincula con las librerías que necesita MySQL. Copiar sudo apt update # Reemplazo de libaio sudo apt install libaio1t64 # Reemplazo de libtinfo y ncurses sudo apt install libtinfo6 libncurses6 Copiar # Crear los enlaces simbólicos sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1 sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64...

Instalar DeepSeek R1 1.5B en Ubuntu 24.04 sin GPU

Instalar DeepSeek en tu sistema sin GPU, pasos: Especificaciones del Entorno de Pruebas Componente Detalle SO Ubuntu Cinnamon 24.04 LTS x86_64 Kernel 6.8.0-51-generic CPU Intel i7-6820HQ (8 núcleos) @ 3.600GHz GPUs AMD ATI Radeon HD 8830M / R7 250 / R7 M465X Intel HD Graphics 530 RAM 15.882 GB (3.716 GB en uso) Resolución 1440x810 Escritorio Cinnamon 6.0.4 1. Instalar Git LFS sudo apt-get install git-lfs git lfs install 2. Clonar el repositorio cd /opt sudo mkdir deepseek && sudo chown $USER:$USER deepseek cd deepseek git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B 3. Crear y activar un entorno virtual python -m ve...

Instalar Jasper Studio 6.21 para Ubuntu 24.04

Instalar js-studiocomm_6.21.3 en Ubuntu 24.4 Para instalar Jaspersoft Studio en Ubuntu 24.4, sigue estos pasos: 1. Descargar Jasper Studio Descarga la versión js-studiocomm_6.21.3 desde el siguiente enlace: Jaspersoft Studio 6.21.3 2. Crear el directorio de instalación mkdir /opt/jasperstudio 3. Mover el archivo descargado mv /dir_descarga/js-studiocomm_6.21.3_linux_x86_64.tgz /opt/jasperstudio/ cd /opt/jasperstudio 4. Extraer el archivo tar -xvzf js-studiocomm_6.21.3_linux_x86_64.tgz cd js-studiocomm_6.21.3 5. Ejecutar Jaspersoft Studio ./Jaspersoft\ Studio 6. Crear acceso directo en el escritorio Para facilitar el acceso, crea un archivo .desktop en el escritorio: gedit ~/Escritorio/jaspersoft-studio.desktop En el archivo jaspersoft-studio.desktop , agrega lo siguiente: [Desktop Entry] Version=1.0 Ty...