Inteligência Artificial sem Limites: Explorando o LLama.cpp
Menos recursos, mais inteligência - o LLama.cpp redefine o que é possível fazer com modelos de IA no seu próprio computador.
Continuando nossa série de posts abordando 6 maneiras de executar modelos de inteligência artificial localmente, sem a necessidade de acessar APIs externas, hoje é a vez de falar sobre o Llama.cpp!
Nos últimos anos, a utilização de modelos de linguagem tem se expandido rapidamente em diversas áreas, desde o processamento de textos até a geração de código e análise de dados clínicos.
Um dos maiores desafios ao trabalhar com esses modelos poderosos é a necessidade de grandes recursos computacionais, especialmente memória e GPU.
Para superar essa limitação, surgiram soluções como o LLama.cpp, que visa tornar mais acessíveis modelos de linguagem robustos em máquinas com recursos limitados.
Neste post, vamos criar uma aplicação em Python que vai chamar um grande modelo de linguagem (LLM) através da biblioteca Llama.ccp e responder a uma pergunta.
Vamos abordar como baixar o modelo e instalar a biblioteca, bem como a criação / execução da aplicação, tudo no seu computador.
Mas primeiro, o que é o LLama.cpp?
O LLama.cpp (ou LLaMa C++) é uma implementação otimizada da arquitetura do modelo LLama que foi projetada para rodar eficientemente em máquinas com pouca memória.
Desenvolvida por Georgi Gerganov (e com mais de 390 colaboradores), essa versão em C/C++ proporciona uma interface simplificada e recursos avançados que permitem a execução de modelos de linguagem sem sobrecarregar os sistemas.
Com a possibilidade de rodar em ambientes com recursos limitados, LLama.cpp torna os poderosos modelos de linguagem mais acessíveis e práticos para uma variedade de aplicações.
Como Funciona o LLama.cpp?
O LLama.cpp é uma adaptação da arquitetura original LLama, otimizada para uma execução mais leve. Algumas das características que destacam essa implementação incluem:
Memória: A principal vantagem do LLama.cpp é sua capacidade de reduzir a necessidade de memória, permitindo que você execute modelos de linguagem grandes no seu próprio computador.
Eficiência computacional: Além da redução do uso de memória, o LLama.cpp também foca em melhorar a eficiência de execução, utilizando otimizações específicas do código em C++ para acelerar o processo.
Facilidade de implementação: Embora seja uma solução mais leve, o LLama.cpp não sacrifica a qualidade dos resultados. Ele mantém a capacidade de gerar textos e realizar tarefas de NLP com alta precisão.
Instalação
Antes de mais nada, vamos precisar de um computador com Python instalado e um compilador C/C++.
Neste tutorial, vamos usar o WSL (Windows Subsystem for Linux), uma camada de compatibilidade desenvolvida pela Microsoft que permite executar um sistema operacional Linux diretamente no Windows.
O WSL permite rodar distribuições Linux (como Ubuntu, Debian, Fedora, entre outras) no Windows, permitindo que você use ferramentas de linha de comando, scripts e software Linux nativamente no seu ambiente Windows.
Após acessar o WSL, vamos instalar as bibliotecas necessárias. Caso você não tenha o compitador C/C++, digite no terminal:
sudo apt update
sudo apt install build-essential
Isso vai atualizar a lista de pacotes disponíveis e instalar o build-essential, que inclui ferramentas de compilação como gcc (compilador C), g++ (compilador C++) e outras bibliotecas para compilação.
Agora, vamos exportar a variavel de ambiente CC para apontar para o compliador gcc:
export CC=$(which gcc)
Podemos já instalar a nossa biblioteca, via pip:
pip install llama-cpp-python
Obtendo o modelo
Vamos agora baixar o modelo LLM que vamos utilizar na aplicação. Neste tutorial, vou usar o Phi-3, da Microsoft, versão GGUF.
GGUF é um formato otimizado para rodar modelos de linguagem em dispositivos com memória e capacidade computacional limitadas. Ele usa quantizações de 4, 5 e 8 bits para reduzir o uso de memória e acelerar o processamento, tornando-o ideal para aplicativos que exigem eficiência e resposta rápida.
Para obter o modelo, acesse: https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf.
Clique em “Files and versions” e depois no ícone para baixar o modelo “Phi-3-mini-4k-instruct-q4.ggu“.
Se você estiver usando WSL, após baixar o arquivo, mova-o para o diretório Linux dentro do ambiente do Windows, acessada pelo caminho:
\\wsl$\[DistroName]\home
Exemplo:
\\wsl$\Ubuntu-22.04\home\[seu_usuario]\workspace\model
OBS: crie antes as pastas “workspace” e “model” na sua home para armazenarmos o modelo e a aplicação.
Criando aplicação Python
O próximo passo é criar uma aplicação Python para chamar nossa biblioteca e acessar o modelo Phi-3.
Crie um arquivo chamado app.py e coloque esse código:
from llama_cpp import Llama
llm = Llama(
model_path="model/Phi-3-mini-4k-instruct-q4.gguf", # caminho do modelo
n_ctx=512, # Tamanho max janela de contexto
)
prompt = "Como explicar o que é internet para uma pessoa da Idade Mpédia?"
# Inferência
output = llm(
f"<|user|>\n{prompt}<|end|>\n<|assistant|>",
max_tokens=256, # Respostas até 256 tokens
stop=["<|end|>"],
echo=True,
)
print(output['choices'][0]['text'])
Neste código, realizamos as seguintes etapas:
Importação da biblioteca Llama_cpp
Carregamento do modelo
Definição do prompt (pergunta)
Inferência (geração da resposta pelo modelo)
Exibição da resposta.
OBS: Para mais detalhes sobre os parâmetros disponíveis, acesse a página do modelo: https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf
Executando
Para executar a aplicação Python, vamos acessar via terminal a pasta onde a aplicação foi criada (exemplo “workspace“) e executar o comando:
python app.py
A saída será a resposta para nossa pergunta, dentro da tag <|assistant|>:
Para mim, a resposta para a pergunta “Como explicar o que é internet para uma pessoa da Idade Média?“ veio assim:
<|assistant|> Para explicar o que é internet para uma pessoa da Idade Média, podemos usar uma analogia com um grande livro de registros e trocas de informações, que é acessível a todo mundo.
Imagine que você está no meio de um grande castelo realeza, com um grande livro chamado "Registro Universal". Esse livro contém informações sobre todos os assuntos possíveis, desde agricultura, medicina, aventuras de viajantes, até conhecimentos sobre diferentes culturas e reinos.
Agora, a internet é como ter um conjunto de portões secretos que leva a todos esses lugares dentro do castelo. O que antes era limitado a pessoas que possuíam o livro, agora é possível compartilhar essa informação com pessoas que vivem em outras partes do mundo. Através dessas "portas virtuais", você pode trocar mensagens, aprender novas coisas, jogar jogos com pessoas de outras partes ou mesmo fazer negócios.
Conclusões
Essa aplicação é um pequeno exemplo de como utilizar Llama_cpp para chamar um modelo e gerar respostas com base em um prompt específico, mas pode ser facilmente adaptado para outras tarefas e aplicações.
A biblioteca Llama_cpp pode ser usada em uma ampla gama de aplicações, como assistentes virtuais, análises de texto, ou explicações em diversos contextos.
Com ela, podemos trabalhar com modelos de linguagem poderosos sem a necessidade de grandes recursos computacionais, o que a torna ideal para projetos que demandam eficiência e escalabilidade em máquinas com capacidade limitada.
Deixe nos comentários qual foi a saída do seu modelo!
Espero que tenham gostado do post. Até a próxima! 💗