Ir al contenido

Introducción a la inferencia con IA: guía práctica en local

29 de septiembre de 2025 por
Introducción a la inferencia con IA: guía práctica en local
Ilimit Comunicacions S.L., Jordi Oliveras

En éste artículo haremos una breve incursión al ámbito de la Inteligencia Artificial (IA) y su uso en inferencia con algunas aplicaciones.

Índice de contenidos

  • • Introducción
    • Definición de Inteligencia Artificial (IA)​
    • Tipos de aplicaciones de la IA
    • Motivos para la ejecución de IA en local (Edge AI)
    • Requerimientos para la ejecución de inferencia en IA en local
  • Hands on
    • LM Studio
      • Configuración básica y prueba
      • Configuración en modo headless
    • Ollama
      • Prueba con Linux
      • Prueba con Windows 
    • Otras herramientas

Introduc​ción

Definición de Inteligencia Artificial (IA)

Antes de nada, ¿qué es la inteligencia artificial (IA)? Es el área que busca desarrollar sistemas capaces de realizar tareas que normalmente requieren inteligencia humana, como razonar, aprender, reconocer patrones, comprender lenguaje o tomar decisiones. En términos más técnicos: es la capacidad de un sistema computacional de procesar datos, aprender de ellos y generar predicciones, respuestas o acciones basadas en ese aprendizaje.

En informática, la IA funciona en dos fases principales:

  1. Entrenamiento: El modelo aprende a partir de datos históricos. Ejemplo: un modelo de correo electrónico aprende qué mensajes son spam y cuáles no.
  2. Inferencia: Es la fase en la que el modelo ya entrenado se aplica sobre nuevos datos para generar una salida. Ejemplo: al llegar un correo nuevo, la IA hace inferencia para clasificarlo como spam o no.

En este sentido, la IA es el conjunto de métodos y técnicas que permiten crear modelos inteligentes. La inferencia es el mecanismo mediante el cual esos modelos "razonan" sobre datos nuevos, aplicando lo aprendido. En informática, la IA podría definirse como el uso de algoritmos y modelos capaces de aprender de datos y aplicar inferencia para resolver problemas, automatizar procesos y tomar decisiones en contextos nuevos.

Los modelos podrían definirse como programas informáticos que se han entrenado con un gran conjunto de datos para aprender lo que se pretenda (todo, si hablamos de modelos generalistas). ¿Cómo funcionan? Imagina que quieres enseñarle a una computadora a reconocer gatos en fotos. En lugar de escribir reglas específicas (como "un gato tiene orejas puntiagudas, bigotes, etc."), le muestras miles de fotos de gatos y miles de fotos que no son de gatos. El modelo de IA, a través de algoritmos, analiza los datos y encuentra patrones y relaciones que le permiten diferenciar entre un gato y otros objetos. Una vez que el modelo ha "aprendido" (es decir, ha sido entrenado), puedes darle una nueva foto y el modelo, basándose en los patrones que identificó, predecirá si hay un gato en la imagen o no.

Tipos de aplicaciones de la IA

La inteligencia artificial (IA) se aplica de muchas maneras. A continuación, los principales tipos de uso:

  • Procesamiento de lenguaje natural (PLN): Chatbots, asistentes virtuales, traducción automática, análisis de sentimientos, generación de texto.
    • Ejemplo: ChatGPT, traductores de Google, asistentes como Alexa o Siri.
  • Visión por computadora: Reconocimiento de imágenes, detección de objetos, análisis de video, biometría (huellas, rostros).
    • Ejemplo: sistemas de cámaras inteligentes, filtros de fotos, seguridad con reconocimiento facial.
  • Aprendizaje automático (Machine Learning, ML): Predicciones y clasificación a partir de datos (spam vs. no spam, diagnósticos, predicción de precios).
    • Ejemplo: sistemas de recomendación (Netflix, YouTube, Amazon).
  • Aprendizaje profundo (Deep Learning): Redes neuronales para tareas complejas: conducción autónoma, generación de imágenes, voz sintética.
    • Ejemplo: autos Tesla, DALL·E, herramientas de clonación de voz.
  • Automatización y agentes inteligentes: Robótica, procesos automáticos en servidores, optimización de redes.
    • Ejemplo: RPA (Robotic Process Automation) en empresas, bots de trading.
  • Ciberseguridad con IA: Detección de anomalías, prevención de fraudes, análisis de malware.
    • Ejemplo: antivirus con IA, detección de intrusos en sistemas.
  • Sistemas expertos y soporte en decisiones: Programas que simulan el razonamiento humano en áreas específicas.
    • Ejemplo: software médico para diagnósticos, asistentes de programación.
  • Generación de contenido: Texto, imágenes, música, código, videos.
    • Ejemplo: generación automática de noticias, diseño de videojuegos, IA creativa.

La inferencia por IA es un proceso interno que usan todos los sistemas de IA basados en modelos entrenados que consta de las 2 fases anteriormente comentadas: entrenamiento (entrada o aprendizaje) y inferencia (salida o predicción/respuesta).

Motivos para la ejecución de IA en local (Edge AI)

Todos conocemos la IA por el servicio que ofrece ChatGPT, y que otros fueron siguiendo. Así que si tenemos la IA en el Cloud (ChatGPTGemini, Claude...), ¿qué sentido o beneficio tiene hacerlo en local?

  • Por privacidad y seguridad de los datos, ya que la información no se envía a servidores externos.
  • Por costes:
    • Menor costo a largo plazo (contando con la amortización del hardware que se adquiera).
    • Costos operativos precedibles (al no basarse en un modelo pay-per-use).
  • Por límites. Relacionado con el punto previo, las IA establecen unos límites en sus modos gratuitos.
  • Por permitir la operación sin conexión a Internet.
  • Aunque en menor medida, por ofrecer una menor latencia (si bien esto puede ser una minucia dependiendo de tiempo de procesamiento de la IA local usada).

De todos modos, no siempre es buena idea por el coste de computación, de inversión en hardware y de mantenimiento que puede suponer, por el poco rendimiento o valor aportado, etc (debería realizarse una evaluación según el caso).

Requerimientos para la ejecución de inferencia en IA en local

Para la inferencia de IA, las GPUs (Unidades de Procesamiento Gráfico o más comúnmente, tarjetas gráficas) son cruciales porque su arquitectura paralela permite manejar de manera eficiente las grandes cantidades de cálculos matriciales que requieren los modelos de aprendizaje automático. Aunque la inferencia es menos exigente que el entrenamiento, una GPU optimizada para esta tarea reduce la latencia y mejora el rendimiento.

Al seleccionar una GPU para inferencia, se deben considerar éstos factores principales:

  • Memoria de video (VRAM): La VRAM es uno de los factores más importantes para la inferencia de modelos grandes, como los LLMs (Modelos de Lenguaje Grandes). Una VRAM suficiente permite cargar todo el modelo en la memoria de la GPU, eliminando la necesidad de recurrir a la memoria del sistema (RAM), lo que acelera drásticamente la velocidad de procesamiento y respuesta.
  • Velocidad de reloj y ancho de banda: Aunque la VRAM es vital para la capacidad, la velocidad de reloj y el ancho de banda de la memoria determinan la velocidad a la que se procesan los datos. Una GPU con un alto ancho de banda de memoria puede mover los datos necesarios para la inferencia de manera más rápida.
  • Número de cores y generación de la GPU. Como en otros ámbitos, tener una GPU con mayor número de cores y de más nueva generación, va a ser deseable en aras a obtener un mejor rendimiento.
  • Optimización del software: El soporte del fabricante para:
    • Las aplicaciones que ejecutan la inferencia (veremos algunas en los siguientes puntos).
    • Los frameworks como PyTorch y TensorFlow, así como las bibliotecas especializadas, es fundamental. NVIDIA, por ejemplo, tiene un ecosistema muy maduro con CUDA y TensorRT, lo que le da una ventaja significativa en el mercado de la IA.

La elección de una GPU para inferencia dependerá del presupuesto y el tipo de modelo que se desea ejecutar:

  1. Gama alta y profesional: Para aplicaciones de inferencia exigentes o a nivel de centro de datos.
    • GPUs de NVIDIA. Las series H100, L40S y RTX 6000 Ada están diseñadas para cargas de trabajo profesionales, alcanzando hasta los 80GB de memoria.
    • GPU de AMD: AMD también tiene su gama con la Instinct MI300X, MI325X y MI355X alcanzando hasta los 288GB con memoria de tipo HBM.
  2. Gama media y consumo: Para uso personal o para modelos de menor tamaño.
    • Serie NVIDIA GeForce RTX: 5090 (con 32GB de VRAM DDR7) y 4090 (con 24GB) son las mejores en rendimiento para uso personal, mientras que otras como la RTX 4060Ti de 16GB (gama de entrada) son muy populares para ejecutar modelos de lenguaje medianos localmente.
    • Serie Radeon RX: RX 7900 XTX (24GB VRAM DDR6 gen RDNA 3) y RX 9000 (16GB VRAM DDR6 y de más nueva generación, RDNA 4). De nueva generación y con una cantidad de VRAM más generosa/apta, también está la versión para Workstations, Radeon AI PRO R9700, con 32GB.

¿Significa esto que no puedo ejecutar inferencia IA en CPU? No, en realidad es posible, pero en general va a ser un proceso muy lento. Esto también depende del modelo de IA a ejecutar, su tamaño y su parametrización (modelos  MOE y con cuantificación), pero para simplificar, en general siempre vas a querer usar la CPU y la RAM del sistema como "fallback" para cuando la/s GPU/s (sí, puedes tener varias en un mismo host para sacarles provecho siempre que el software lo soporte) no den de sí (bà sicamente para poder seguir operando cuando estas no tengan suficiente VRAM y tengan que descargar -offloading- a RAM de sistema).

Como anteriormente ya hemos descrito los modelos, vamos a conocer algunos detalles más de los mismos. Los modelos se pueden distinguir por sus diferentes características:​

  • Su objetivo/orientación/especialización. Como verás, algunos modelos tienen etiquetas como 'instruct', 'code' o 'chat'... estas se refieren a la especialización o el proceso de entrenamiento posterior (fine-tuning) que se aplica a los modelos de lenguaje de gran escala (LLM) para que puedan realizar tareas específicas de manera más efectiva. Algunos tipos según su objetivo:
    • Modelos Base (o "Foundation Models"). Son el punto de partida. Estos modelos han sido entrenados con una cantidad masiva de datos de texto y código de Internet para aprender a predecir la siguiente palabra en una secuencia. Su objetivo principal es comprender el lenguaje y sus patrones. Por sí solos, no están optimizados para interactuar con los usuarios de manera conversacional, y sus respuestas pueden ser genéricas o confusas.
    • Modelos Instruct (de "instrucciones") són modelos base que han sido afinados (fine-tuned) para seguir instrucciones de forma precisa. Este proceso implica entrenarlos con un conjunto de datos de pares de "pregunta-respuesta" donde la respuesta es ideal. El objetivo es que el modelo no solo complete texto, sino que responda directamente a lo que se le pide. Ejemplo: A un modelo base se le pregunta "El significado de IA es...", y podría completar la frase. A un modelo instruct se le da la misma pregunta y responderá con "La IA (Inteligencia Artificial) es la simulación de procesos de inteligencia humana...", entendiendo que se le pide una definición completa.
    • Modelos Code: Son modelos base o instruct que han sido entrenados específicamente con código informático. Su objetivo es entender, generar, completar o depurar código en uno o varios lenguajes de programación. Pueden ser una subcategoría de los modelos instruct si están optimizados para seguir instrucciones como "escribe una función para...". Ejemplo: Generar un fragmento de código Python para clasificar una lista o explicar cómo funciona un algoritmo.
    • Modelos Chat: Son una evolución de los modelos instruct. Han sido optimizados específicamente para interacciones conversacionales, es decir, para mantener un diálogo de varias vueltas. A menudo se entrenan utilizando Refuerzo por Aprendizaje a partir de la Retroalimentación Humana (RLHF), donde evaluadores humanos valoran las respuestas para enseñar al modelo a ser más útil, honesto y seguro en un contexto de conversación. Ejemplo: Un modelo chat como ChatGPT está diseñado para recordar el contexto de la conversación, responder a preguntas de seguimiento y comportarse como un asistente conversacional.


  • Su tamaño. éste se mide por el número de parámetros (las variables internas que el modelo ajusta durante el entrenamiento).
    • Modelos pequeños: Tienen menos parámetros y son más rápidos, pero su rendimiento es generalmente inferior. Son ideales para aplicaciones que se ejecutan en dispositivos con recursos limitados, como teléfonos móviles (IA en el borde o "on-device AI").
    • Modelos grandes: Tienen miles de millones o incluso billones de parámetros. Ofrecen un rendimiento superior, son más versátiles y capaces de manejar tareas complejas. Sin embargo, requieren una gran cantidad de memoria y potencia de cálculo, por lo que suelen ejecutarse en centros de datos o en la nube.


  • Su cuantificación (y cuánta). La cuantificación es el proceso de reducir la precisión numérica de los parámetros de un modelo, por ejemplo, de un formato de punto flotante de 32 bits (FP32) a uno de 8 bits (INT8).
    • Modelos sin cuantificar: Usan una alta precisión (como FP32). Son más precisos, pero consumen más memoria y requieren más tiempo para la inferencia, lo que los hace menos eficientes.
    • Modelos cuantificados: Usan una precisión menor (como INT8 o incluso 4 bits). Esto reduce drásticamente el tamaño del modelo y acelera la inferencia. Aunque puede haber una ligera pérdida de precisión, a menudo es insignificante y el beneficio en velocidad y consumo de recursos es considerable, lo que permite desplegarlos en dispositivos de menor potencia.


  • Su formato. Se refiere a la estructura de archivo específica que se utiliza para almacenar los pesos y la arquitectura del modelo de una manera optimizada para un tipo de inferencia. Esto es especialmente relevante en el ecosistema de los modelos de lenguaje de gran escala (LLM) de código abierto y su uso en hardware de consumo. Los formatos más comunes para la inferencia local de LLMs, que a menudo incluyen algún tipo de cuantificación, son:
    • GGUF (GPT-Generated Unified Format). El formato GGUF (originalmente una evolución de GGML) es un formato de archivo binario diseñado específicamente para ser utilizado por llama.cpp, un motor de inferencia optimizado para CPU. Su principal ventaja es que permite cargar todo en un solo archivo (pesos, arquitectura, tokenizador, etc.), lo que simplifica su uso. Además, soporta una amplia gama de cuantificaciones (de 2 a 8 bits), lo que permite a los usuarios elegir el equilibrio entre tamaño, velocidad e impacto en el rendimiento. GGUF es muy popular porque habilita la inferencia de LLMs incluso en ordenadores sin una GPU potente. Si quieres la máxima compatibilidad y flexibilidad para usar un modelo en la CPU (o en CPU y GPU a la vez), es la opción ideal.
    • GPTQ (GPT for Quantization). El formato GPTQ es un método de cuantificación diseñado específicamente para GPU. Reduce el tamaño del modelo y acelera la inferencia de manera significativa, pero los modelos en este formato requieren una GPU para funcionar. A diferencia de GGUF, que puede usar CPU, GPTQ aprovecha las capacidades de las tarjetas gráficas para ejecutar la inferencia de manera muy eficiente.
    • Safetensors. Es una alternativa a los archivos de modelo tradicionales de PyTorch (.pt o .bin). Su principal característica es que es seguro, lo que significa que no puede ejecutar código malicioso al cargarse. Es muy utilizado como formato base para los modelos, que luego se pueden convertir a otros formatos (como GGUF) para una inferencia optimizada en distintos tipos de hardware. A diferencia de GGUF o GPTQ, safetensors no aplica por sí mismo una cuantificación. Si descargas un modelo directamente de un repositorio para su posterior procesamiento, es probable que venga en éste formato.


  • Su arquitectura. Es el "plano" del modelo, es decir, el diseño de sus capas y la forma en que se conectan. Es una característica fundamental que define la capacidad y especialidad del modelo. Se distinguen por si están basados en:
    • Transformadores: Son la arquitectura dominante en los modelos de lenguaje (LLM) y visión. Su mecanismo de atención les permite procesar secuencias de datos (como texto) de manera eficiente y comprender el contexto a largo plazo.
    • Redes neuronales convolucionales (CNN): Son muy efectivas para el análisis de imágenes, ya que sus capas están diseñadas para detectar patrones espaciales (como bordes y texturas).
    • Redes neuronales recurrentes (RNN): Solían ser la arquitectura principal para el procesamiento de secuencias, como texto, pero han sido en gran medida superadas por los transformadores.


Hands on

Vista la teoría, vamos a ponernos manos a la obra. Partimos de las siguientes premisas, que coinciden con mi caso de uso:

  • Mi preferencia siempre es Linux por encima de Windows.
  • Pero en este caso, tengo un PC de uso exclusivamente para gaming con una GPU AMD Radeon RX 9070XT.

Así que vamos a ver ejemplos en los 2 sistemas, pero con preferencia sobre el host Windows por disponer hardware preferible para la ejecución de inferencia en IA.


LM Studio

Configuración básica y prueba

La primera incursión con el tema la haremos con la herramienta LM Studio, una aplicación de escritorio que permite a los usuarios descargar, configurar y ejecutar modelos de lenguaje grandes (LLMs) localmente en tu PC, sin necesidad de una conexión a Internet o de depender de servicios en la nube.

Ventajas de ésta herramienta:

  • Es un "todo en uno", en el sentido que ejecuta inferencia en base a modelos, tiene una interfaz gráfica para interactuar y también puede trabajar en modo servicio.
  • Dispone de una interfaz gráfica, por lo que reduce la curva inicial de aprendizaje dado al facilitar centrarse en la temática: la búsqueda, descarga y uso de los modelos.
  • Permite compatibilidad con modelos de Hugging Face (una conocida plataforma abierta que permite acceder a una amplia variedad de modelos pre-entrenados).
  • También permite disponer de un servidor API local compatible con OpenAI, lo que puede resultar interesante para desarrolladores al permitir integrar los modelos locales en aplicaciones y proyectos personalizados.
  • Facilita el ajuste de parámetros de los modelos como la temperatura (p.ej. top-K y top-P para controlar la aleatoriedad y la calidad de las respuestas).
  • Soporte multiplataforma: La aplicación está disponible para los sistemas operativos más comunes: Windows, Mac y Linux (en forma de AppImage -ejecutable autocontenido- en este último caso).
  • Soporte para GPU: Van añadiendo con cierta asiduidad soporte para GPU's, incluso las integradas (iGPU).
  • A nivel de licencia, desde hace poco la podemos usar libremente sin adquirir una licencia comercial ni rellenar formularios.
  • Así pues, vamos allá. Nos bajamos e instalamos la última versión. En el primer inicio, nos pide que elijamos nuestro nivel de conocimientos sobre IA (User, Power User o Developer), así que vamos a empezar con "User":

Pantalla de selección de nivel a LM Studio con las opciones User, Power User y Developer

Esto nos sugiere que nos bajemos directamente el modelo gpt-oss20b (de ~12GB) de OpenAI (un buen modelo sin duda), aunque podemos hacer skip si no deseamos descargar ese modelo o en ese instante:

Pantalla de LM Studio con la propuesta de descarga del modelo gpt-oss-20b para ejecutar IA localmente

Ahora ya estamos en la pantalla principal de la aplicación, que se asemeja a la de ChatGPT o cualquier otra herramienta de chat con IA (Gemini, etc):

  • En el área izquierda tenemos la lista de chats/consultas que vamos a ir haciendo,.
  • A la derecha, en la parte central, la zona de chat donde tendremos las respuestas.
  • Abajo, el widget de introducción de texto (nuestras consultas) y en la parte superior, el cargador de modelos ("Select a model to load").

Si hemos bajado el modelo, podemos seleccionar las opciones y cargarlo:

Pantalla principal de LM Studio con la interfaz de chat y la opción de cargar un modelo

En la lupa de arriba a la derecha (con el tooltip "Discover") podemos buscar directamente por nombres de modelos para descargar:

Icono de búsqueda Discover a LM Studio para buscar modelos de IA

A modo de prueba, descargamos y cargamos en la herramienta un modelo pequeño (qwen2-micro-0.5b-multilingual) y le hacemos una consulta sencilla que no tarda en resolver:

Ejemplo de consulta en LM Studio con el modelo qwen2-micro-0.5b-multilingual

Si nos fijamos, y este es también muy común en otras herramientas de chat con IA, al final de la respuesta tenemos (icono del reloj) una breve información del rendimiento: tokens/s, cuántos tokens ha supuesto nuestra consulta y el time to first token (cuánto ha tardado en empezar a responder):

Estadísticas de rendimiento a LM Studio con tokens por segundo, número de tokens y tiempo hasta el primero token

Esta información nos va a ser útil para conocer en rendimiento de nuestra plataforma en cada caso (que variaran según el hardware y el software usado).

Otras aplicaciones tienen distintos indicadores, pero al final estaremos hablando todo el rato de "tokens". ¿Y qué es eso? Pues en IA, un token es la unidad básica de texto utilizada por los modelos de lenguaje para procesar información. Se ha de pensar en ellos como las "palabras" o "fragmentos de palabras" que el modelo entiende y manipula.

¿Y cómo funcionan? Los modelos de lenguaje, como los que generan texto o responden preguntas, no procesan el texto letra por letra o palabra por palabra de la forma en que lo hacemos los humanos. En su lugar, el texto de entrada se divide en estos tokens mediante un proceso llamado tokenización, que hace subdivisiones:

  • Palabras completas: A menudo, una palabra es un solo token (por ejemplo, "perro").
  • Subpalabras: Las palabras largas o poco comunes pueden dividirse en tokens más pequeños. Por ejemplo, la palabra "tokenización" podría dividirse en "token" y "ización".
  • Puntuación y símbolos: Los signos de puntuación como comas (,), puntos (.) o signos de exclamación (!) también son tokens individuales.

Cada token se convierte en un número (un ID de token) que el modelo puede procesar matemáticamente. El modelo utiliza estos números para predecir la secuencia de tokens que sigue, construyendo así una respuesta coherente. Este proceso de tokenización es crucial en la inferencia (el proceso de usar un modelo entrenado para generar una respuesta) por la eficiencia (permite a los modelos manejar gran cantidad de texto eficientemente) y contexto (permiten que tokens anteriores puedan predecir el siguiente).

Hasta aquí hemos conocido las bases de la herramienta y nos ha servido para ir introduciendo conceptos. Puedes probar a trabajar con otros modelos y decidir los que mejores te parecen para tu hardware, software y si el resultado te satisface para tus necesidades. Cabe decir que hay modelos mejores y peores, y algunos orientados a tareas más concretas (p.ej. redactar un artículo, generar código de programación, mantener una conversación de chat...).​

Esto es muy interesante, pero si tengo un PC de gaming o un servidor con una o varias GPU, ¿no puede tener un impacto en la factura elétrica? Pues todo depende de si vas a estar usando mucho la IA (porque va a hacer que el consumo se dispare cuando esté trabajando) o sólo puntualmente. Un equipo en idle no suele consumir demasiado, pero tenerlo 24x7 sí que va a hacer que nos demos cuenta en la factura. Una opción intermedia podria ser encender el equipo a demanda (p.ej. dejándolo suspendido/en estado latente, levantarlo cuando sea necesario via Wake On Lan, y instruirle a entrar de nuevo en suspensión cuando esté en desuso).


Configuración en modo headless

Si te interesa la anterior idea, a continuación puedes ver cómo configurar LM Studio para que funcione en modo headless, esté disponible por red y no sea necesario que inicies sesión en Windows.

Primero nos iremos a la Configuración general de la aplicación:

Configuración de LM Studio para activar el modo headless y habilitar el servicio LLM local

Después iremos a Settings (icono verde de la izquierda) y habilitaremos las siguientes 2 opciones):

Configuración de LM Studio mostrando la activación de CORS y Serve on Local Network en el puerto 1234

Hecho esto, podemos comprobar con netstat que el servicio está a la escucha por el puerto por defecto (1234):

Resultado del pedido netstat mostrando el puerto 1234 en estado LISTENING por LM Studio

Con esto, ya nos podemos conectar al servicio que expone LM Studio haciendo uso de algún cliente OpenAI API compatible a través de la URL a http://IP_HOST_LMSTUDIO:1234/. Por ejemplo, con Chatbox (ver último punto Otras herramientas).

Ollama

La primera incursión con el tema la haremos con la LM Studio, una aplicación de escritorio que permite a los usuarios descargar, configurar y ejecutar modelos de lenguaje grandes (LLMs) localmente en tu PC, sin necesidad de una conexión a Internet o de depender de servicios en la nube.

Ollama es otra herramienta parecida a LM Studio, pero a diferencia:

  • Es Open Source
  • Está más orientada a desarrolladores y provee interfaz gráfica de consulta (sí puede usarse via CLI o via API, compatible con la de OpenAI).

Prueba con Linux

Como nos gusta trabajar con contenedores porque agilizan el despliegue, vamos a ir con la imagen Docker de ésta aplicación.

Creamos un directorio y lanzamos ollama:

$ mkdir ollama
$ docker run -d -v ./ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Le cargamos algún modelo:

$ docker exec -it ollama ollama run --verbose gpt-oss  # Modelo https://ollama.com/library/gpt-oss
ó
$ docker exec -it ollama ollama run --verbose llama3   # Modelo https://ollama.com/library/llama3

Y le hacemos una consulta:

Ejecución de una consulta con Ollama en un contenedor Docker mostrando recomendaciones de CPU por inferencia local de IA

Habiendo comprobado su funcionamiento, podemos organizarlo mejor (para facilitar futuros despliegues) añadiéndolo en un docker-compose.yaml, y de paso le añadiremos una interfaz web para facilitar el acceso y operativa:

# docker-compose-ollama.yml
services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - 11434:11434
    volumes:
      - /home/XXX/ollama:/root/.ollama
    tty: true
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    volumes:
      - /home/XXX/open-webui:/app/backend/data
    depends_on:
      - ollama
    ports:
      - 3000:8080
    environment:
      - OLLAMA_BASE_URL: http://ollama:11434
      - WEBUI_SECRET_KEY: YYY
    # It allows the container to access services running on your host machine.
    # host.docker.internal is a special hostname that resolves to your host's internal IP address.
    # This is useful if, for example, you have another service running directly on your computer 
    # (not inside a container) that Open WebUI needs to access.
    extra_hosts:
      - host.docker.internal:host-gateway
    restart: unless-stopped

Tumbamos y eliminamos el contenedor previo con el que hicimos las pruebas, y levantamos el compose:

$ docker stop ollama
$ docker rm ollama
$ docker compose up -d

Con esto, ya nos podemos conectar con un navegador web a http://localhost:3000/ y accederemos a Openweb-UI para poder atacar a Ollama. Nos pedirá unos datos entre los cuales está la contraseña establecida en el servicio Openweb-UI:

Pantalla de inicio de sesión a Open WebUI para acceder a la interfaz web de Ollama

Y a continuación, tendremos acceso a la interfaz web de consulta:

Interfaz de Open WebUI con el modelo gpt-oss:latest cargado y opciones de consulta disponibles

¿Os resulta familiar? Veréis que se parece a ChatGPT, Gemini, LM Studio...

A modo de curiosidad, a continuación unas estadísticas de rendimiento con diferentes modelos y en diferente hardware:

# Stats
# Model: llama3
# Query: What minipc CPU would you recommend to run local AI inference?

# Intel i5-1135G7 + 16GB DDR4 3200MT/s + NVME Kioxia KBG40ZNV256G
total duration:       2m20.204321315s
load duration:        77.129285ms
prompt eval count:    23 token(s)
prompt eval duration: 1.33939865s
prompt eval rate:     17.17 tokens/s
eval count:           706 token(s)
eval duration:        2m18.787155647s
eval rate:            5.09 tokens/s

# VM with half the cores (14) of an Intel Xeon E5-2680 v4 (host cpu) + 16GB DDR4 2400 MT/s + NVME SAMSUNG MZVLB256HBHQ (virtio)
total duration:       1m16.622600166s
load duration:        106.754701ms
prompt eval count:    23 token(s)
prompt eval duration: 861.563097ms
prompt eval rate:     26.70 tokens/s
eval count:           518 token(s)
eval duration:        1m15.653366355s
eval rate:            6.85 tokens/s

# Model: gpt-oss
# Query: What minipc CPU would you recommend to run local AI inference?

# VM with half cores (14) of Intel Xeon E5-2680 v4 (host cpu) + 16GB DDR4 2400 MT/s + NVME SAMSUNG MZVLB256HBHQ (virtio)
total duration:       5m1.996240966s
load duration:        209.642746ms
prompt eval count:    80 token(s)
prompt eval duration: 1.918822419s
prompt eval rate:     41.69 tokens/s
eval count:           2275 token(s)
eval duration:        4m59.864109854s
eval rate:            7.59 tokens/s


Prueba con Windows

También hemos querido probarlo en Windows por el mismo motivo que empezamos el post en la sección de LM Studio: porque tiene "hardware dedicado" (GPU) y queremos ver si funciona.

En éste caso, mi GPU es relativamente nueva y todavia no está oficialmente soportada, pero ya hay quien ha encontrado workarounds para poder hacer uso del mismo mientras el proyecto no se pone las pilas con el tema.

Resumiendo, en este caso cabe instalar la última release del fork de Ollama para AMD (ollama-for-amdy luego reemplazar el archivo rocblas.dll y el directorio rocblas/library con los archivos de aquí (específicamente los del archivo rocm.gfx1201.for.hip.skd.6.2.4-no-optimized.7z). Si estamos en el supuesto de una GPU ya soportada, sólo cabe instalar la versión normal de Ollama:

Pantalla de descarga de Ollama con opciones por macOS, Linux y Windows destacando la versión para Windows

Hecho esto, como Ollama se ejecutará como un servicio (lo podemos ver con netstat escuchando por el puerto 11434, o bien su icono en el tray icon):

Icono de Ollama visible a la bandeja del sistema de Windows indicando que el servicio está activo

Si de paso también queremos que esté disponible para ser accesible a los hosts de nuestra red (al igual que en el ejemplo previo que hicimos con LM Studio), creamos la siguiente variable de entorno (desde Windows -> Configuration -> Editar las variables de entorno del sistema):

OLLAMA_HOST=0.0.0.0

También podemos probarlo antes via CLI para ver que realmente quede escuchando por ese puerto (piensa a situarte en el path dónde se instala para poder lanzar estos comandos):

C:\Users\XXX\AppData\Local\Programs\Ollama> set OLLAMA_HOST=0.0.0.0
C:\Users\XXX\AppData\Local\Programs\Ollama> ollama.exe serve

Y a continuación, probaremos a ejecutar un prompt en local bajando el modelo pequeño de gpt-oss via cmd:

C:\Users\XXX\AppData\Local\Programs\Ollama>ollama.exe run --verbose gpt-oss:20b

Con esto podremos interactuar por consola, hacer uso de algún cliente como el previo Openweb-UI o bien descargarnos alguno para nuestro sistema:

Cabe destacar que para usar estos clientes, va a ser necesario indicar la URL en la que está sirviendo Ollama. En mi caso, es http://IP_HOST_OLLAMA:11434.


Otras herramientas

La IA es un campo emergente y a menudo salen nuevas alternativas que vale la pena conocer y explorar. A continuación, unas cuantas interesantes:

  • Llama.cpp, inferencia LLM con amplio soporte de hardware.
  • koboldcpp, aplicación de generación de texto IA para modelos GGML y GGUF.
  • vLLM, libreria para inferencia LLM.
  • Jan, alternativa a LM Studio 100% offline.
  • LocalAI, herramienta para IA local centrada en la inferencia por CPU.
  • Chatbox  es un servicio de IA como ChatGPT, pero también una app interesante que permite conectar a muchos otros "backends", tanto remotos como a intancias locales (LM Studio, Ollama...).
  • PocketPal  es un asistente IA que ejecuta modelos pequeños directamente en tu smartphone (offline), al igual que Private LLMLlamao y Layla.
  • ChatterUI permite lo mismo, pero también conectar a APIs remotas.
  • Maid es una mezcla de los 2 previos.