- 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
tar para 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
Variation inclui 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
cmake no 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_t da highway
- Depois de executar o comando
cmake apropriado, vá para o diretório build/ e execute make para gerar o executável ./gemma
Etapa 4: executar
- Você pode executar o
gemma dentro do diretório build/
- O
gemma exige argumentos obrigatórios e pode ser executado, por exemplo, usando o arquivo de pesos 2b-it-sfp.sbs e o arquivo de tokenizador tokenizer.spm
Uso
- O
gemma possui 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
gemma fornece uma interface interativa baseada em terminal quando é chamado
Uso como ferramenta de linha de comando
- Para usar o executável
gemma como 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
FetchContent para 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: