Gemma.cpp: mecanismo de inferência C++ leve e standalone para os modelos Gemma
(github.com/google)- Mecanismo de inferência C++ leve e executado de forma independente para os modelos Gemma do Google
- Para quem é este projeto?
- Os mecanismos modernos de inferência para modelos de linguagem de grande porte (LLMs) são sistemas complexos com recursos personalizados que vão além dos runtimes tradicionais de redes neurais
- Há oportunidades de pesquisa e inovação por meio do co-design entre algoritmos de alto nível e computação de baixo nível, mas existe uma lacuna entre runtimes de inferência em C++ que não foram projetados para experimentação e frameworks de pesquisa em ML centrados em Python que abstraem a computação de baixo nível
- O gemma.cpp oferece uma implementação mínima dos modelos Gemma 2B e 7B, com foco em simplicidade e objetividade em vez de generalidade
- O gemma.cpp é voltado para casos de experimentação e pesquisa, pode ser facilmente integrado a outros projetos com dependências mínimas e é fácil de modificar, com cerca de 2K LoC de implementação principal e 4K LoC de utilitários de suporte
- Utiliza o SIMD portátil da Google Highway Library para inferência em CPU
- Para implantações em produção, recomenda-se o caminho de deploy padrão usando frameworks Python como JAX, Keras, PyTorch e Transformers
Início rápido
Requisitos do sistema
- Antes de começar, é necessário ter instalado o CMake, o compilador Clang C++ (com suporte a C++17 ou superior) e o
tarpara extrair o arquivo baixado do Kaggle
Etapa 1: obter os pesos do modelo e o tokenizador no Kaggle
- Visite a página do modelo Gemma no Kaggle e selecione
Model Variations |> Gemma C++ - O menu suspenso
Variationinclui opções de pesos bfloat16 (maior fidelidade) e pesos convertidos para ponto flutuante de 8 bits (inferência mais rápida) - Em geral, recomenda-se começar com o checkpoint
-sfp
Etapa 2: extrair os arquivos
- Após preencher o termo de concordância, baixe e extraia o arquivo
archive.tar.gz - Os arquivos extraídos incluem os pesos do modelo (por exemplo,
2b-it-sfp.sbs) e o arquivo do tokenizador (tokenizer.spm) - Você pode mover esses arquivos para um diretório conveniente (por exemplo, o diretório
build/deste repositório)
Etapa 3: build
- O sistema de build usa CMake
- Para compilar o runtime de inferência do gemma, crie um diretório de build e use o
cmakeno diretório raiz do projeto para gerar os arquivos de build - No caso dos pesos de ponto flutuante convertidos para 8 bits (sfp), execute o cmake sem opções
- Se você baixou pesos bfloat16, em vez de executar o cmake sem opções como acima, execute-o definindo WEIGHT_TYPE como o tipo
hwy::bfloat16_tda highway - Depois de executar o comando
cmakeapropriado, vá para o diretóriobuild/e executemakepara gerar o executável./gemma
Etapa 4: executar
- Você pode executar o
gemmadentro do diretóriobuild/ - O
gemmaexige argumentos obrigatórios e pode ser executado, por exemplo, usando o arquivo de pesos2b-it-sfp.sbse o arquivo de tokenizadortokenizer.spm
Uso
- O
gemmapossui vários modos de uso controlados pela flag de verbosity - Atualmente, todos os modos de uso são interativos, e a geração de texto é acionada ao inserir uma nova linha
Aplicativo de terminal interativo
- Por padrão, a verbosity é definida como 1, e o
gemmafornece uma interface interativa baseada em terminal quando é chamado
Uso como ferramenta de linha de comando
- Para usar o executável
gemmacomo ferramenta de linha de comando, pode ser útil criar um alias com todos os argumentos para o gemma.cpp completamente especificados
Incluir a biblioteca gemma.cpp no projeto
- A maneira mais fácil de incluir o gemma.cpp no seu próprio projeto é usar
FetchContentpara obter o gemma.cpp e suas dependências - Você pode adicionar o seguinte ao CMakeLists.txt
Compilar gemma.cpp como biblioteca
- O gemma.cpp pode ser usado como dependência de biblioteca no seu próprio projeto, e é possível gerar um artefato de biblioteca compartilhada compilando o alvo
libgemma
Agradecimentos e contato
- O gemma.cpp foi iniciado no outono de 2023 por Austin Huang e Jan Wassenberg, e lançado em fevereiro de 2024 com contribuições de Phil Culliton, Paul Chang e Dan Zheng
- Este não é um produto oficial com suporte do Google.
Opinião do GN⁺:
- O gemma.cpp é uma ferramenta útil para experimentar e pesquisar modelos de linguagem de grande porte, contribuindo para reduzir a lacuna em relação aos frameworks existentes centrados em Python ao oferecer um mecanismo de inferência leve baseado em C++
- Este projeto oferece uma oportunidade de contribuir com a comunidade open source e reforça a importância de seguir as diretrizes de código aberto do Google
- O gemma.cpp foi projetado para que desenvolvedores e pesquisadores possam integrá-lo e usá-lo facilmente em seus próprios projetos, oferecendo vários modos de uso e potencial para impulsionar a inovação nas áreas de AI e ML
1 comentários
Comentários no Hacker News
Apresentação do Austin e descrição do projeto:
Opiniões sobre a competitividade do Google em LLMs:
Pergunta sobre o sistema de build:
Elogios ao desempenho do Gemma:
Admiração com a velocidade de evolução do ecossistema open source de LLMs:
Pergunta sobre formatos de modelo:
Discussão sobre a capacidade matemática dos LLMs:
Pergunta sobre restrições de conteúdo no Gemma:
Agradecimento pelo gemma.cpp e expectativa por novos recursos:
Pergunta sobre o tamanho do executável do modelo Gemma: