Files
llama_cpp_local/README.md
T
2025-11-03 00:20:04 +01:00

5.7 KiB

Llama.cpp OpenAI Compatible API

API compatible con OpenAI para servir modelos GGUF usando llama.cpp.

Caractersticas

  • = API compatible con OpenAI Chat Completions
  •  Soporte para modelos GGUF

  • Construido con FastAPI y llama-cpp-python
  • = Documentacin automtica con Swagger
  • =' Configuracin flexible de parmetros

Instalacin

Instalacin bsica (solo CPU):

pip install -e .[cpu]

Instalacin con soporte CUDA (recomendado para GPU):

pip install -e .[cuda]

Instalacin manual con CUDA:

# Opcin 1: Usando CMAKE
CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python[cublas] --force-reinstall --no-cache-dir

# Opcin 2: Usando variables de entorno
export CMAKE_ARGS="-DLLAMA_CUBLAS=on"
pip install llama-cpp-python[cublas] --force-reinstall --no-cache-dir

# Luego instalar el resto de dependencias
pip install -e .

Verificar instalacin de CUDA:

nvidia-smi  # Verificar que CUDA est disponible
python -c "import llama_cpp; print('llama-cpp-python instalado correctamente')"
  1. Descargar un modelo GGUF (ejemplo):
# Ejemplo con un modelo pequeo
wget https://huggingface.co/microsoft/DialoGPT-medium/resolve/main/pytorch_model.bin

Uso

Iniciar el servidor

python main.py --model-path /ruta/a/tu/modelo.gguf

Opciones disponibles

python main.py --help
  • --model-path / -m: Ruta al archivo del modelo GGUF (requerido)
  • --host: Host del servidor (default: 0.0.0.0)
  • --port: Puerto del servidor (default: 8000)
  • --n-ctx: Tamao del contexto (default: 4096)
  • --n-batch: Tamao del batch (default: 512)
  • --n-threads: Nmero de threads (default: auto)
  • --n-gpu-layers: Nmero de capas a cargar en GPU (-1 = todas, 0 = ninguna, default: -1)
  • --main-gpu: GPU principal a usar (default: 0)
  • --split-mode: Modo de divisin entre GPUs (default: 1)

Ejemplo de uso

# Ejemplo recomendado con GPU (CUDA) - Mximo rendimiento
uv run python main.py --model-path ./models/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --port 8000 --n-ctx 4096 --n-gpu-layers -1

# Ejemplo bsico con CPU solamente
uv run python main.py --model-path ./models/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --port 8000 --n-ctx 4096 --n-gpu-layers 0

# Ejemplo con GPU - Solo algunas capas en GPU (para modelos grandes o GPUs con poca memoria)
uv run python main.py --model-path ./models/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --port 8000 --n-ctx 4096 --n-gpu-layers 20

# Ejemplo con configuracin personalizada para GPU mltiples
uv run python main.py --model-path ./models/Qwen3-4B-Instruct-2507-Q4_K_M.gguf --port 8000 --n-ctx 4096 --n-gpu-layers -1 --main-gpu 0 --split-mode 1

API Endpoints

GET /v1/models

Lista los modelos disponibles

POST /v1/chat/completions

Crea una completion de chat

Ejemplo con curl:

curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama",
    "messages": [
      {"role": "user", "content": "Hola, cmo ests?"}
    ],
    "max_tokens": 100,
    "temperature": 0.7
  }'

Ejemplo con Python (usando openai):

import openai

# Configurar el cliente para usar tu servidor local
openai.api_base = "http://localhost:8000/v1"
openai.api_key = "no-key-needed"  # No se requiere clave real

response = openai.ChatCompletion.create(
    model="llama",
    messages=[
        {"role": "user", "content": "Explcame qu es la inteligencia artificial"}
    ],
    max_tokens=200,
    temperature=0.7
)

print(response.choices[0].message.content)

Documentacin de la API

Una vez que el servidor est ejecutndose, puedes acceder a la documentacin interactiva en:

Parmetros de la API

ChatCompletionRequest

  • model: Nombre del modelo (string)
  • messages: Lista de mensajes del chat
  • max_tokens: Mximo nmero de tokens a generar (default: 2048)
  • temperature: Temperatura para el muestreo (default: 0.7)
  • top_p: Top-p para el muestreo (default: 0.9)
  • stream: Respuesta en streaming (no implementado an)

Formato de mensajes

{
  "role": "user|assistant|system",
  "content": "Contenido del mensaje"
}

Notas importantes

  • La API estima el conteo de tokens dividiendo la longitud del texto por 4
  • Los modelos GGUF deben ser compatibles con llama.cpp
  • El formateo de prompts puede variar segn el modelo usado
  • Para mejor rendimiento, ajusta n_ctx, n_batch y n_threads segn tu hardware

Troubleshooting

Error: "El archivo del modelo no existe"

  • Verifica que la ruta al modelo GGUF sea correcta
  • Asegrate de que el archivo tenga extensin .gguf

Error de memoria

  • Reduce n_ctx para modelos grandes
  • Usa un modelo ms pequeo
  • Aumenta la memoria disponible

Respuestas lentas

  • Aumenta n_threads si tienes ms CPU cores disponibles
  • Ajusta n_batch para tu hardware
  • Considera usar un modelo ms pequeo
  • Para GPU: Usa --n-gpu-layers -1 para cargar todas las capas en GPU
  • Para GPU: Verifica que CUDA est instalado correctamente con nvidia-smi

Problemas con GPU/CUDA

  • Error "CUDA not found": Reinstala llama-cpp-python con soporte CUDA:
    CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python[cublas] --force-reinstall --no-cache-dir
    
  • Memoria GPU insuficiente: Reduce --n-gpu-layers a un nmero menor (ej: 20, 10)
  • GPU no detectada: Verifica que nvidia-smi funcione y muestre tu GPU
  • Rendimiento lento con GPU: Asegrate de usar --n-gpu-layers -1 para cargar todas las capas
  • Error de compatibilidad: Verifica que tu GPU tenga compute capability >= 3.5