1 pontos por GN⁺ 2024-10-12 | 1 comentários | Compartilhar no WhatsApp

lm.rs: executando inferência local de modelos de linguagem na CPU com Rust

  • Introdução

    • lm.rs é um projeto que permite executar inferência de modelos de linguagem na CPU usando Rust.
    • Inspirado em llama2.c e llm.c de Karpathy, foi projetado para executar modelos de linguagem com código mínimo, sem bibliotecas de ML.
    • Antes suportava apenas o modelo Gemma 2, do Google, mas agora também oferece suporte aos modelos Llama 3.2 e ao modelo de imagem PHI-3.5.
  • Modelos prontos

    • Fornece benchmarks de vários modelos e tokenizers, além de links para download.
    • Recomenda o uso de modelos quantizados Q8_0 e Q4_0.
    • A velocidade foi medida em um AMD Epyc de 16 núcleos.
  • Conversão de modelos

    • É possível converter modelos do Google/Meta para o formato lmrs.
    • Após instalar as dependências em Python, é possível converter o modelo e o tokenizer usando os scripts export.py e tokenizer.py.
  • Build

    • O código Rust pode ser compilado e executado com cargo.
    • Para ativar os recursos multimodais, é necessário incluir a feature multimodal.
  • TODOs

    • Adicionar métodos de amostragem.
    • Testar modelos 9B e 27B.
    • Paralelizar o loop de atenção multi-head.
    • Adicionar métricas de desempenho.
    • Adicionar recurso para fornecer prompt de sistema.
    • Suporte a quantização (int8, int4).

# Resumo do GN⁺

  • O lm.rs oferece uma forma eficiente de executar modelos de linguagem na CPU com Rust. Isso é possível mesmo sem bibliotecas de ML, o que o torna útil em ambientes mais leves.
  • Também é adequado para desenvolvedores que estão começando com Rust, e seu suporte a vários modelos oferece boa extensibilidade.
  • O suporte a modelos multimodais como o PHI-3.5 também inclui recursos de processamento de imagem.
  • Um projeto com funcionalidade semelhante é a biblioteca Transformers, da Hugging Face.

1 comentários

 
GN⁺ 2024-10-12
Comentários do Hacker News
  • Ao executar 1.2G llama3.2-1b-it-q80.lmrs em um MacBook M2 64GB, funcionou rapidamente, com uso de CPU de 1000% em 13 threads
  • Parece útil para explicar como o Transformer funciona por meio de exemplos de código
    • A biblioteca precisa ser melhorada para não imprimir em stdout
    • Há dúvida se isso pode ser implementado sem unsafe
  • É possível usar várias ferramentas em Rust para carregar modelos e realizar outras tarefas de LLM
    • Isso pode ajudar a reduzir dependências de Python
    • Fico curioso se há planos de suporte a gramáticas
  • O título não está claro
    • A expressão "no dependency" pode gerar mal-entendidos
  • Já fiz algo parecido no passado, mas o desempenho não foi satisfatório
    • São necessários benchmarks da implementação em Rust
    • Implementar inferência de LLM pode se tornar o novo "hello world!" para programadores
  • Suporte a Metal/Cuda é essencial
  • Aprecio o entusiasmo da comunidade Rust
  • Fico curioso se todas essas implementações dependem apenas de CPU
  • É necessária uma comparação com outros projetos
    • Se suportar modelos de visão, eu estaria disposto a testar