llama.cpp es una biblioteca de software de código abierto que realiza inferencias sobre diversos modelos de lenguaje de gran escala, como el modelo Llama de Meta. Se desarrolla conjuntamente con el proyecto , una biblioteca de propósito general para tensores.

La biblioteca incluye herramientas de línea de comandos, así como un servidor con una sencilla interfaz web.

llama.cpp ha sido considerado el estándar de facto como núcleo de casi todas las herramientas de inferencia local, incluidas Ollama y LM Studio.

Antecedentes Hacia finales de septiembre de 2022, Georgi Gerganov comenzó a trabajar en la biblioteca GGML, una biblioteca escrita en C que implementaba álgebra tensorial. Gerganov desarrolló la biblioteca con la intención de realizar una gestión estricta de la memoria y utilizar multihilo. La creación de GGML estuvo inspirada por el trabajo de Fabrice Bellard sobre LibNC.

Antes de llama.cpp, Gerganov trabajó en una biblioteca similar denominada whisper.cpp, que implementaba Whisper, un modelo de conversión de voz a texto desarrollado por OpenAI.

Desarrollo llama.cpp comenzó a desarrollarse en marzo de 2023 por Georgi Gerganov como una implementación del código de inferencia de Llama en C/C++ puro y sin dependencias. Esto mejoró el rendimiento en computadoras sin GPU u otro hardware especializado, lo que constituía uno de los objetivos del proyecto. llama.cpp ganó popularidad entre los usuarios que no disponían de hardware especializado, ya que podía ejecutarse únicamente en una CPU. Aunque inicialmente fue diseñado para CPU, posteriormente se añadió compatibilidad con GPU y NPU. , cuenta con más de 109 000 estrellas en GitHub.

El 30 de abril de 2024 se introdujo FlashAttention.

El 10 de abril de 2025 se introdujo libmtmd, lo que reactivó el soporte para modelos multimodales, cuyo desarrollo había permanecido anteriormente estancado.

El 17 de diciembre de 2025 se introdujo la aceleración completa en dispositivos con Android y ChromeOS mediante un nuevo enlace para interfaces gráficas, lo que permite el desarrollo de aplicaciones nativas más allá del enfoque anterior de compilación cruzada y ejecución de la interfaz de línea de comandos en un shell de adb.

Arquitectura llama.cpp admite múltiples objetivos de hardware, incluidos x86, ARM, Metal, BLAS, BLIS, zDNN, ZenDNN, SYCL, MUSA, CUDA, HIP, CANN, OpenCL, RPC y Vulkan (versión 1.2 o posterior). Estos backends conforman la biblioteca de tensores GGML, utilizada por el código de llama.cpp específico para cada modelo en el frontend. llama.cpp utiliza varias extensiones de CPU para su optimización:

AVX, AVX2, AVX-512, AVX-VNNI y AMX para X86-64. Neon, i8MM, SVE, SVE2, SME y SME2 para AArch64 (ARM64). VXE2 (Vector Enhancement Facility 2) para S390x. Apple silicon constituye un objetivo importante para el proyecto.

llama.cpp admite diversas funcionalidades orientadas a la inferencia en dispositivos periféricos, entre ellas:

Cuantización del modelo por adelantado y cuantización sobre la marcha de la caché KV. Decodificación especulativa. Descarga parcial de las capas del modelo a la RAM del sistema, lo que permite a los dispositivos cargar modelos que serían demasiado grandes para almacenarse exclusivamente en la VRAM de la GPU.

Además, llama.cpp admite diversas funcionalidades y API para la comunicación con el frontend, entre ellas:

Endpoints compatibles con OpenAI, como v1/chat/completions. Formateo de salida basado en gramáticas como JSON.

Formato de archivo GGUF El formato de archivo GGUF ( Universal File) es un formato binario que almacena tanto tensores como metadatos en un único archivo y está diseñado para guardar y cargar rápidamente los datos de los modelos. Fue introducido en agosto de 2023 por el proyecto llama.cpp con el objetivo de mantener mejor la compatibilidad con versiones anteriores a medida que se añadía compatibilidad con otras arquitecturas de modelos. Sustituyó a formatos anteriores utilizados por el proyecto, como GGML, y normalmente se genera mediante la conversión de modelos desarrollados con una biblioteca de aprendizaje automático diferente, como PyTorch.

Diseño GGUF se centra en la cuantización, es decir, la reducción de la precisión de los pesos del modelo. Esto puede reducir el uso de memoria y aumentar la velocidad, aunque a costa de una menor precisión del modelo.

GGUF admite tipos enteros cuantizados de 2 a 8 bits, formatos comunes de datos de coma flotante, como float32, float16 y bfloat16, y cuantización de 1,58 bits.

GGUF contiene la información necesaria para ejecutar un modelo de lenguaje similar a GPT, como el vocabulario del tokenizador, la longitud del contexto, información sobre los tensores y otros atributos.

Estructura a nivel de byte (little-endian) Bytes Descripción 4 Número mágico GGUF, actualmente establecido en 0x47 0x47 0x55 0x46 4 Versión GGUF, actualmente configurada en 3 8 UINT64 tensor_count : número de tensores 8 UINT64 metadata_kv_count : número de pares clave-valor de metadatos Variable Bloque de metadatos que contiene pares clave-valor metadata_kv_count Variable Bloque de información de tensores, que contiene valores de tensor_count. Variable uint8_t tensor_data[], bloque de bits de peso

Bloque de metadatos // example metadata general.architecture: 'llama', general.name: 'LLaMA v2', llama.context_length: 4096, ... , general.file_type: 10, // (typically indicates quantization level, here "MOSTLY_Q2_K") tokenizer.ggml.model: 'llama', tokenizer.ggml.tokens: [ '<unk>', '<s>', '</s>', '<0x00>', '<0x01>', '<0x02>', '<0x03>', '<0x04>', '<0x05>', '<0x06>', '<0x07>', '<0x08>', ... ], ...

Bloque de información de tensores // n-th tensor name: GGUF string, // ex: "blk.0.ffn_gate.weight" n_dimensions: UINT32, // ex: 2 dimensions: UINT64[], // ex: [ 4096, 32000 ] type: UINT32, // ex: 10 (typically indicates quantization level, here "GGML_TYPE_Q2_K") offset: UINT64 // starting position within the tensor_data block, relative to the start of the block // (n+1)-th tensor ...

Modelos Llama.cpp admite muchos modelos de lenguaje grandes, incluidos Llama, Mistral, Gemma, DeepSeek, gpt-oss, Phi y Qwen .

Véase también

LM Studio : aplicación de escritorio para ejecutar e interactuar localmente con LLM. Ollama SGLang : marco para la generación estructurada y la inferencia y distribución de modelos de lenguaje grandes de alto rendimiento. vLLM : motor de inferencia y servicio de modelos de lenguaje a gran escala

Referencias

Categoría:Software libre programado en C++ Categoría:Software que utiliza la licencia MIT Categoría:Modelos de lenguaje de gran tamaño Categoría:Wikipedia:Páginas con traducciones sin revisar