Pular para o conteúdo principal

Ollama

Já pensou em usar modelos de IA dentro de containers? Melhor ainda, já pensou em executar um modelo de IA localmente com um comando simples?

No mundo atual, existem vários modelos de IA disponíveis, cada um com seus próprios benefícios. No entanto, testar esses modelos e verificar seus benefícios pode ser um processo complicado.

O Ollama resolve esse problema. É um ambiente local que permite executar modelos de IA facilmente, sem precisar de configurar muita coisa. Você pode executar o modelo de IA como se fosse um container, com um único comando.

O Ollama não é um modelo de IA. É um simplificador que torna o processo de executar modelos de IA mais fácil e acessível.

Instalação

Faça a instalação de acordo com o seu sistema em https://ollama.com/download.

No Linux é só rodar o comando abaixo. No Mac e no Windows é só baixar e executar que será instalado no sistema um cli ollama.

curl -fsSL https://ollama.com/install.sh | sh

Sabemos que as IAs fazem um bom aproveitamento da placa de video, logo o desempenho será bem melhor se tiver uma disponível.

Rodando um Modelo de IA

Só para conferir

ollama -v
ollama version is 0.1.31

# Esse list são os modelos que estão disponíveis na máquina assim como imagens para o docker
ollama list
NAME ID SIZE MODIFIED

ollama pull llama2ls

Para conferir os modelos disponíveis veja em https://ollama.com/library.

Podemos fazer um pull desses modelos para ficar disponíveis sem rodar.

# modelo da meta
ollama pull llama2 ─╯
pulling manifest
pulling 8934d96d3f08... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 3.8 GB
pulling 8c17c2ebb0ea... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 7.0 KB
pulling 7c23fb36d801... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 4.8 KB
pulling 2e0493f67d0c... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 59 B
pulling fa304d675061... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 91 B
pulling 42ba7f8a01dd... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 557 B
verifying sha256 digest
writing manifest
removing any unused layers
success

# Modelo da google
ollama pull gemma

ollama list
NAME ID SIZE MODIFIED
gemma:latest a72c7f4d0a15 5.0 GB 2 minutes ago
llama2:latest 78e26419b446 3.8 GB 9 minutes ago

Na hora de colocar um modelo para rodar precisamos escolher quantos bilhões parâmetros ele irá utilizar. Em um modelo de IA, quanto mais parâmetros usamos mais memória consumimos e mais inteligente a IA é.

Na página do llama2 temos o seguinte:

Memory requirements
7b models generally require at least 8GB of RAM
13b models generally require at least 16GB of RAM
70b models generally require at least 64GB of RAM

Vamos lançar o padrão. Se quiser o de 13 bilhões de parâmetros use o segundo comando.

ollama run llama2

# Para lançar o de 13.
ollama run llama2:13b

Você irá observar já iniciou um chat. Antes de começar vamos conferir algumas coisas

>>> /?
Available Commands:
/set Set session variables
/show Show model information
/load <model> Load a session or model
/save <model> Save your current session
/bye Exit
/?, /help Help for a command
/? shortcuts Help for keyboard shortcuts

Use """ to begin a multi-line message.

>>> /show info
Model details:
Family llama
Parameter Size 13B
Quantization Level Q4_0

Iniciei uma conversa rápida para verificar o que temos com 13b. Daqui pra frente é uma conversa já. Eu não acertei nada, deixei do jeito que aconteceu...


Você fala português?

Sim, eu falo português! 😊 Onde você precisa que eu ajunte?

Crie um manifesto para deployar um nginx com um horizontal pod autoscaler

Claro! Aqui está um exemplo de manifesto para deployment de um Nginx com um Horizontal Pod Autoscaler:

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80

Este manifesto cria uma deploymente de três replicas do container Nginx, selecionado por label "app: nginx". O container tem a imagem mais recente do Nginx e expõe o port 80.

Para adicionar um Horizontal Pod Autoscaler, você pode usar o seguinte manifesto:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
maxReplicas: 5
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
targetCPUUtilizationPercentage: 50

Este manifesto cria um Horizontal Pod Autoscaler que monitora a deploymente de Nginx e scales up ou down com base na utilização CPU. O maxReplicas é definido para 5, minReplicas para 2 e targetCPUUtilizationPercentage para 50%.

Lembre-se de que esses são apenas exemplos e você precisará adaptá-los às suas necessidades específicas. Além disso, é importante lembrar que o Horizontal Pod Autoscaler requer que você tenha uma deploymente Kubernetes para funcionar corretamente.

Se vamos usar o horizontal pod autoscaler pq precisamos de 3 replicas no deployment?

Sim, você pode usuhar o Horizontal Pod Autoscaler para controlar o número de replicas do seu deployment. No exemplo anterior, o maxReplicas é definido para 5, o que significa que o Horizontal Pod Autoscaler irá escalar up até 5 replicas se a utilização CPU for alta o suficiente.

Se você quiser garantir que há sempre 3 replicas do deployment em execução, você pode definir o minReplicas para 3, como mostrado abaixo:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
maxReplicas: 5
minReplicas: 3
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
targetCPUUtilizationPercentage: 50

Como o minReplicas é definido para 3, o Horizontal Pod Autoscaler garantirá que há sempre 3 replicas do deployment em execução, independentemente da utilização CPU.

Lembre-se de que o Horizontal Pod Autoscaler ainda pode escalar up ou down se a utilização CPU for diferente de 50%, mas ele garantirá que há sempre 3 replicas do deployment em execução.

Mas vc definiu um deployment com 3 replicas. Se o HPA quem irá escalar não preciso definir 3 replicas ... no deployment

Você tem razão! Se você already has a deployment with 3 replicas, you don't need to define minReplicas in the Horizontal Pod Autoscaler. The Horizontal Pod Autoscaler will still be able to scale the deployment based on the CPU utilization, but it will not override the number of replicas defined in the deployment.

Here is an updated example of the Horizontal Pod Autoscaler configuration that does not define minReplicas:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
maxReplicas: 5
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
targetCPUUtilizationPercentage: 50

In this example, the Horizontal Pod Autoscaler will still escalar the deployment based on the CPU utilization, but it will not override the number of replicas defined in the deployment.

Send a message (/? for help)


Não dá para comparar o ChatGPT 3.5 que usa 175 bilhões de parâmetros ou o ChatGPT 4.5 que esta na casa dos trilhões.

Já vimos que funciona, mas seria muito mais interessante ter isso disponível em uma interface gráfica. O projeto openwebui faz isso pra gente.

Precisamos setar a variável de ambiente OLLAMA_BASE_URL dentro do container e ter um volume para ele guardar os dados. Vamos colocar o container na rede do host onde o ollama esta servindo na porta 11434.

# Se tiver usando linux
docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main

# Se tiver usando Docker Desktop no Windows ou Mac
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

Em localhost:8080 no Linux ou localhost:3000 no Windows ou Mac estará servindo a interface.

alt text

Faça um Sign Up para criar uma conta e depois o login.

Selecione um dos modelos que você tem o ollama e só começar. Vamos testar o Gemma agora.

alt text

alt text

Dessa maneira podemos ter a nossa IA LLM sem precisa expor nenhum tipo de dado sensível para qualquer outra inteligência. Podemos inclusive utilizá-la como força de processamento para outras ferramentas.

Para remover é igual remover imagens.

ollama list
NAME ID SIZE MODIFIED
gemma:latest a72c7f4d0a15 5.0 GB 2 hours ago
llama2:13b d475bf4c50bc 7.4 GB 2 hours ago
llama2:7b 78e26419b446 3.8 GB 2 hours ago
llama2:latest 78e26419b446 3.8 GB 2 hours ago

❯ ollama rm llama2:latest
deleted 'llama2:latest'

❯ ollama rm llama2:7b
deleted 'llama2:7b'

ollama list
NAME ID SIZE MODIFIED
gemma:latest a72c7f4d0a15 5.0 GB 3 hours ago
llama2:13b d475bf4c50bc 7.4 GB 2 hours ago

Para encontrar mais modelos visite https://huggingface.co/models.