- Motor de inferencia C++ ligero e independiente para los modelos Gemma
- ¿Para quién es este proyecto?
- Los motores modernos de inferencia para modelos de lenguaje grandes (LLM) son sistemas complejos con capacidades personalizadas que van más allá de los runtimes tradicionales de redes neuronales
- Existen oportunidades de investigación e innovación mediante el codiseño de algoritmos de alto nivel y cómputo de bajo nivel, pero hay una brecha entre los runtimes de inferencia en C++ que no fueron diseñados para experimentación y los frameworks de investigación de ML centrados en Python que abstraen el cómputo de bajo nivel
- gemma.cpp ofrece una implementación mínima de los modelos Gemma 2B y 7B, con énfasis en la simplicidad y la claridad directa por encima de la generalidad
- gemma.cpp está orientado a casos de experimentación e investigación, puede integrarse fácilmente en otros proyectos con dependencias mínimas y es fácil de modificar, con unas 2K LoC de implementación central y 4K LoC de utilidades de soporte
- Aprovecha el SIMD portable de Google Highway Library para inferencia en CPU
- Para despliegues en producción, se recomienda la ruta de despliegue estándar usando frameworks de Python como JAX, Keras, PyTorch y Transformers
Inicio rápido
Requisitos del sistema
- Antes de comenzar, debes tener instalados CMake, el compilador Clang de C++ (con soporte para C++17 o superior) y
tar para extraer el archivo desde Kaggle
Paso 1: Obtener los pesos del modelo y el tokenizador desde Kaggle
- Visita la página del modelo Gemma en Kaggle y selecciona
Model Variations |> Gemma C++
- El menú desplegable
Variation incluye opciones de pesos bfloat16 (mayor fidelidad) y pesos de punto flotante convertidos a 8 bits (inferencia más rápida)
- En general, se recomienda comenzar con el checkpoint
-sfp
Paso 2: Extraer los archivos
- Después de completar el acuerdo, descarga y extrae el archivo
archive.tar.gz
- Los archivos extraídos incluyen los pesos del modelo (por ejemplo,
2b-it-sfp.sbs) y el archivo del tokenizador (tokenizer.spm)
- Puedes mover estos archivos a una ubicación de directorio conveniente (por ejemplo, el directorio
build/ de este repositorio)
Paso 3: Compilar
- El sistema de compilación usa CMake
- Para compilar el runtime de inferencia de gemma, crea un directorio de compilación y usa
cmake desde el directorio raíz del proyecto para generar los archivos de compilación
- En el caso de los pesos de punto flotante convertidos a 8 bits (sfp), ejecuta cmake sin opciones
- Si descargaste pesos bfloat16, en lugar de ejecutar cmake sin opciones como arriba, ejecútalo configurando WEIGHT_TYPE con el tipo
hwy::bfloat16_t de highway
- Después de ejecutar el comando
cmake correspondiente, entra al directorio build/ y ejecuta make para compilar el ejecutable ./gemma
Paso 4: Ejecutar
- Puedes ejecutar
gemma dentro del directorio build/
gemma requiere argumentos obligatorios y, por ejemplo, puede ejecutarse usando el archivo de pesos 2b-it-sfp.sbs y el archivo de tokenizador tokenizer.spm
Uso
gemma tiene varios modos de uso controlados por la bandera de verbosidad
- Actualmente, todos los modos de uso son interactivos y la generación de texto se activa al ingresar una nueva línea
Aplicación interactiva de terminal
- De forma predeterminada, la verbosidad está configurada en 1, y al invocar
gemma se proporciona una interfaz interactiva basada en terminal
Uso como herramienta de línea de comandos
- Para usar el ejecutable
gemma como herramienta de línea de comandos, puede ser útil crear un alias con todos los argumentos para gemma.cpp completamente especificados
Incluir la biblioteca gemma.cpp en tu proyecto
- La manera más fácil de incluir gemma.cpp en tu propio proyecto es usar
FetchContent para traer gemma.cpp y sus dependencias
- Puedes agregar lo siguiente a tu CMakeLists.txt
Compilar gemma.cpp como biblioteca
- gemma.cpp puede usarse como dependencia de biblioteca en tu propio proyecto, y puedes generar un artefacto de biblioteca compartida compilando el objetivo
libgemma
Agradecimientos y contacto
- gemma.cpp fue iniciado en otoño de 2023 por Austin Huang y Jan Wassenberg, y se lanzó en febrero de 2024 con contribuciones de Phil Culliton, Paul Chang y Dan Zheng
- Este no es un producto de Google con soporte oficial.
Opinión de GN⁺:
- gemma.cpp es una herramienta útil para experimentar e investigar con modelos de lenguaje grandes, y al ofrecer un motor de inferencia ligero basado en C++ ayuda a cerrar la brecha con los frameworks existentes centrados en Python
- Este proyecto brinda una oportunidad para contribuir a la comunidad de código abierto y subraya la importancia de seguir las directrices de código abierto de Google
- gemma.cpp está diseñado para ofrecer varios modos de uso de modo que desarrolladores e investigadores puedan integrarlo y usarlo fácilmente en sus propios proyectos, lo que tiene el potencial de impulsar la innovación en los campos de IA y ML
1 comentarios
Opiniones en Hacker News
Presentación de Austin y explicación del proyecto:
Opiniones sobre la competitividad de Google en LLM:
Pregunta sobre el sistema de compilación:
Elogios al rendimiento de Gemma:
Asombro por la velocidad de evolución del ecosistema open source de LLM:
Pregunta sobre formatos de modelo:
Debate sobre la capacidad matemática de los LLM:
Pregunta sobre si Gemma tiene restricciones de contenido:
Agradecimiento por gemma.cpp y expectativa por futuras funciones:
Pregunta sobre el tamaño del ejecutable del modelo Gemma: