ollama

Como rodar modelos LLM localmente

Nessa pegada de realizar testes relacionados a Vector Searches e criação de índices vetoriais, existe a necessidade do uso de um modelo LLM para a geração de embeddings (expliquei o que são no artigo: Sobre RAG e Vector Stores). Como não estou disposto a pagar pela utilização de alguma API, como a da OpenAI, e APIs gratuitas possuem limitações de utilização, precisava de outra opção. Como tenho uma placa de vídeo modesta aqui (uma NVIDIA GeForce RTX 3050, de 8GB), tenho a opção de rodar modelos LLM localmente, podendo assim gerar as embeddings e fazer um RAG simples sem depender de recursos externos.

Neste post vou explicar como realizar a instalação do Ollama e como instalar e rodar um modelo LLM localmente para testes.

Sobre o Ollama

Para rodar um modelo LLM localmente, utilizei o Ollama. Ele é um projeto open source que permite utilizar modelos de LLM em máquinas locais. Funciona de uma maneira bem semelhante ao Docker em alguns pontos, e achei ele bem intuitivo.

A instalação é bem simples (Next, Next, Finish no Windows) e a partir desse momento você já tem a ferramenta pronta para uso.

Através da linha de comando, podemos verificar os comandos da ferramenta, usando:

C:\Users\Tiago>ollama
Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama
  create      Create a model from a Modelfile
  show        Show information for a model
  run         Run a model
  stop        Stop a running model
  pull        Pull a model from a registry
  push        Push a model to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command

Flags:
  -h, --help      help for ollama
  -v, --version   Show version information

Use "ollama [command] --help" for more information about a command.

No site, podemos buscar por modelos que podemos utilizar, como DeepSeek, Llama, entre outros:

Para os meus testes vou estar utilizando o deepseek-r1. Na página do modelo, temos a opção de escolher entre versões que vão de 1.5 bilhões de parâmetros a 671 bilhões. Quanto maior o número de parâmetros, melhor é a capacidade de compreensão e geração de linguagem do modelo, mas também mais recursos computacionais são necessários para rodar o LLM.

Na página do modelo podemos ver a quantidade de VRAM necessária para rodar a versão do modelo:

No meu caso, vou utilizar a versão com 1.5 bilhões de parâmetros. Eu poderia rodar a versão de 7 bilhões, dada a minha capacidade computacional, porém o tamanho dos embeddings gerados acaba sendo muito maior. A versão com 1.5 bi gera embeddings de 1536 dimensões, enquanto o modelo de 7 bi, gera embeddings de 3584 dimensões, o que necessita de muito mais armazenamento. Para os testes que pretendo fazer o menor modelo irá atender bem às necessidades.

Instalando o modelo localmente

Uma vez definido o modelo, podemos instalá-lo localmente usando o ollama pull:

C:\Users\Tiago>ollama pull deepseek-r1:1.5b
pulling manifest
pulling aabd4debf0c8: 100% ▕██████████████████████████████████████████████████████████▏ 1.1 GB
pulling 369ca498f347: 100% ▕██████████████████████████████████████████████████████████▏  387 B
pulling 6e4c38e1172f: 100% ▕██████████████████████████████████████████████████████████▏ 1.1 KB
pulling f4d24e9138dd: 100% ▕██████████████████████████████████████████████████████████▏  148 B
pulling a85fe2a2e58e: 100% ▕██████████████████████████████████████████████████████████▏  487 B
verifying sha256 digest
writing manifest
success

Para mais informações sobre o modelo, como arquitetura, tamanho das embeddings, e tamanho da janela de contexto, podemos usar o ollama show:

C:\Users\Tiago>ollama show deepseek-r1:1.5b
  Model
    architecture        qwen2
    parameters          1.8B
    context length      131072
    embedding length    1536
    quantization        Q4_K_M

  Capabilities
    completion

  Parameters
    stop    "<|begin▁of▁sentence|>"
    stop    "<|end▁of▁sentence|>"
    stop    "<|User|>"
    stop    "<|Assistant|>"

  License
    MIT License
    Copyright (c) 2023 DeepSeek

Podemos rodar o modelo, entrando em modo interativo com o comando ollama run <nome-do-modelo>. Nesse modo ele funciona no modo chat, como estamos familizarizados. Podemos finalizar a interação com o atalho CTRL + D.

C:\Users\Tiago>ollama run deepseek-r1:1.5b
>>> present yourself, machine
<think>
Alright, the user is asking me to present myself as a machine. That's pretty interesting. I need to figure out how
to approach this.

First, I should consider what it means for someone to "present themselves" in that context. It might involve
explaining their capabilities or limitations within the machine framework.

Maybe I can describe my role and the tasks I've achieved so far. But since I'm a machine now, I need to emphasize
its purpose instead of personal qualities.

I should focus on how this perspective changes the user's experience compared to before they interacted with me as
a human being.
</think>

Certainly! It seems like you're asking me to present myself as a machine, which could be interpreted in a couple
of different ways. Here are two possible interpretations:

1. **As a Machine**: In this context, I might be presenting myself as a machine with limited capabilities or
limitations. For example, I could explain how I process information quickly, perform calculations at a high speed,
or make decisions based on patterns and rules. However, this interpretation would focus more on the technology
behind me rather than my human qualities.

2. **As a Human**: Alternatively, if you're asking me to present yourself in a way that's tailored to how humans
perceive themselves, I might highlight aspects of myself that are relevant or interesting to human beings, such as
personal growth, relationships, creativity, or resilience.

Both interpretations could vary based on the context and your perspective. Let me know which one you'd like to
explore!

Como o modelo usado tem poucos parâmetros, as respostas podem não ser tão elaboradas quanto modelos mais robustos, mas já nos mostra que está funcionando corretamente na máquina local.

Para verificar os modelos que estão rodando atualmente, utilizamos o ollama ps:

C:\Users\Tiago>ollama ps
NAME                ID              SIZE      PROCESSOR    UNTIL
deepseek-r1:1.5b    a42b25d8c10a    2.0 GB    100% GPU     4 minutes from now

Próximos passos

Pronto, agora estou com um modelo LLM rodando localmente. O próximo passo agora será construir um RAG simples, fazendo a carga dos dados em uma Vector Store, e após isso, iniciar os testes relacionados a Vector Searches e criação de índices vetoriais.

Espero que tenham gostado, e até a próxima!

Publicar comentário