LLM en Orange Pi RV2: IA generativa en RISC-V

Introducción

Hace solo un par de años, la idea de ejecutar un LLM (Large Language Model)—esa inteligencia artificial que potencia asistentes como ChatGPT o Gemini—en un sistema embebido del tamaño de una tarjeta de crédito que ronda los 60 euros sonaba a ciencia ficción. Y ni que decir tiene si además se trata de una arquitectura RISC-V. Pero la Orange Pi RV2 llegó para romper todos los esquemas.

Esta placa de desarrollo apareció a principios de 2025 e incorpora un SoC Ky X1 con un procesador RISC-V de 8 núcleos. Además, dice contar con un acelerador neuronal dedicado, prometiendo 2 TOPS (2 billones de operaciones por segundo). Aunque algunas webs lo describen como una NPU, en realidad se trata de un bloque de hardware especializado dentro del chip: un co-procesador matemático que acelera operaciones tensoriales o convoluciones mediante vectorización, pero no es una NPU independiente. Pero lo que sí es cierto es que está diseñada para desplegar modelos de inteligencia artificial en el borde (AI on-the-edge).

Fotografía real de una Orange Pi RV2 con doble puerto Ethernet y antena WiFi y acelerador de IA para ejecución de LLM

Imagen 1. Vista frontal de la Orange Pi RV2, usada en este artículo para ejecutar localmente un modelo de lenguaje (LLM) como Qwen2-1.5B en RISC-V.

Orange Pi liberó recientemente software y modelos optimizados para desplegar un LLM en la RV2, lo que me dio la excusa perfecta para experimentar. En este post, te cuento cómo logré hacer correr un modelo de IA generativa de forma local en esta Orange Pi RV2 y, lo más importante, qué tal fue la experiencia. ¿Estamos ante el inicio de una nueva era de accesibilidad para la IA? ¡Vamos a descubrirlo!

Orange Pi RV2: Una aproximación a este SBC

Antes de entrar en materia, conviene repasar las principales características de esta sistema embebido.

Hardware

En el apartado de puertos, encontramos tres USB 3.0 Tipo-A para periféricos de alta velocidad, complementados con un cuarto puerto USB 2.0 Tipo-A ideal para teclado o ratón. Para la visualización y el audio, cuenta con una salida HDMI y un conector de audio de 3,5 mm, ofreciendo la experiencia básica de un miniordenador.

Sin embargo, donde realmente destaca es en su capacidad de expansión y red. Posee dos puertos Gigabit Ethernet, abriendo las puertas a proyectos en los que busquemos usarla como router o firewall. El almacenamiento puede gestionarse a través de una ranura para memoria microSD, pero podemos ir más allá, instalando un SSD NVMe en la ranura M.2 2280 a través de PCIe 2.0 x2, lo que servirá para trabajar con los pesados archivos de los modelos de IA.

Para proyectos de visión por computador cuenta con dos conectores MIPI-CSI, dónde se pueden conectar dos cámaras, así como un conector MIPI-DSI para conectar una pantalla. Si queremos integrar sensores, actuadores, o establecer comunicaciones, la Orange Pi RV2 dispone de un cabezal GPIO de 26 pines. Y lo mejor de todo, la placa se alimenta mediante un puerto USB Tipo-C, por lo que podremos alimentarla con un cargador de móvil o una powerbank.

Variedad de imágenes

Esta versatilidad de hardware se ve potenciada por una variedad de imágenes listas para utilizar. Para nuestro experimento con LLMs la elección lógica fue Ubuntu, por ser un entorno de propósito general, familiar y con un amplio soporte. No obstante, su potencial no se limita a esto. La RV2 también acepta sistemas especializados como OpenWRT, lo que, unido a sus dos puertos de red Gigabit, la convierte en una plataforma excelente para construir routers personalizados o appliances de red, como ya adelantábamos.

Pasos para instalar y ejecutar un modelo LLM en la RV2

Para esta primera prueba, me decanté por uno de los modelos proporcionados por la comunidad de Orange Pi: Qwen2-1.5B, un modelo de lenguaje abierto de 1.500 millones de parámetros desarrollado por Alibaba. Era la opción perfecta: lo suficientemente reciente como para ser competente, y lo suficientemente ligero (en su versión cuantizada a 4 bits ocupa unos ~1,2 GB) para ser manejable en los 8 GB de RAM de la RV2.

Preparando el entorno

Con la Orange Pi RV2 ya funcionando con Ubuntu 24.04 y conectada a internet, lo primero fue clonar el repositorio RiscV-KyX1-LLM-Demo desde GitHub. Este repositorio es el kit de herramientas esencial, ya que contiene todos los scripts y la base para ejecutar varios modelos compatibles con el SoC Ky X1.

git clone https://github.com/thanhtantran/RiscV-KyX1-LLM-Demo
cd RiscV-KyX1-LLM-Demo/python

Instalando el Motor de Inferencia: ONNX Runtime Adaptado

Orange Pi suministró binarios de una versión de ONNX Runtime adaptada a este chip. En particular, se proporcionan dos archivos wheel:

  • onnxruntime_genai-0.4.0.dev1-linux_riscv64.whl: Una versión especial de ONNX Runtime para IA generativa.
  • ky_ort-1.2.2-linux_riscv64.whl: Lo que parece ser el «proveedor» o driver que permite ejecutar los modelos utilizando el acelerador neuronal «Ky» del Ky X1.

Para instalarlos ejecuté el siguiente comando (usando pip3 en Python 3.12 incluido con Ubuntu):

pip3 install ./onnxruntime_genai-0.4.0.dev1-cp312-cp312-linux_riscv64.whl \
             ./ky_ort-1.2.2-cp312-cp312-linux_riscv64.whl  --break-system-packages

Nota: La opción --break-system-packages fue necesaria para instalar los paquetes a nivel de sistema. Una alternativa más limpia sería usar un entorno virtual de Python.

También, como indican las instrucciones, agregué la carpeta de binarios de Python al PATH:

export PATH="$PATH:/home/orangepi/.local/bin"

Descargar el modelo LLM cuantizado preparado:

El repositorio incluye un script muy útil, download_models.sh, que automatiza la descarga de los modelos ya convertidos y optimizados. Estos modelos han sido previamente cuantizados (pesos en 4 bits) y empaquetados listos para ONNX en la RV2.

Primero, aseguré de tener la utilidad gdown para descargar de Google Drive, y luego ejecuté el script:

pip3 install gdown 
sudo chmod +x download_models.sh
./download_models.sh

El script es interactivo: te pide el ID de Google Drive del modelo que quieres. Tras introducir el ID correspondiente a qwen2-int4-1.5b, el script se puso en marcha, descargando y descomprimiendo automáticamente el modelo en la carpeta models/. ¡Y listo para usar! Con esto el modelo de la IA estaba en su sitio.

Ejecutar el LLM en modo inferencia interactiva

Finalmente llegó el momento de la verdad. El repositorio trae un script de inferencia llamado llm_qa.py que permite cargar el modelo y entablar un diálogo por consola (un estilo de chatbot sencillo). Para lanzar el modelo Qwen2 1.5B utilicé la siguiente orden, tal como indica la documentación:

python3 llm_qa.py -m ./models/qwen2-int4-1.5b -l 128 -e qwen2 -v -g

Donde:

  • -m especifica la ruta del modelo a cargar.
  • -l 128 establece la longitud máxima de respuesta en 128 tokens.
  • -e qwen2 indica el tipo/estructura de modelo (en este caso Qwen).
  • Las opciones -v -g activan un modo verboso que imprime información de rendimiento y habilitan la generación (greedy por defecto).

Primera prueba: Probando el LLM en castellano

El script cargó el modelo en memoria y lanzó un prompt interactivo. Escribí Hola para probar, y en unos segundos obtuve la respuesta de la IA. En efecto, el modelo respondió en español a mi saludo inicial: «¡Hola! ¿Cómo puedo ayudarte hoy?». ¡Teníamos un asistente de IA ejecutándose localmente en la Orange Pi RV2! A continuación, realicé algunas preguntas simples. Por ejemplo, al preguntarle “¿Quién eres?”, contestó “soy una inteligencia artificial diseñada para ayudarte a responder preguntas y proporcionar información…”.

Consola mostrando la respuesta del modelo LLM Qwen2-1.5B a entradas en español ejecutado en Orange Pi RV2



Imagen 2. El modelo Qwen2-1.5B genera respuestas en español desde la Orange Pi RV2, incluyendo interacciones básicas como saludos o identificación.

Segunda prueba: Probando otros idiomas y preguntas más complejas

También decidí probar la capacidad del modelo para entender mezclas de idiomas, un fenómeno común en el lenguaje cotidiano. Le pregunté directamente: «What does ‘Je voudrais un café, please’ mean in English?«. El modelo respondió con soltura, reconociendo tanto el francés como el inglés mezclados en la frase, y lo que es más, ofreció una explicación contextual —algo que me pareció notable tratándose de un modelo pequeño (1.5B).

Para estresarlo un poco más, lancé otra instrucción más académica: «Explain how photosynthesis works in simple terms«. La respuesta fue extensa, ordenada, e incluso pedagógica. Describió la fotosíntesis mencionando la función de la clorofila, la absorción de luz, la producción de glucosa y oxígeno, y lo resumió con una frase clara sobre su importancia para la vida en la Tierra. Si cometió un ligero error cuando dijo que la clorofila absorbe la longitud de onda del color verde, en realidad la refleja.

Terminal ejecutando el modelo Qwen2-1.5B en Orange Pi RV2 traduciendo y explicando fotosíntesis

Imagen 3. Ejemplo de respuesta larga del modelo Qwen2-1.5B en Orange Pi RV2: traducción de una frase francés-inglés y explicación detallada sobre fotosíntesis.

Conclusiones: Orange Pi RV2 y LLM Qwen 1.5B

Ejecutar un modelo de lenguaje cuantizado en una Orange Pi RV2 ha sido un desafío bastante divertido. He comprobado que hoy es posible tener un sistema generativo funcional en una placa de apenas 60 €, sin conexión a la nube y usando una arquitectura abierta como RISC-V. Por otro lado, me llevo el chasco de que pese al anuncio de “2 TOPS de aceleración de IA” no hay una verdadera NPU, sino un conjunto de extensiones vectoriales y quizás algún coprocesador menor, pero no un subsistema neuronal autónomo.

El rendimiento (que ronda de 4.5 a 5 tokens por segundo, con tiempos de arranque de unos 5–6 segundos por respuesta) es razonable para un modelo de 1.5B parámetros, pero limitado para usos interactivos continuos o contextos largos.

La pregunta del millón: ¿Es la RV2 una plataforma viable para desplegar LLMs? En tareas ligeras, demostraciones, asistentes de propósito específico o entornos desconectados, la respuesta es sí. Pero conviene ser honesto: estamos ante un procesador generalista con vectorización RISC-V, no ante un chip optimizado para inferencia masiva. Hay otros dispositivos, como la Google Coral o algunos chips de NXP (i.MX8MP, i.MX95) que sí tienen una NPU de verdad (TPU en el caso de Google).

Próximamente intentaré sacarle más jugo a esta tarjeta. Me gustaría probar algún modelo de detección de objetos y ver qué tal se comporta. Y sobretodo, ver si se puede explotar aún más la aceleración por HW de las inferencias.

Galería

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *