Ollama, lekuan IA-rekin hasiz

Hilabete batzuk daramatzat tokiko eta open source IA batekin esperimentatzen; eta zuenkin partekatu nahi nuen nirea eguneko hainbat aukera batzuk post serie baten bidez. Baina lehen dokumentu honetan ikusiko dugu nola muntatu daitekeen eta bere aukeren oinarrizko kontzeptuak.

 

Lo primero, Badirudi hala, kontatuko dizuet nola erabiltzen dudan gaur egun, ideia bat eman diezazuen; une honetan, testua sortzeko bakarrik, apenak izan daitezke, baina oso mundu zabal bat da. Notifikazio edo alerta sistema edozein jasotzeari dagokionez, alerta giza izaera gehiago ematen dio edo nola konponbidea hasi proposa diezazuke. Mezu periodikoak bidaltzeko, nire erakundeak bidaltzen dituen mezuak egunekoak, hilekoak… beste ukitu bat ematen die, datu jakin batzuekin elikatzen ditu eta oso errealak bihurtzen ditu. Etxebizitza automatizatzeko sistema baterako ere, Etxearekin elkarrizketak egiteko aukera ematen dit, alertatzen nau, ahotsa erabiliz, esaldi desberdinak…

Une honetan, esandakoa, testua sortzeko; baina aukerak ugariak dira, datu-baseetara konektatzeko eta hizkuntza natural batean kontsultak egiteko aukera izan dezakeena. edo AIari bidali diogun dokumentu bati buruzko elkarrizketak eta galderak egitea, edo irudi bat eta ikusten duena deskribatzeko… Dokumentuaren bidez adibide erraz batzuk jarriko ditut, modu atseginean egiteko.

 

 

Bigarrena, ongi, nola deitzen da hau… imajina dezakezuen bezala, aukera eta posibilitate ugari daude, ni honi buruz hitz egingo dizuet Ollama (AI eredu eta aplikazioentzako iturburu irekiko liburutegia). Ollamak LLM erabiltzea ahalbidetuko digu (Hizkuntza-eredu handia), hau da, IA-rako entrenatutako hizkuntza-ereduak, kode irekikoak edo ordainpekoak izan daitezke, izan daitezke 100% lineaz kanpo edo ez, al gusto. Jakina, eta erabiliko dugun LLMaren arabera, potentzia gehiago edo gutxiago beharko dugu, hau da, GPU bat izatea, erantzunak berehalakoak izan daitezen. Ollamaren APIa erabil dezakegu galderak urrutitik egitea beste sistemekin, oso, oso indartsua. Eta gomendatzen dizuet Open WebUI Ollamarentzat GUI interfaz bezala, horrela gure nabigatzailean izango dugu nahi duzun interfazea, zure IA-rekin eroso lan egiteko.

 

Esan dut, GPU bat beharko dugu ahalik eta errendimendu onena izateko, erabiliko dugun LLMaren eta modelo bakoitzak eskatzen dituen GBen arabera, modu honetan, erantzunak berehalakoak izango dira. En cuanto al hardware compatible es bastante extenso (NVIDIA, AMD, Apple M1…), os dejo aquí su listado.

 

El artículo lo voy a separar en:

 

Instalación de Ollama y Open WebUI rápida en un Windows, Mac o Linux

Si lo que pretendes es probarlo, ya y rápido, esta es la opción, ya que podrás instalar Ollama en tu Linux, Mac o Windows, por si la quieres correr en local, con tu GPU. Iremos a la web de descargas de Ollama, seleccionaremos nuestro SO y nos lo descargamos, Next, Next e Instalado.

En Linux nos lo bajaremos e instalaremos de la siguiente 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.

 

Y podremos directamente si queremos desde shell bajarnos un LLM y probarlo:

ollama run mistral
pulling manifest
pulling e8a35b5937a5... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏ 4.1 GB
pulling 43070e2d4e53... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏  11 KB
pulling e6836092461f... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏   42 B
pulling ed11eda7790d... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏   30 B
pulling f9b1e3196ecf... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████▏  483 B
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> hola
 Hola! That means "hello" in Spanish.

 

Si queremos que responda a consultas API deberemos editar el fichero del servicio 'nano /etc/systemd/system/ollama.service ‘ añadiendo:

Environment="OLLAMA_HOST=0.0.0.0:11434"

 

Y recargamos el servicio:

sudo systemctl daemon-reload
sudo systemctl restart ollama

 

Y si queremos tener la GUI para gestionar nuestra IA desde el navegador deberemos montar Open WebUI, lo más rápido y cómodo en un contenedor de Docker:

git clone https://github.com/open-webui/open-webui.git
cd open-webui/
sudo docker compose up -d

 

Y ya podremos abrir el navegador atacando a la IP de la máquina al puerto 3000tcp (lehenetsitako).

 

 

 

Instalación de Ollama y Open WebUI en una MV Linux en Proxmox con Docker

Y esta parte os cuento el porqué… Mi idea es tener una máquina para IA centralizada, una máquina a la que distintos sistemas la puedan apuntar para hacerle distintas consultas, horretarako, debe ser una máquina virtual (por el tema de las ventajas, alta disponibilidad, backup, snapshots…), una MV a la que le hagamos passthrough de la tarjeta gráfica y tenga la GPU para ella. Para ello usaremos Proxmox, (Egun batean VMware-ren suizidioaz hitz egin genuen) eta MV izango da Ubuntu Server bat 24.04. Eta hemen gaudela, MV horretan Ollama eta Open WebUI Docker kontainerretan exekutatuko dira.

Hemen utziko dizkizut Proxmox-en grafiko-txartela passthrough egiteko jarraitu nituen pausoak, Ez dakit zuzenak diren ala ez, baina primeran funtzionatzen du.

Proxmox instalatu ondoren 8.2, gutxi gorabehera konfiguratu ondoren, Proxmox VE Helper-Scripts-en Proxmox VE Post Install exekutatu ondoren, Proxmox-i esango diogu PCIe grafiko hori ez erabili, comenzamos editando GRUB con 'nano /etc/default/grub’ y modificamos la siguiente línea:

#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"

 

Y ejecutamos

update-grub

 

Añadimos los siguientes módulos con 'nano /etc/modules':

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

 

Bloqueamos los drivers con 'nano /etc/modprobe.d/blacklist.conf':

blacklist nouveau
blacklist nvidia
blacklist nvidia*
blacklist radeon

 

Apuntamos los IDs con: 'spci -n -s 01:00’, como podréis ver, si hay algún curioso, en mi caso es una NVIDIA RTX 3060 12GB conectada al PCIe 1.

01:00.0 0300: 10de:2504 (rev a1)
01:00.1 0403: 10de:228e (rev a1)

 

Editamos 'nano /etc/modprobe.d/vfio.conf’

options kvm ignore_msrs=1x
options vfio-pci ids=10de:2504,10de:228e disable_vga=1

 

Editamos 'nano /etc/modprobe.d/kvm.conf’

options kvm ignore_msrs=1

 

Y finally editamos 'nano /etc/modprobe.d/iommu_unsafe_interrupts.conf’

options vfio_iommu_type1 allow_unsafe_interrupts=1"

 

Ya os digo que seguramente algún paso me sobre para el passthrough de la tarjeta gráfica en Proxmox, pero tras reiniciar el host veréis cómo se puede perfectamente agregar la GPU a una MV.

 

El siguiente paso, será crear la MV en Proxmox, os dejo algunas cosas que tuve en cuenta; en la pestaña 'System’ deberemos indicar 'q35’ como tipo de máquina, y en las opciones de BIOS escoger 'OVMF (UEFI)’,

 

En la pestaña de 'Memory’ deberemos desmarcar 'Ballooning Device’

 

En las opciones de la CPU, editando los procesadores, en el Tipo, debemos elegir al menos x86-64-v3.

 

 

Una vez creada la MV ya podremos añadirla un dispositivo PCI, editamos el hardware de la MV y “Gehitu” > “PCI Device”. Marcamos All Functions, ROM-bar, Primary GPU y PCI-Express.
Obviamente en esa tarjeta gráfica conectaremos un monitor para realizar la instalación del SO (Ubuntu Server 24.04) y verla en pantalla. Tendremos que hacer también passthrough de un teclado/ratón USB para hacer la instalación.

 

A continuación podremos instalar el SO en la MV, deberemos tener en cuenta de instalar los drivers, en Ubuntu Desktop creo que se instalan durante la instalación y en el Server también marcando un 'tick', baina ez badugu, de todas formas podremos instalarlos:

sudo ubuntu-drivers install
sudo apt-get update
sudo apt-get upgrade
sudo reboot

 

Tras reiniciar la MV vemos si ha cargado correctamente con 'cat /proc/driver/nvidia/version’

NVRM version: NVIDIA UNIX x86_64 Kernel Module 535.171.04 Tue Mar 19 20:30:00 UTC 2024
GCC version:

 

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/keyrings
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 --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  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

 

Debemos instalar ahora 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

 

Y ya es hora de desplegar los contenedores de Ollama y Open WebUI, horretarako:

git clone https://github.com/open-webui/open-webui.git
cd open-webui/

 

Y le añadimos estos cambios al contenedor de Ollama, para que pueda usar la gráfica y nos abra el puerto para las APIs (nano docker-compose.yaml):

runtime: nvidia
environment:
  - NVIDIA_VISIBLE_DEVICES=all
ports:
  - 11434:11434

 

Y finalmente descargamos y arrancamos los contenedores:

sudo docker compose up -d

 

Y ya podremos abrir el navegador atacando a la IP de la máquina virtual, al puerto 3000tcp (lehenetsitako).

 

Acceso por Open Web UI y primeros pasos

La primera vez que accedamos a Open WebUI podremos crearnos una cuenta al pulsar en “Inscribirse”, crearemos una cuenta simplemente introduciendo nuestro nombre, email y una contraseña, sustatu “Crear una cuenta”.

 

Y ya desde aquí será desde donde podamos interactuar, como vemos podemos crear nuevos Chats y consultarle lo que necesitemos, 

 

Lo primero y más importante será descargarnos los modelos de lenguaje de gran tamaño (LLM), desde 'Configuración’ > 'Modelos’ podremos extraerlos directly desde Ollama.com escribimos por ejemplo mistral:7b, aunque por supuesto os recomendaré que visitéis los top LLM más usados, bastará con escribir el modelo que nos interese y pulsaremos en el icono de descarga. Os recomiendo (a día de hoy) llama3, es una autentica pasada.

 

Esperamos mientras se descarga… y por supuesto que podremos bajar tantos como queramos.

 

Y al crear ya un Nuevo Chat podremos escoger cualquier modelo descargado para empezar a interactuar.

 

Eta ezer, empezamos a trastear, le podemos lanzar cualquier pregunta….

 

Reconocimiento de imágenes

Si por ejemplo usamos el LLM de Llama2 podremos en una conversación o por API enviarle una imagen y solicitarle que nos la describa, un ejemplo impresionante con un recorte de Grafana… No os doy más pistas…

Interactuando con documentos

Por ver otro ejemplo rápido de sus posibilidades… Desde 'Documentos’ edozein dokumentu igo ahal izango dugu gero bere edukiaz hitz egiteko. Liburu bat igo daiteke eta galderak edo aholkuak eskatu, vaya, Liburuak zer gai jorratzen duen kontatzen du… Adibide hau, dokumentu tekniko bat igo dut Active Directory migratzeaz, eta…

Eta gero txatean kontsulta dezakegu dokumentu zehatz baten berri emateko, idatzita # eta dokumentuari jarri diogun etiketaren bidez hautatuta. Izugarria…

Anitz

Eta ondo, dokumentua amaitzeko, Etorkizunean gauza batzuk ikusi ahal izango ditugu, Oso itxura ona du, Ikusi duguna bakarrik ez, baina APIaren bidezko aukera guztiak, adibidez, eta edozein sistema gure AIarekin integratzeko. Seguru den AI bat, tokikoa, doakoa, Ollama etorri da geratzeko!

Etorkizuneko sarreretan, API honi esker, Centreoneko jakinarazpenak integratu ahal izango ditugu, de Elasticsearch, de nuestro hogar inteligente con Home Assistant, y sí llamarla por teléfono y hacerle preguntas, controlar cualquier dispositivo de casa de una manera intuitiva, recibir alertas muy curiosas y un largo etcétera…

Si queremos por ejemplo con curl tirarle una consulta de ejemplo:

curl http://localhost:11434/api/generate -d '{ "model": "mistral:7b", "prompt": "¿Conoces al Athletic de Bilbao?", "stream": false }'
    {"model":"mistral:7b","created_at":"2024-03-29T12:38:07.663941281Z","response":" Bai, conozco al Athletic Club de Bilbao, es un club de fútbol profesional español con sede en la ciudad de Bilbao, País Vasco. Fue fundado el 14 de octubre de 1894 y juega actualmente en LaLiga, la primera división española de fútbol. Es conocido por su estilo de juego basado en su filosofía, que prioriza el desarrollo de jugadores de ascenso desde las categorías inferiores del club. Bere estadioa San Mamés da."

Edo parametroak sartu ahal izateko modeloa aukeratzeko., Tenperatura, gehiago edo gutxiago harritzeko., Luzerak.… Adibide gehiago ikusiko ditugu.:

curl http://XXX.XXX.XXX.XXX.:11434/api/generate -d '{ "model": "mistral:7b", "prompt": "¿Conoces al Athletic de Bilbao?", "stream": false, "tenperatura.": 0.3, "gehieneko_luzera.": 80}'

Onena, Ez naiz gehiago luzatzen., Aukerak ulertzeko ideia bat izateko nahikoa dela uste dut 🙂 Gehiago ikusiko dugu eta liluratuko gara.. Eta egia esan, gauza batzuk ez ditut aipatuko, nire negozioan erabiltzen ditudalako eta askotan balio diferentzialak direlako, badakizue zer gertatzen den lehiakide hornitzaileekin.…

Muxu bat eta asteburu ona opa dizuet.!

Izenburuko mezuak

Egilea

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, ez zalantzarik izan nirekin harremanetan jartzeko, ahal duzun guztietan laguntzen saiatuko naiz, partekatu ahal dudan guztietan ;) . Dokumentuez gozatu!!!