1 puntos por GN⁺ 2024-10-12 | 1 comentarios | Compartir por WhatsApp

lm.rs: ejecutar inferencia local de modelos de lenguaje en CPU con Rust

  • Introducción

    • lm.rs es un proyecto que permite ejecutar inferencia de modelos de lenguaje en CPU usando Rust.
    • Está diseñado para ejecutar modelos de lenguaje con código mínimo y sin bibliotecas de ML, inspirado en llama2.c y llm.c de Karpathy.
    • Antes solo era compatible con el modelo Gemma 2 de Google, pero ahora también soporta los modelos Llama 3.2 y el modelo de imágenes PHI-3.5.
  • Modelos preparados

    • Ofrece benchmarks y enlaces de descarga para varios modelos y tokenizers.
    • Se recomienda usar modelos cuantizados Q8_0 y Q4_0.
    • La velocidad fue medida en un AMD Epyc de 16 núcleos.
  • Conversión de modelos

    • Es posible convertir modelos de Google/Meta al formato lmrs.
    • Después de instalar las dependencias de Python, se pueden usar los scripts export.py y tokenizer.py para convertir el modelo y el tokenizer.
  • Build

    • El código Rust puede compilarse y ejecutarse con cargo.
    • Para activar las funciones multimodales, es necesario incluir la feature multimodal.
  • TODOs

    • Agregar métodos de sampling.
    • Probar modelos 9B y 27B.
    • Paralelizar el bucle de atención multi-head.
    • Agregar métricas de rendimiento.
    • Agregar una función para proporcionar system prompts.
    • Soporte de cuantización (int8, int4).

# Resumen de GN⁺

  • lm.rs ofrece una forma eficiente de ejecutar modelos de lenguaje en CPU con Rust. Esto es posible incluso sin bibliotecas de ML, por lo que resulta útil en entornos ligeros.
  • También es adecuado para desarrolladores que usan Rust por primera vez, y tiene alta extensibilidad gracias a su compatibilidad con varios modelos.
  • El soporte para modelos multimodales como PHI-3.5 también incluye capacidades de procesamiento de imágenes.
  • Un proyecto con funcionalidad similar es la biblioteca Transformers de Hugging Face.

1 comentarios

 
GN⁺ 2024-10-12
Comentarios de Hacker News
  • Al ejecutar 1.2G llama3.2-1b-it-q80.lmrs en una MacBook M2 de 64 GB, funcionó rápido y el uso de CPU fue de 1000% en 13 hilos
  • Parece útil para explicar cómo funciona un Transformer mediante ejemplos de código
    • Haría falta mejorar que la librería no imprima en stdout
    • Queda la duda de si se puede implementar sin unsafe
  • Se pueden usar varias herramientas de Rust para cargar modelos y realizar otras tareas de LLM
    • Podría ayudar a reducir las dependencias de Python
    • Me pregunto si hay planes de soporte para gramáticas
  • El título no es claro
    • La expresión "no dependency" puede prestarse a confusión
  • En el pasado hice algo parecido, pero el rendimiento no fue satisfactorio
    • Hace falta un benchmark de la implementación en Rust
    • Implementar inferencia de LLM podría convertirse en el nuevo "hello world!" para programadores
  • El soporte para Metal/Cuda es imprescindible
  • Valoro mucho el entusiasmo de la comunidad de Rust
  • Me pregunto si todas estas implementaciones dependen solo de CPU
  • Hace falta una comparación con otros proyectos
    • Si soporta modelos de visión, estaría dispuesto a probarlo