IAs para impostores - II y 1/4

Esta es una actualización de esta otra entrada porque los procedimientos han cambiado ligeramente así que ahí va para k8s 1.31 con las últimas versiones de ollama y openwebui en plan turbo.

Microk8s con soporte para una gpu de nvidia

Microk8s:

sudo snap install microk8s --classic --channel 1.31/stable
sudo snap install kubectl --classic
sudo snap install helm --classic
mkdir .kube
microk8s.config > .kube/config

¿A lo mejor te interesa cambiar la ip del cluster en el kubeconfig a la 127.0.0.1 si es un PC que te vas a llevar a otro sitio?

Addon para soporte de nvidia:

microk8s.enable nvidia

Instalamos los addons de ingress y storage:

microk8s enable ingress
microk8s enable hostpath-storage

Espera a que se levanten los pods del namespace gpu-operator-resources se levanten.

Ollama

Instalamos ollama:

echo """
ollama:
  gpu:
    enabled: true
    type: nvidia
    number: 1
# This does not work because a bug
#  models:
#  - llama:7b
# This is necessary if using kubernetes 1.28
#runtimeClassName: "nvidia"
ingress:
  enabled: true
  hosts:
  - host: ollama.127-0-0-1.nip.io
    paths:
      - path: /
        pathType: Prefix
persistentVolume:
  enabled: true
""" > values.yaml
helm upgrade --install \
  ollama \
  --repo https://otwld.github.io/ollama-helm/ \
  --namespace ollama \
  --create-namespace \
  --wait \
  --values values.yaml \
  ollama
rm values.yaml

Espera a que se levante el pod del namespace ollama.

Configuramos el cliente de ollama

curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl stop ollama
sudo systemctl disable ollama
export OLLAMA_HOST=http://ollama.127-0-0-1.nip.io

Si solo vas a usar ollama con kubernetes, como es mi caso, puedes agregar esa última línea a ~/.bashrc.

Nos bajamos un modelo:

ollama pull gemma2:2b

Y lo probamos:

jmferrerm@viper:~$ echo "hola" | ollama run gemma2:2b
Hola! 

¿Cómo puedo ayudarte hoy? 


jmferrerm@viper:~$ echo "Cuenta del 1 al 5 y dame la salida en una lista en un json con clave 'numeros'" | ollama run gemma2:2b
```json
{
  "numeros": [1, 2, 3, 4, 5]
}
``` 

Ya tenemos algo que habla y nos puede valer para hacer un api.

openwebui

openwebui nace como un front para ollama pero ahora es mucho más. Es una plataforma que permite usar y gestionar modelos, crear imágenes con stable diffusion, pipelines, ... viendo su evolución me parece una pasada.

Instalación:

echo """
ollama:
  enabled: false
ollamaUrls:
- http://ollama:11434
ingress:
  enabled: true
  host: open-webui.127-0-0-1.nip.io
  tls: true
extraEnvVars:
  - name: ENABLE_SIGNUP
    value: \"true\"
""" > values.yaml
helm upgrade --install open-webui \
  --repo https://helm.openwebui.com/ \
  --namespace ollama \
  --create-namespace \
  --wait \
  --values values.yaml \
  open-webui

Compatibilidad con OpenAI

Supongo que tendrás hecho todo para el api de OpenAI. Pues ollama ofrece una compatibilidad bastante buena con el api de OpenAI así que adaptar tu programa para que funcione debería ser sencillo.

Caso de uso

Hay empresas que no quieren enviar sus datos fuera. Pues puedes montarles un PC en una caja con ollama, tu aplicación, una 4090 de 24GB y ya tienes un producto.

En mi caso es que me revienta tener que enviar mis datos fuera.