Skip to main content

IA HAT+ y AI Camera

Este proyecto nace de la intención de montar en mi centro una herramienta de IA de uso local que no dependa (y no envíe) datos a internet. Spoiler: No sale bien.

IA HAT+

Qué es

imagen

xxx

Enlaces de interés

xxx

Características principales

xxx

Versiones

xxx

AI Camera

Qué es

imagen

xxx

Enlaces de interés

xxx

Características principales

xxx

Versiones

xxx

Proyectos

Los proyectos que a continuación se indican se han realizado con el siguiente hardware:

  • Raspberry Pi 5 de 16 GB de RAM
  • Cargador oficial de Raspberry Pi 5
  • Tarjeta microSD oficial de 128 GB (en previsión de descarga de modelo IA de gran tamaño)
  • Raspberry Pi IA HAT+ en su versión de 26 TOPs
    • el término TOPs es una unidad de medida que se utiliza para cuantificar el rendimiento de los procesadores diseñados para ejecutar tareas de IA. Sus siglas significan Tera Operations Per Second (Billones de operaciones por segundo)


  • Raspberry Pi IA Camera

No nos ha sido posible encontrar en el mercado la versión AI HAT+2 (40 TOPs y memoria dedicada). Probablemente llevándose el desarrollo de la práctica principal a ese hardware  se hubiera cumplido el objetivo inicial.

Todo ensablado queda como se ve en la siguiente imagen:

(TO DO)

Creación de un LLM de uso local sin dependencia de internet

Como ya se adelantó anteriormente, la idea era montar una IA generativa en local que nos asegurase el no envío de nuestros datos de trabajo al exterior. A continuación enumero los diferentes pasos realizados. Comenzamos:

  1. Con Raspberry Pi imager cargo en la SD la imagen del sistema operativo para la raspberry pi 5
  2. Actualizamos sistema y borramos paquetes innecesarios
    1. Ejecutamos en terminal sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean
  3. Instalamos Ollama
    1. Nos va a permitir gestionar modelos de lenguaje
    2. Web de Ollama con información https://ollama.com/ 
    3. Ejecutamos en terminal curl -fsSL https://ollama.com/install.sh | sh
    4. Tras instalarlo merece la pena fijarse en 3 líneas que arroja el instalador:
      1. The Ollama API is now available at 127.0.0.1:11434 Nos indica dónde ha montado por defecto un servidor al cual lanzarle peticiones
      2. Install complete. Run "ollama" from the command line. Nos indica cual es el comando que deberamos usar para trabajar con Ollama
      3. WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode. Aquí ya nos advierte de que el funcionamiento de Ollama no va a ser óptimo
  4. Descargamos un modelo para trabajar con él
    1. Enumero los que en este momento (abril de 2026) corren en el hw con el que contamos:
      1. llama3.2:3b (rápido y ligero)
      2. mistral:7b (más capaz, mas lento)
      3. phi3:mini (muy eficiente para su tamaño)
      4. gemma2:2b (excelente relación calidad/velocidad)
    2. Instalamos 1 de ellos. Los demás se haría de modo análogo
      1. Ejecutamos en el terminal ollama pull phi3:mini
  5. Lo probamos a través de una llamada al API REST (documentación del endpoint que vamos a usar https://docs.ollama.com/api/generate )
    1. Escribimos en el terminal:
    2. curl http://127.0.0.1:11434/api/generate -d '{ "model": "phi3:mini", "prompt": "Explica qué es una raspberry pi", "stream": false }'
    3. Y esperamos por aproximadamete 4 minutos para ver el resultado. Luego con este modelo, no es funcional
  6. Vamos a descargar otro modelo mas ligero y repetir la consulta para ese modelo:
    1. ollama pull llama3.2:3b
    2. curl http://127.0.0.1:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "Explica qué es una raspberry pi", "stream": false }' en esta ocasión la respuesta se ha demorado 2 minutos lo cual sigue haciendo, bajo mi punto de vista, al modelo poco eficiente como sustituto de las IAs comerciales.
  7. Vamos a preparar una interfaz web para quienes no quieran usar el terminal.
    1. Uaremos docker, si no lo tienes instalado, tines que instalarlo:
      1. Consulta la documentación en web oficial para hacerlo. Yo te dejo a continuación lo que en la fecha actual he hecho yo para instalarlo
      2. sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)
      3.  

        # Add Docker's official GPG key:
        sudo apt update
        sudo apt install ca-certificates curl
        sudo install -m 0755 -d /etc/apt/keyrings
        sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
        sudo chmod a+r /etc/apt/keyrings/docker.asc
        
        # Add the repository to Apt sources:
        sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
        Types: deb
        URIs: https://download.docker.com/linux/debian
        Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
        Components: stable
        Architectures: $(dpkg --print-architecture)
        Signed-By: /etc/apt/keyrings/docker.asc
        EOF
        
        sudo apt update
      4. sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
      5. sudo systemctl status docker
      6. sudo groupadd docker quizás te diga que ya existe
      7. sudo usermod -aG docker $USER
      8. sudo groupadd docker
      9. sudo systemctl enable containerd.service
      10. Reiniciamos
    2. Ahora ejecutaremos en el terminal docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -e OLLAMA_BASE_URL=http://host.docker.internal:11434 ghcr.io/open-webui/open-webui:main 
    3. Si ahora accedemos en el navegador a http://localhost:3000 tendremos acceso a una interface web para interactuar con la IA que hemos preparado y/o con openIA

En las llamadas a curl hemos utilizado 3 parámetros:

  • model: Obligatorio. Nombre del modelo a usar.
  • promt: Obligatorio. Texto de entrada.
  • stream: true devuelve tokens uno a uno, false espera respuesta completa

Puede resultar interesante conocer estos otros:

  • system: Define el comportamiento/personalidad del modelo
  • options
    • temperature: valores entre 0.0 y 1.0. Recomendado 0.7. Determinista y precio 0.0. Creativo y variado 1.0
    • top_p: diversidad del vocabulario. Recomendado 0.9
    • top_k: limita el número de tokens candidatos en cada paso
    • num_predict: máximo de tokens a generar en la respuesta (-1: sin límite)
    • num_ctx: tamaño de la ventana de contexto (memoria del modelo). Cuanto mas alto mas conversación recuerda pero uso mas RAM.
    • repeat_penalty: penaliza repetir las mismas palabras (Sin penalización 1.0. Penalización alta 1.3)
    • seed: fija la semilla aleatoria. Útil para reproducir exactamente la misma respuesta
  • format: formato de salida. "jason" obliga al modelo a responder en un JSON válido
  • keep_alive: tiempo que el modelo permanece cargado en RAM tras la llamada (5 minutos 5m. Descarga inmediata 0) Mas permanencia, mas consumo de RAM.

Aquí un ejemplo completo:

{
  "model": "llama3.2:3b",
  "prompt": "Explica qué es una Raspberry Pi",
  "stream": false,

  "system": "Eres un asistente experto en electrónica",

  "options": {
    "temperature": 0.7,
    "top_p": 0.9,
    "top_k": 40,
    "num_predict": 512,
    "num_ctx": 2048,
    "repeat_penalty": 1.1,
    "seed": 42
  },

  "format": "json",
  "keep_alive": "5m"
}

La documentación completa de la API la tenemos disponible en https://docs.ollama.com/api/introduction Además de /api/generate puede resultarte interesante probar /api/chat

Algún proyecto con la cámara

xxx

---------------- Reordenar lo de abajo

Raspberry nos presenta lo que llama un "sombrero" para su Raspberry Pi 5. Se trata de una placa que se conecta a la Raspberry Pi con un hardware específico que dota a la Raspebrry Pi de capacidad de trabajo real con IA.

Toda la documentación de esta placa podemos encontrarla en:

placa.png

Raspberry Pi completa este "lote IA" con una cámara especialmente enfocada a IA. Toda la documentación podemos encontrarla en https://www.raspberrypi.com/documentation/accessories/ai-camera.html