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.