Portada! Guía: tu propio ""chatGPT"" en local.

Ollama.jpeg

Hace aproximadamente un año atrás me autoimpuse la necesidad de comprar una tarjeta de video que según yo iba a ocupar para convertirme en el amo y señor de la inteligencia artificial. Aprovechando que hace poco se habían lanzado las RTX 40xx de Nvidia, y sumado a que la locura por la minería de criptomonedas había pasado, por fin pude comprarme una tarjeta de video de la generación anterior. Me hice con una RTX 3090 que lleva en mi PC juntando polvo y alegrándose esporádicamente por participar de algún que otro juego casual.

En su momento intenté usar la solución que lanzó Nvidia para tener un chat con IA en forma local, pero la guía era bien como el forro y cuando pregunté la respuesta demoró en llegar, así es que ya había perdido el interés.

Hace poco vi una guía en un canal de Youtube que sigo donde comentaban la posibilidad de ejecutar LLMs en forma local en Apple Silicon. Si puede correr en Apple Silicon, como no va a correr (mejor) en una tarjeta de video dedicada, pensé. Y tenía razón. Ahora vengo a compartir con ustedes el resultado de ese experimento: cómo logré (sin mucho esfuerzo) tener mi propio chat con inteligencia artificial auto-hosteado.

Qué necesitamos:

  • Un PC. Esta guía se enfoca en Windows, que es donde uso mi tarjeta de video, pero las mismas herramientas están disponibles para su uso en Linux y macOS.
  • Memoria suficiente para ejecutar el modelo que quieran. Los modelos de inferencia se van a cargar en memoria al momento de “chatear” con ellos, así es que mientras más memoria tengan disponible, más grande puede ser el modelo a usar. En mi caso, estoy usando mi tarjeta de video para el procesamiento (RTX 3090, 24Gb ram), así es que ese es mi límite.
  • Espacio para almacenar los modelos a descargar.
  • Docker con docker-compose
¿Y ahora qué? Pues bien, ahora vamos a instalar Ollama. Ollama es una especie de “gestor” de modelos. Nos va a permitir descargar distintos modelos grandes de lenguaje (LLMs) de código abierto que podremos usar en forma local para “chatear” con ellos mediante nuestro emulador de terminal.

Vamos a la web de Ollama, descargamos y ejecutamos el archivo OllamaSetup.exe Una vez finalizada la instalación nos quedará un ícono de una llamita en el panel derecho de Windows, indicando que Ollama se está ejecutando. Para poder probarlo, vamos a abrir nuestro terminal y ejecutamos `ollama`. Esto nos imprimirá las opciones disponibles en el software.

1734220261246.png


Aún no podemos hacer mucho más, porque no tenemos un modelo descargado en nuestro equipo local, así es que el siguiente paso es descargar un modelo desde la web de ollama. Para ello, vamos a revisar los modelos que están disponibles en la sección “Models” de su sitio web, donde podrán encontrar algunos filtros que ayudan a revisar cuál se ajusta más a lo que queramos hacer.

Por ejemplo, para tareas de programación yo he estado probando qwen2.5-coder, en su versión con 32 mil millones de parámetros. Si tu reacción instantánea al leer esa última parte fue “quisawea?”, podemos resumirlo en que cada modelo es entrenado para tareas específicas y con una cantidad limitada de datos, conocidos como “parámetros”. A mayor cantidad de parámetros, mayor será la precisión que el modelo podrá entregar en sus respuestas. Los modelos que podemos encontrar en la web de ollama están disponibles en distintos tamaños (entrenados con distinta cantidad de parámetros) y conviene comenzar probando los más pequeños para ir viendo si el hardware es capaz de procesar las peticiones. Recordemos que los modelos serán cargados en memoria y a mayor cantidad de parámetros, mayor deberá ser la cantidad de memoria disponible para soportarlo. Como referencia, la RTX 3090 con sus 24Gb me permite utilizar modelos de hasta 32b. Cuando intenté usar un modelo de 70b el PC se colgó, porque al quedarse corto de memoria en la GPU empezó a transferir datos hacia la memoria del PC. Cuando ambas memorias quedaron llenas, todo se fue a las pailas.

Aquí quiero hacer una aclaración: usé "ChatGPT" en el título porque es lo que ayuda a entender más rápido el propósito de la guía, pero la realidad es que no encontraremos el modelo de ChatGPT disponible en ollama, porque no es un modelo de código abierto.

En fin, una vez seleccionado un modelo debemos ejecutar `ollama run nombreDelModelo:tamaño`. Por ejemplo, para ejecutar llama 3.2 (modelo creado por Meta A.K.A. Facebook) en su versión de 3 mil millones de parámetros debemos ejecutar `ollama run llama3.2:3b`. Esto desencadenará la descarga del modelo a nuestro equipo y lo dejará disponible en unos minutos, dependiendo de nuestra conexión a internet.

1734220471148.png


Una vez que la descarga ha concluido, veremos un prompt esperando a que le enviemos nuestras consultas al modelo:

1734220486970.png


Y ya podremos comenzar a chatear:

1734220503625.png


Para terminar la conversación debemos escribir `/bye` y el prompt se cerrará.

1734220525690.png


Evidentemente, esta forma de comunicarnos con el modelo no es la más cómoda: dependemos de tener la sesión iniciada en el PC en que ollama está instalado, debemos usarlo mediante el terminal, cuya interfaz no es la más amigable, y no podemos compartir el poder de cómputo de nuestro PC con otras personas. Aquí es cuando llega al rescate OpenWebUI. OpenWebUI es otro proyecto gratuito y de código abierto que también podemos hostear de forma local y que nos permitirá tener una aplicación web montada sobre ollama, la que nos permitirá comunicarnos con nuestros modelos usando una interfaz de usuario más amigable, vale decir, nuestros queridos chats web de siempre. El resultado final es algo así:

1734220564450.png


La forma más sencilla de instalar OpenWebUI es con docker-compose. No me extenderé respecto al uso de Docker o docker-compose, pueden encontrar guías para eso en internet. La misma documentación de Docker es súper buena.

Acá les dejaré el contenido de mi compose para que puedan utilizarlo. Si no tienen una tarjeta de video Nvidia pueden eliminar la sección “deploy”:

services:
# ----------------------------------------
# Open Web UI
# ----------------------------------------
openwebui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
open-webui:


Una vez guardado simplemente debemos ejecutar `docker compose up -d` en el mismo directorio donde está nuestro archivo compose, y listo! Esto iniciará el servidor web y podremos acceder a nuestra aplicación en el puerto 3000. Debemos configurar un usuario y contraseña que serán utilizados para autenticarnos como administrador y luego de eso ya podemos experimentar enviando consultas a nuestro nuevo modelo:

1734220642145.png


Cada nuevo modelo que descarguen con ollama aparecerá en el menú superior izquierdo, lo que nos permitirá ir probando distintas opciones y seleccionar finalmente el que nos de los mejores resultados. Hay un montón de modelos disponibles en la web de ollama.

1734220661382.png


Otra de las ventajas de usar OpenWebUI es que nos permite crear múltiples usuarios, por lo que podemos compartir con otros nuestros modelos descargados. Si hacen click sobre su nombre de usuario (esquina superior derecha) podrán acceder al panel del administrador, desde donde se pueden configurar los usuarios, grupos y sus distintos niveles de acceso a los modelos que tenemos instalados en el servidor.

1734220677765.png


Con esto me despido, espero que les haya gustado la guía y puedan sacarle provecho a los modelos disponibles, y seguir experimentando con las versiones nuevas que van apareciendo.
¡Dejen sus comentarios indicando qué tal les ha funcionado!
 
Última modificación por un moderador:

gnuniko

Miembro Activo
Se incorporó
1 Julio 2010
Mensajes
8
Estuve probando Ollama con gemma4:e2b-it.q4_K_M

Gemma 4:2b-it-q4_K_M es una versión optimizada y compacta de los modelos abiertos desarrollados por Google. Aquí te detallo qué significa cada parte de ese nombre técnico:

  • Gemma 4: Corresponde a la cuarta generación de la familia Gemma. Es un modelo ligero pero potente, diseñado con la misma tecnología que los modelos Gemini.
  • 2b: Indica que tiene 2 mil millones (billions) de parámetros. Es un tamaño pequeño en el mundo de la IA, lo que lo hace ideal para ejecutarse localmente en hardware con recursos limitados.
  • it (Instruction Tuned): Significa que el modelo ha sido entrenado específicamente para seguir instrucciones y mantener diálogos, en lugar de solo completar texto de forma estadística.
  • q4_K_M: Es el método de cuantización (en formato GGUF). Indica que el peso del modelo se ha reducido a 4 bits usando el método "K-Medium". Esto permite que el modelo ocupe mucha menos memoria RAM/VRAM (aprox. 1.5 GB - 2 GB) con una pérdida de precisión mínima.
Ejecuté el model o Ollama:
Código:
❯ ollama run gemma4:e2b-it-q4_K_M

Lo que pedí:
Código:
>>> puedes ir al directorio /home/capa9/Pictures/Avatar.png y describir la imagen 
Added image '/home/capa9/Pictures/Avatar.png'
Thinking...
Here's a thinking process to arrive at the suggested response:

1.  **Analyze the Request:**
    *   The user provided an image (a minimalist, white line drawing of an alien head and torso on a black
background).
    *   The user provided a caption/prompt in Spanish: "ai puedes ir al directorio y describir la imagen" (ai
can go to the directory and describe the image). This is a command/instruction asking for a description.

2.  **Analyze the Image:**
    *   **Subject:** A stylized representation of an alien or extraterrestrial being.
    *   **Style:** Minimalist, line art, white lines on a solid black background. It resembles a sketch or a
simple graphic design.
    *   **Key Features (Head):** Large, prominent, reflective or deeply shadowed eyes (very large
pupils/slits), a smooth, oval/egg-like head shape.
    *   **Key Features (Body):** A simple, humanoid torso and arms (implied, though the lines are very thin).
    *   **Mood/Tone:** Mysterious, stark, minimalist, sci-fi.

3.  **Formulate the Description (Internal Draft - focusing on objectivity):**
    *   *The image is a high-contrast drawing.*
    *   *It depicts an alien figure.*
    *   *The figure is drawn using only white lines against a black background.*
    *   *The focus is on the head, which has large, dark, expressive eyes.*
    *   *The rest of the body is simplified.*

4.  **Refine and Translate to Spanish (as the prompt was in Spanish):**
    *   Start with a general overview.
    *   Detail the style and contrast.
    *   Describe the specific elements (alien, eyes, body).

5.  **Final Output Generation (Reviewing against the goal):** (This leads to the coherent, detailed response
provided below.)
...done thinking.

Esta es una descripción de la imagen:

**Descripción General:**

La imagen es un dibujo minimalista y de alto contraste, presentado en blanco sobre un fondo negro sólido.
Representa la silueta de una figura alienígena, enfocándose principalmente en la cabeza y el torso.

**Detalles Específicos:**

1. **Sujeto:** La figura es un ser con forma humanoide, pero estilizado y simplificado.
2. **Estilo:** El estilo es de arte de línea (line art) muy simple. Se utiliza únicamente la línea blanca para
definir la forma del sujeto contra el fondo negro.
3. **La Cabeza:** La cabeza es grande y ovalada. La característica más llamativa son los **ojos**, que son muy
grandes, con pupilas oscuras y profundas, lo que le da al ser una apariencia misteriosa o intensa.
4. **El Cuerpo:** El resto del cuerpo se representa mediante líneas muy finas y simples que dibujan el cuello
y el torso, sugiriendo una forma humana básica.

**Impresión General:**

La imagen tiene una estética muy de ciencia ficción y minimalista, utilizando el fuerte contraste para crear
un efecto dramático y enfocado en el misterio de la criatura.
La imagen que le pedí que describiera es esta:


Después le pedi que analizara una infografia que había realizado con ChatGPT Images 2.0:

Código:
>>> puedes describir la imagen del directorio /home/capa9/Pictures/Infografia44.png
Added image '/home/capa9/Pictures/Infografia44.png'
Thinking...
Here's a thinking process to generate the description of the image:

1.  **Analyze the Request:** The user has provided a large block of text (which appears to be a formal
document or a set of guidelines/principles) and asks me to "describir la imagen del directorio" (describe the
image of the directory).
2.  **Analyze the Input Image/Text:** The input is not a single image, but a large block of structured text
presented as a document. The text is in Spanish and appears to be a set of principles, objectives, and
obligations related to labor rights (specifically mentioning "DECRETO 44/2024," "Derechos de las personas
trabajadoras," "obligaciones," "responsabilidades," etc.).
3.  **Determine the Goal:** The goal is to synthesize and describe the *content* of this text, treating it as
the "directory" or the main subject matter.
4.  **Structure the Content (Scanning for Key Themes):** I need to break down the text into its main sections
and core messages.

    *   **Title/Context:** DECRETO 44/2024.
    *   **Main Subject:** Derechos de las personas trabajadoras (Rights of workers).
    *   **Key Sections (Structured by questions/themes):**
        *   ¿Qué es? (What is it?)
        *   ¿Por qué es importante? (Why is it important?)
        *   Objetivo del Reglamento (Objective of the Regulation).
        *   Principales obligaciones (Main obligations)
        *   Obligaciones de las personas trabajadoras (Obligations of the workers).
        *   Beneficios esperados (Expected benefits).
        *   Novedades y fortalezas del nuevo reglamento (Newties and strengths of the new regulation).

5.  **Draft the Description (Focusing on Synthesis):** (Self-Correction: Since the input is text, the
description must focus on *what the text is about*, not visual elements, unless explicitly asked for visual
analysis of the layout.)

6.  **Refine and Format the Output (in Spanish):** Ensure the response is clear, comprehensive, and accurately
reflects the detailed information provided in the source. (This leads to the final structured response.)
...done thinking.

La imagen que proporcionas no es una fotografía o un dibujo, sino un **documento formal extenso en texto** que
establece los principios, derechos y obligaciones relacionados con el trabajo y la legislación laboral.

El documento se titula y se enfoca en el **DECRETO 44/2024** y trata sobre los **Derechos de las personas
trabajadoras**.

A continuación, se describe la estructura y el contenido principal del texto:

---

### Resumen del Contenido del Documento

Este texto funciona como un marco legal o un reglamento, detallando los aspectos clave del trabajo y las
relaciones laborales. Está organizado en secciones que responden a preguntas específicas y enumeran
obligaciones y objetivos.

#### 1. ¿Qué es? (Definición)
Esta sección establece la base del reglamento, definiendo el alcance y el propósito de las obligaciones
laborales.

#### 2. ¿Por qué es importante? (Importancia)
Se explica la relevancia de estos derechos y obligaciones en el contexto laboral.

#### 3. Objetivo del Reglamento (Meta)
Define el propósito central del reglamento: establecer un marco legal justo y equitativo para las relaciones
laborales.

#### 4. Principales Obligaciones (Las Reglas)
Esta es la sección central que detalla las responsabilidades de las partes involucradas:

*   **Obligaciones del Empleador:** Se detallan las responsabilidades que deben cumplir los empleadores (como
garantizar seguridad, condiciones laborales, etc.).
*   **Obligaciones de las Personas Trabajadoras:** Se detallan los deberes que tienen los empleados (como
cumplir con las normas, respetar las obligaciones, etc.).

#### 5. Beneficios Esperados
Se enumeran los resultados positivos que se esperan obtener al aplicar este reglamento, enfocándose en la
justicia, la equidad y la mejora de las condiciones laborales.

#### 6. Novedades y Fortalezas del Nuevo Reglamento
Esta sección concluye destacando las mejoras y aspectos positivos introducidos por la nueva normativa.

---

### En Conclusión

El documento es un **reglamento o guía laboral** cuyo propósito es **establecer un marco de trabajo justo y
equilibrado** entre empleadores y personas trabajadoras, asegurando el cumplimiento de los derechos
fundamentales y las responsabilidades mutuas.
La imagen es:

 
Subir