Skip to main content

Ollama

¿Ya pensaste en usar modelos de IA dentro de contenedores? Mejor aún, ¿ya pensaste en ejecutar un modelo de IA localmente con un comando simple?

En el mundo actual, existen varios modelos de IA disponibles, cada uno con sus propios beneficios. Sin embargo, probar esos modelos y verificar sus beneficios puede ser un proceso complicado.

Ollama resuelve ese problema. Es un ambiente local que permite ejecutar modelos de IA fácilmente, sin necesidad de configurar muchas cosas. Puedes ejecutar el modelo de IA como si fuera un contenedor, con un único comando.

Ollama no es un modelo de IA. Es un simplificador que hace el proceso de ejecutar modelos de IA más fácil y accesible.

Instalación

Haz la instalación de acuerdo con tu sistema en https://ollama.com/download.

En Linux solo ejecuta el comando abajo. En Mac y Windows solo descarga y ejecuta que será instalado en el sistema un CLI ollama.

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

Sabemos que las IAs hacen un buen aprovechamiento de la tarjeta de video, por lo que el desempeño será mucho mejor si tienes una disponible.

Ejecutando un Modelo de IA

Solo para verificar:

ollama -v
ollama version is 0.1.31

# Este list son los modelos que están disponibles en la máquina, así como imágenes para docker
ollama list
NAME ID SIZE MODIFIED

ollama pull llama2ls

Para verificar los modelos disponibles mira en https://ollama.com/library.

Podemos hacer un pull de esos modelos para que estén disponibles sin ejecutar.

# Modelo de 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 de 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

A la hora de poner un modelo a ejecutar necesitamos elegir cuántos billones de parámetros utilizará. En un modelo de IA, cuantos más parámetros usamos más memoria consumimos y más inteligente es la IA.

En la página de llama2 tenemos lo siguiente:

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 a lanzar el estándar. Si quieres el de 13 billones de parámetros usa el segundo comando.

ollama run llama2

# Para lanzar el de 13.
ollama run llama2:13b

Observarás que ya inició un chat. Antes de comenzar vamos a verificar algunas cosas:

>>> /?
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

Inicié una conversación rápida para verificar lo que tenemos con 13b. De aquí en adelante es una conversación ya. No acerté nada, lo dejé como sucedió...


¿Hablas español?

Sí, hablo español! 😊 ¿En qué necesitas que te ayude?

Crea un manifiesto para desplegar un nginx con un horizontal pod autoscaler

¡Claro! Aquí está un ejemplo de manifiesto para deployment de un Nginx con un 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 manifiesto crea un deployment de tres réplicas del contenedor Nginx, seleccionado por label "app: nginx". El contenedor tiene la imagen más reciente de Nginx y expone el puerto 80.

Para agregar un Horizontal Pod Autoscaler, puedes usar el siguiente manifiesto:

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 manifiesto crea un Horizontal Pod Autoscaler que monitorea el deployment de Nginx y escala hacia arriba o abajo con base en la utilización de CPU. El maxReplicas está definido para 5, minReplicas para 2 y targetCPUUtilizationPercentage para 50%.

Recuerda que estos son solo ejemplos y necesitarás adaptarlos a tus necesidades específicas. Además, es importante recordar que el Horizontal Pod Autoscaler requiere que tengas un deployment Kubernetes para funcionar correctamente.

Si vamos a usar el horizontal pod autoscaler ¿por qué necesitamos 3 réplicas en el deployment?

Sí, puedes usar el Horizontal Pod Autoscaler para controlar el número de réplicas de tu deployment. En el ejemplo anterior, el maxReplicas está definido para 5, lo que significa que el Horizontal Pod Autoscaler escalará hasta 5 réplicas si la utilización de CPU es lo suficientemente alta.

Si quieres garantizar que haya siempre 3 réplicas del deployment en ejecución, puedes definir el minReplicas para 3, como se muestra a continuación:

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 el minReplicas está definido para 3, el Horizontal Pod Autoscaler garantizará que haya siempre 3 réplicas del deployment en ejecución, independientemente de la utilización de CPU.

Recuerda que el Horizontal Pod Autoscaler todavía puede escalar hacia arriba o abajo si la utilización de CPU es diferente de 50%, pero garantizará que haya siempre 3 réplicas del deployment en ejecución.

Pero tú definiste un deployment con 3 réplicas. Si el HPA es quien va a escalar no necesito definir 3 réplicas ... en el deployment

Tienes razón! If you 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)


No se puede comparar el ChatGPT 3.5 que usa 175 billones de parámetros o el ChatGPT 4.5 que está en la casa de los trillones.

Ya vimos que funciona, pero sería mucho más interesante tener esto disponible en una interfaz gráfica. El proyecto openwebui hace eso para nosotros.

Necesitamos establecer la variable de entorno OLLAMA_BASE_URL dentro del contenedor y tener un volumen para que guarde los datos. Vamos a colocar el contenedor en la red del host donde ollama está sirviendo en el puerto 11434.

# Si estás 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

# Si estás usando Docker Desktop en Windows o 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

En localhost:8080 en Linux o localhost:3000 en Windows o Mac estará sirviendo la interfaz.

alt text

Haz un Sign Up para crear una cuenta y después el login.

Selecciona uno de los modelos que tienes en ollama y solo comienza. Vamos a probar Gemma ahora.

alt text

alt text

De esta manera podemos tener nuestra IA LLM sin necesidad de exponer ningún tipo de dato sensible a cualquier otra inteligencia. Podemos incluso utilizarla como fuerza de procesamiento para otras herramientas.

Para remover es igual que remover imágenes.

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 más modelos visita https://huggingface.co/models.