DEV Community

Angelo Belchior
Angelo Belchior

Posted on • Edited on

132 3 6 2 5

Dica rápida: Rodando o DeepSeek (ou qualquer modelo) localmente

Imagem de uma baleia Azul usando computador

Hype é Hype.

Isso é fato.

Mas confesso que fazia tempo que algo não me deixava tão empolgado quanto o Memphis Depay no Corinthians DeepSeek.

Nesses últimos dias só se tem falado nele. E não é por menos: Esse modelo criado por uma startup chinesa com o mesmo nome consegue entregar o mesmo resultado do o1, modelo super avançado da OpenAI. Só que de graça! Caso queira saber mais sobre o modelo, acesse https://arxiv.org/pdf/2501.12948.
Enquanto é necessário assinar o ChatGPT Plus para ter acesso a esse modelo, o DeepSeek simplesmente o entrega de graça. É só acessar https://chat.deepseek.com/.

E caso você queira utilizar as suas APIs em seu software, é possível assinar um plano. E é aqui que a coisa é mais surpreendente ainda:

Model Input Cost (per million tokens) Output Cost (per million tokens)
DeepSeek Reasoner $0.55 $2.19
OpenAI O1 $15.00 $60.00

A diferença é escandalosa.

E deve ser por isso que o mundo tech listado na NASDAQ começou a desmoronar: Tech billionaires lost almost $100bn in stock market selloff sparked by DeepSeek.

Eu precisei fazer essa sutil introdução ao DeepSeek para que você meu caro leitor, minha cara leitora, perceba a reviravolta que o mundo Tech deu nesses últimos dias.

Porém, a ideia aqui é mostrar para vocês como rodar esse modelo localmente. E não só esse modelo, praticamente qualquer um.

Afirmo "praticamente qualquer um" devido ao fato de alguns modelos serem tão pesados que se faz necessária uma máquina absurdamente parruda para rodá-los.

Basicamente, para começar, nós precisamos saber de duas coisas:

  • Onde eu baixo esse modelo;
  • E como eu executo o modelo baixado;

E para nossa sorte, é possível responder essas duas questões com apenas uma palavra: Ollama.

Ollama é uma ferramenta por linha de comando absurdamente simples de se instalar e configurar, e que nos ajuda a baixar e executar os modelos sem complicações nenhuma!

Ao entrar no site https://ollama.com/download, você escolhe o sistema operacional, baixa o instalador, executa e pronto!

Porém, antes de executar, quero dar uma dica marota para você.

Os modelos são arquivos bem grandes, que podem variar entre 2GB até 400GB, dependendo da quantidade de parâmetros, precisão dos dados, arquitetura do modelo, etc.. Sendo assim, é necessário ter um espaço em disco bem grande. Eu tenho dois SSDs na minha máquina, e configurei o Ollama para que ele baixe os modelos num SSD específico.

Por padrão, o Ollama armazena os modelos no diretório ~/.ollama/models e caso você queira mudar esse local é necessário informar o caminho da pasta onde os modelos serão armazenados configurando uma variável de ambiente: OLLAMA_MODELS

No macOS e Linux é bem tranquilo.

Abra o terminal e adicione a seguinte linha ao seu arquivo de configuração do shell (~/.bashrc, ~/.zshrc, ou ~/.bash_profile, dependendo do shell que você usa):

export OLLAMA_MODELS="/Volumes/SSD/Pasta onde Ficarão os modelos"
Enter fullscreen mode Exit fullscreen mode

Após salvar o arquivo, é necessário aplicar as alterações:

source ~/.bashrc  # ou ~/.zshrc, ~/.bash_profile
Enter fullscreen mode Exit fullscreen mode

Já no Windows, usando o Powershell:

[Environment]::SetEnvironmentVariable("OLLAMA_MODELS", "C:\caminho\para\seu\diretorio", "User")
Enter fullscreen mode Exit fullscreen mode

Em seguida, sai do carro, entra no carro... abre e fecha o terminal!

Pronto!!!

Outra dica marota, que aprendi na prática, é sobre a alteração do caminho da pasta onde os modelos são armazenados com o Ollama em execução. Como ele roda como um processo, qualquer mudança nesse diretório exige que ele seja encerrado antes da modificação e reiniciado em seguida. Abaixo, explico como iniciá-lo.

Feita a instalação, o Ollama está pronto para uso!

Caso você ainda não tenha executado o Ollama no fim da instalação, ou matado o processo para fazer algum tipo de alteração, abra seu terminal e execute o comando ollama serve para começar.

E se tudo der certo e nada der errado ao rodar o comando ollama help poderemos ver uma lista com todos os comandos:

Large language model runner

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
Enter fullscreen mode Exit fullscreen mode

Sim... é bem parecido com os comandos do Docker.

Próximo passo é escolher a nossa imagem... digo... o nosso modelo...

Para isso, acesse o site https://ollama.com/search. Aqui você vai encontrar centenas de modelos disponíveis para uso local.

A instalação de um modelo é absurdamente simples:

ollama run <<nome do modelo>>

No nosso caso, vamos usar o DeepSeek r1.

Ao entrar nesse link https://ollama.com/library/deepseek-r1 você se depara com várias opções de modelos.

DeepSeek-R1-Distill-Qwen-1.5B
ollama run deepseek-r1:1.5b

DeepSeek-R1-Distill-Qwen-7B
ollama run deepseek-r1:7b

DeepSeek-R1-Distill-Llama-8B
ollama run deepseek-r1:8b

DeepSeek-R1-Distill-Qwen-14B
ollama run deepseek-r1:14b

DeepSeek-R1-Distill-Qwen-32B
ollama run deepseek-r1:32b

DeepSeek-R1-Distill-Llama-70B
ollama run deepseek-r1:70b
Enter fullscreen mode Exit fullscreen mode

Basicamente, o que distingue um dos outros é o modelo base no qual ele foi criado e a quantidade de parâmetros.

Em geral, quanto mais parâmetros um modelo tem, mais abrangente ele tende a ser, ou seja, ele consegue lidar com uma variedade maior de tarefas, contextos e nuances.

Dito isto, eu escolhi instalar o modelo deepseek-r1:8b. É um modelo com 4.9GB e que roda liso na minha máquina.

Aliás, esse é um ponto importante. O poder computacional da sua máquina é decisivo na escolha de um modelo. Se você escolher um modelo maior, com mais parâmetros, mais abrangente, pode ser que a sua máquina abra o bico. Se a sua máquina roda o Chrome sem engasgar, pode ficar tranquilo, caso contrário, comece escolhendo um modelo menor, como o deepseek-r1:1.5b. 🤡

ollama run deepseek-r1:8b
Enter fullscreen mode Exit fullscreen mode

Esse comando acima, além de baixar o modelo, vai nos dar a possibilidade de interação. Pode ser que demore alguns bons minutos para que ele seja baixado.

Após o download do modelo, um chat no terminal é iniciado:

>>> Send a message (/? for help)
Enter fullscreen mode Exit fullscreen mode

Agora é brincar!!!!

Deu pra perceber a velocidade na resposta? Sensacional, não é?

Para sair, digite /bye!

Você pode experimentar vários modelos, mas lembre-se de que eles são grandes e podem entupir seu SSD.

Para saber quais modelos vocêm tem instalado use o comando ollama list e para apagar um modelo use ollama rm <<nome do modelo>>>.


Nesse ponto entregamos o que foi proposto no título do post, correto?

Mas não vamos parar por aqui... como sempre... pegue um café e vem comigo. É agora que a brincadeira fica mais legal ainda.

O Ollama é um processo que fica rodando na sua máquina. Quando você usa o terminal, você acessa essa aplicação via linha de comando. Foi o que fizemos acima. Mas se eu te contar que o Ollama também sobe um servidor http na porta 11434 expondo APIs para que possamos interagir via uma aplicação nossa, por exemplo?

Olha que bacana!! Se você executar esse curl abaixo, vai receber a resposta via streaming. Isso é bem legal!!!

curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-r1:8b",
  "prompt":"Quais são os gases nobres?"
}'
Enter fullscreen mode Exit fullscreen mode

Eu não consegui mudar essa porta, se você souber como faz, deixa aí
nos comentários por favor!!!

Sim, é possível mudar a porta desse serviço.
No macOS e Linux adicione a seguinte linha ao seu arquivo de configuração do shell (~/.bashrc, ~/.zshrc ou ~/.bash_profile):

export OLLAMA_HOST="127.0.0.1:<<porta>>"
Enter fullscreen mode Exit fullscreen mode

Para aplicar as alterações:

source ~/.bashrc  # ou ~/.zshrc, ~/.bash_profile
Enter fullscreen mode Exit fullscreen mode

Já no Windows:

[Environment]::SetEnvironmentVariable("OLLAMA_HOST", "127.0.0.1:<<porta>>", "User")
Enter fullscreen mode Exit fullscreen mode

Sai do carro, e entra no carro... de novo ;p

Agradeço ao @flavio_apompilio_4121ffc pela dica de como alterar a porta :)

Isso abre uma infinidade de possibilidades. Uma delas é de se criar uma aplicação web ou mobile que "simule" um chat. Igual ao próprio https://chat.deepseek.com/ ou https://chat.openai.com/.

Caso queira saber mais sobre as APIs, acesse https://github.com/ollama/ollama/blob/main/docs/api.md!

Olha aí uma boa oportunidade! Criar uma interface visual para o Ollama!!!

Porém, caso não queira fazer isso, não tem problema. Apresento-lhes Open WebUI.

O Open WebUI é uma plataforma de IA auto-hospedada, extensível, rica em recursos e fácil de usar, projetada para operar totalmente offline. Ela suporta vários executores LLM como Ollama e APIs compatíveis com OpenAI, com mecanismo de inferência integrado para RAG, tornando-a uma solução de implantação de IA poderosa. (Copiei do site deles ;p)

Divirtam-se!

Era isso!!!

API Trace View

Struggling with slow API calls? 🕒

Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (10)

Collapse
 
aramis_7 profile image
Aramis

Tem suporte pra eu treinar uma LLM dessas com uma base de dados, por exemplo, artigos científicos? Assim tenho algo personalizado ou mais focado? Ou é mais eficiente usar as que já estão disponíveis mostradas no tutorial?

Collapse
 
angelobelchior profile image
Angelo Belchior

Nesse caso talvez RAG (Retrieval-Augmented Generation) ajude. Você consegue fazer com que o modelo consulte uma base de dados externa antes de montar a mensagem de resposta. O modelo recebe os dados recuperados e usa como contexto para gerar uma resposta mais "precisa". Esse link pode te ajudar: blog.dsacademy.com.br/como-rag-ret...

Collapse
 
jessilyneh profile image
Jessilyneh

Que artigo bacana, parabens!!! Vou salvar pra seguir como tutorial

Collapse
 
angelobelchior profile image
Angelo Belchior

Muito obrigado!

Collapse
 
flavio_apompilio_4121ffc profile image
Flavio A Pompilio • Edited

Top, Angelino! Obrigado por compartilhar.

Para alterar a porta:

[Environment]::SetEnvironmentVariable("OLLAMA_HOST", "127.0.0.1:[port]", "User")
Enter fullscreen mode Exit fullscreen mode

Sai do carro, entra no carro.

Collapse
 
angelobelchior profile image
Angelo Belchior

Hahahahah.. valew mano :)

Collapse
 
gsousaigor profile image
Igor Garcia De Sousa

Artigo maravilhoso, porém me surgiu uma dúvida.
Há algum custo e se houver, qual é?

Collapse
 
angelobelchior profile image
Angelo Belchior

Muito obrigado. Não tem nenhum custo!!! Tudo é executado na sua máquina de forma offline. (No caso você precista estar on-line para baixar o modelo, mas depois dele instalado, pode ficar offline)

Collapse
 
felipersb profile image
Felipe Sales

Artigo fantástico Angelão. Parabéns cara!!!

Collapse
 
angelobelchior profile image
Angelo Belchior

Valew :)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay