
Ollama, començant amb la IA local
Des de fa uns anys estava trastejant amb una IA local i open source; i volia compartir una mica amb vosaltres en una sèrie de posts algunes de les seves possibilitats en el nostre dia a dia. Però en aquest primer document veurem com podem muntar-lo i unes nocions bàsiques de les seves possibilitats.
El primer, si us sembla us conte per a què l'utilitzo actualment per si us pot servir d'idea; per ara, exclusivament per generar text, pot ser pobre, però és un món molt ampli. Que abasta des de la recepció de qualsevol sistema de notificació o alertes, et fa més humana l'alerta o et pot suggerir per on començar la seva resolució. Per enviar mails periòdics, mails que mana la meva organització diaris, mensuals… doncs els dona un altre toc, les alimenta amb certes dades i les fa molt reals. També per al sistema domòtic, em permet mantenir converses amb la Llar, m'alerta, usant la veu, diferents frases…
Per ara, el que s' ha dit, per generar text; però les possibilitats són moltes, com pugui ser la connexió a bases de dades i que ens permeti fer consultes amb un llenguatge natural. O la possibilitat d'entaular converses i preguntes referents a un document que li hàgim enviat a la IA, o una imatge i que ens descrigui què veu… Al llarg del document aniré posant algun exemple senzill perquè es faci alguna cosa amena.
El segon, bé, com s'anomena això… com us imaginareu hi ha moltes opcions i possibilitats, jo vaig parlar de Ollama (Open-source Library for AI Models and Applications). Ollama ens permetrà usar LLM (Large language model), això és, models de llengua entrenats per a la IA, podran ser de codi obert o de pagament, podran ser 100% offline o no, al gust. Òbviament i depenent el LLM que usem necessitarem més o menys potència, això és, tenir una GPU perquè les respostes siguin immediates. Podrem fer servir l'API d'Ollama per fer-li preguntes de manera remota amb altres sistemes, molt molt potent. I us recomano Open WebUI com a interfície GUI per a Ollama, així amb el nostre navegador tindrem la interfície que esperes per poder treballar amb la teva IA còmodament.
El que s'ha dit, necessitarem una GPU per tenir el millor rendiment possible, dependrà del LLM que usem i els GB que requereixi cada model, d' aquesta manera les respostes seran immediates. Pel que fa al maquinari compatible és força extens (NVIDIA, AMD, Apple M1…), us deixo aquí el seu llistat.
L'article el vaig separar en:
- Instal·lació d'Ollama i Open WebUI ràpida en un Windows, Mac o Linux
- Instal·lació d'Ollama i Open WebUI en una MV Linux a Proxmox amb Docker
- Accés per Open Web UI i primers passos
- Reconeixement d' imatges
- Interactuant amb documents
- Diversos
Instal·lació d'Ollama i Open WebUI ràpida en un Windows, Mac o Linux
Si el que pretens és provar-ho, ja i ràpid, aquesta és l'opció, ja que podràs instal·lar Ollama al teu Linux, Mac o Windows, per si la vols córrer en local, amb el teu GPU. Anirem a la web de descàrregues d'Ollama, seleccionarem el nostre SO i ens ho descarreguem, Next, Next i Instal·lat.
A Linux ens el baixarem i instal·larem de la següent manera:
curl -fsSL https://ollama.com/install.sh | sh >>> Downloading ollama.... ######################################################################## 100,0%##O#- # >>> Installing ollama to /usr/local/bin... >>> Creating ollama user... >>> Adding ollama user to render group... >>> Adding ollama user to video group..... >>> Adding current user to ollama group... >>> Creating ollama systemd service... >>> Enabling and starting ollama service..... Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service. >>> NVIDIA GPU installed.
I podrem directament si volem des de shell baixar-nos un LLM i provar-ho:
ollama run mistral pulling manifest pulling e8a35b5937a5... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏ 4.1 GB tirant 43070e2d4e53... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏ 11 KB tirant e6836092461f... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏ 42 B tirant ed11eda7790d... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏ 30 B tirant f9b1e3196ecf... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏ 483 B verifying sha256 digest writing manifest removing any unused layers success >>> hola Hola! That means "hello" in Spanish.
Si volem que respongui a consultes API haurem d'editar el fitxer del servei 'nano /etc/systemd/system/ollama.service ‘ afegint:
Environment ="OLLAMA_HOST = 0.0.0.0:11434"
I recarreguem el servei:
sudo systemctl daemon-reload sudo systemctl restart ollama
I si volem tenir la GUI per gestionar la nostra IA des del navegador haurem de muntar Open WebUI, el més ràpid i còmode en un contenidor de Docker:
git clone https://github.com/open-webui/open-webui.git cd open-webui/ sudo docker compose up -d
I ja podrem obrir el navegador atacant la IP de la màquina al port 3000 (per defecte).
Instal·lació d'Ollama i Open WebUI en una MV Linux a Proxmox amb Docker
I aquesta part us conte el perquè… La meva idea és tenir una màquina per a IA centralitzada, una màquina a la qual diferents sistemes la puguin apuntar per fer-li diferents consultes, per a això, ha de ser una màquina virtual (pel tema dels avantatges, alta disponibilitat, backup, snapshots…), una MV a la qual li fem passthrough de la targeta gràfica i tingui la GPU per a ella. Per a això farem servir Proxmox, (un dia parlem del suïcidi de VMware) i la MV serà un Ubuntu Server 24.04. I ja que estem, en aquesta MV correrà Ollama i Open WebUI en contenidors Docker.
Us deixo els passos que seguiu per fer passthrough de la targeta gràfica a Proxmox, no sé si són els més correctes, però funciona perfectament.
Després d'instal·lar Proxmox 8.2, configurar-lo mínimament, haver-li executat els Proxmox VE Post Install dels Proxmox VE Helper-Scripts, vam dir-li a Proxmox que no usi aquesta Gràfica PCIe, comencem editant GRUB amb 'nano /etc/default/grub’ i modifiquem la següent línia:
#GRUB_CMDLINE_LINUX_DEFAULT ="quiet" GRUB_CMDLINE_LINUX_DEFAULT ="quiet intel_iommu = on iommu = pt vfio_iommu_type1 initcall_blacklist = sysfb_init" INTEL --> GRUB_CMDLINE_LINUX_DEFAULT ="quiet intel_iommu = on" AMD --> GRUB_CMDLINE_LINUX_DEFAULT ="quiet amd_iommu = on"
I executem
update-grub
Afegim els següents mòduls amb 'nano /etc/modules':
vfio vfio_iommu_type1 vfio_pci vfio_virqfd
Bloquegem els drivers amb 'nano /etc/modprobe.d/blacklist.conf':
blacklist nouveau blacklist nvidia blacklist nvidia* blacklist radeon
Apuntem els IDs amb: 'spci -n -s 01:00’, com podreu veure, si hi ha algun curiós, en el meu cas és una NVIDIA RTX 3060 12GB connectada al PCIe 1.
01:00.0 0300: 10de:2504 (rev a1) 01:00.1 0403: 10de:228e (rev a1)
Editem 'nano /etc/modprobe.d/vfio.conf’
options kvm ignore_msrs = 1x options vfio-pci ids = 10de:2504,10de:228e disable_vga = 1
Editem 'nano /etc/modprobe.d/kvm.conf’
options kvm ignore_msrs = 1
I finalment editem 'nano /etc/modprobe.d/iommu_unsafe_interrupts.conf’
options vfio_iommu_type1 allow_unsafe_interrupts = 1"
Ja us dic que segurament algun pas em sobre per al passthrough de la targeta gràfica a Proxmox, però després de reiniciar el host veureu com es pot perfectament agregar la GPU a una MV.
El següent pas, serà crear la MV a Proxmox, us deixo algunes coses que teniu en compte; a la pestanya 'System’ haurem d'indicar 'q35’ com a tipus de màquina, i en les opcions de BIOS escollir 'OVMF (UEFI)’,
A la pestanya de 'Memory’ haurem de desmarcar 'Ballooning Device’
En les opcions de la CPU, editant els processadors, en el Tipus, hem de triar almenys x86-64-v3.
Un cop creada la MV ja podrem afegir-la un dispositiu PCI, editem el maquinari de la MV i “Add” > “PCI Device”. Marquem All Functions, ROM-bar, Primary GPU i PCI-Express.
Òbviament en aquesta targeta gràfica connectarem un monitor per realitzar la instal·lació del SO (Ubuntu Server 24.04) i veure-la en pantalla. Haurem de fer també passthrough d'un teclat/rató USB per fer la instal·lació.
A continuació podrem instal·lar el SO a la MV, haurem de tenir en compte d'instal·lar els drivers, a Ubuntu Desktop crec que s'instal·len durant la instal·lació i al Server també marcant un 'tick', si no, de tota manera podrem instal·lar-los:
sudo ubuntu-drivers install sudo apt-get update sudo apt-get upgrade sudo reboot
Després de reiniciar la MV vemos si ha carregat correctament amb 'cat /proc/driver/nvidia/version’
Versió NVRM: Mòdul del nucli NVIDIA UNIX x86_64 535.171.04 Dimarts de març 19 20:30:00 UTC 2024 Versió GCC:
Continuaríamos con la instalación de Docker (doc oficial) en la MV Ubuntu:
sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/clauers sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "Deb [arch=$(dpkg --arquitectura-de-impressió) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /llançament etc/os && echo "$VERSION_CODENAME") estable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Hem d'instal·lar ara el NVIDIA Container Toolkit (doc oficial) y lo habilitamos para Docker:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#Deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt update sudo apt -y install nvidia-container-toolkit sudo systemctl restart docker sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker
I ja és hora de desplegar els contenedors d'Ollama y Open WebUI, per a això:
git clone https://github.com/open-webui/open-webui.git cd open-webui/
I les afegim aquests canvis al contenedor d'Ollama, perquè pugui fer servir la gràfica i ens obri el port per a les APIs (nano docker-compose.yaml):
runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES = all ports: - 11434:11434
I finalment descarreguem i arrenquem els contenidors:
sudo docker compose up -d
I ja podrem obrir el navegador atacant la IP de la màquina virtual, al port 3000tcp (per defecte).
Accés per Open Web UI i primers passos
La primera vegada que accedim a Open WebUI podrem crear-nos un compte en polsar en “Inscriure' s”, crearem un compte simplement introduint el nostre nom, email i una contrasenya, posem en “Crear un compte”.
I ja des d'aquí serà des d'on puguem interactuar, com veiem podem crear nous Xats i consultar-li el que necessitem,
El primer i més important serà descarregar-nos els models de llenguatge de gran mida (LLM), des de 'Configuració’ > 'Models’ podrem extreure'ls directament des de Ollama.com escrivim per exemple mistral:7b, encara que per suposat us recomanaré que visiteu els top LLM més usats, n'hi haurà prou amb escriure el model que ens interessi i polsarem en la icona de descàrrega. Us recomano (a dia d'avui) crida3, és una autentica passada.
Esperem mentre es descarrega… i per suposat que podrem baixar tants com vulguem.
I en crear ja un Nou Xat podrem escollir qualsevol model descarregat per començar a interactuar.
I res, comencem a trastejar, li podem llançar qualsevol pregunta….
Reconeixement d' imatges
Si per exemple fem servir el LLM de Llama2 podrem en una conversa o per API enviar-li una imatge i demanar-li que ens la descrigui, un exemple impressionant amb una retallada de Grafana… No us dono més pistes…
Interactuant amb documents
Per veure un altre exemple ràpid de les seves possibilitats… Des de 'Documents’ podrem pujar qualsevol document per després mantenir converses sobre el seu contingut. Es pot pujar un llibre i preguntar-li coses o consells, vagi, depèn del que vagi el llibre… O aquest mer exemple que puja un document tècnic d'una migració de Directori Actiu, y…
I després al xat podrem consultar-li sobre algun document específic teclejant la # i seleccionant el tag que li hàgim posat al doc. Impressionant…
Diversos
I bo per anar finalitzant el document, veurem a futur cosetes, té molt molt bona pinta, no només i això que hem vist, si no totes les seves possibilitats amb l'API per exemple i poder integrar qualsevol sistema amb la nostra IA. Una IA segura, local, gratuïta, Ollama ha vingut per quedar-se!
En futurs posts, gràcies a aquesta API podrem integrar les notificacions de Centreon, d' Elasticsearch, de la nostra llar intel·ligent amb Home Assistant, i sí trucar-la per telèfon i fer-li preguntes, controlar qualsevol dispositiu de casa d'una manera intuïtiva, rebre alertes molt curioses i un llarg etcètera…
Si volem per exemple amb curl tirar-li una consulta d'exemple:
curl http://localhost:11434/api/generate -d '{ "model": "mistral:7b", "prompt": "Coneixes l'Athletic de Bilbao?", "stream": false }' {"model":"mistral:7b","created_at":"2024-03-29T12:38:07.663941281Z","response":" Sí, conec l'Athletic Club de Bilbao, és un club de futbol professional espanyol amb seu a la ciutat de Bilbao, País Basc. Va ser fundat el 14 d' octubre de 1894 i juga actualment a LaLiga, la primera divisió espanyola de futbol. És conegut pel seu estil de joc basat en la seva filosofia, que prioritza el desenvolupament de jugadors d' ascens des de les categories inferiors del club. El seu estadi és el San Mamés."
O podent posar-li paràmetres per triar el model, la temperatura perquè al·lucini més o menys, longituds… veurem més exemples:
curl http://XXX.XXX.XXX.XXX:11434/api/generate -d '{ "model": "mistral:7b", "prompt": "Coneixes l'Athletic de Bilbao?", "stream": false, "temperature": 0.3, "max_length": 80}'
Bo, no m'enrotllo més, per fer-nos una idea de les possibilitats crec que ens val 🙂 Anirem veient més cosetes i curiosejant. I la veritat que algunes coses les tinc que ometre perquè les utilitzo en el meu negoci i són valors diferencials que moltes vegades ja sabeu el que passa amb els proveïdors rivals…
Una abraçada i desitjar-vos molt bona setmana!