Saltar al contenido principal

Desplegar JoyAI-VL-Interaction en Jetson Thor

Introducción

JoyAI-VL-Interaction es un sistema abierto de interacción vídeo-lenguaje en tiempo real. Combina un backend VLM de streaming, una WebUI basada en navegador, servicios opcionales de ASR/TTS y una canalización de memoria de contexto largo para que el modelo pueda observar una escena en vivo y responder en el momento adecuado.

A fecha de 7 de julio de 2026, el repositorio upstream JoyAI-VL-Interaction indica que se ha probado en GPU NVIDIA de la serie Hopper. Este wiki se centra en una ruta práctica de adaptación a Jetson AGX Thor: desplegar primero la pila mínima (webinfer + webui) en la única GPU de Thor y, después de que la canalización principal sea estable, ampliar a servicios de audio.

Requisitos previos

  • 1 x NVIDIA Jetson AGX Thor Developer Kit
  • 1 x cámara USB o una fuente de flujo RTSP
  • Teclado, ratón, monitor y conexión de red
  • Al menos 30 GB de almacenamiento libre para entornos de Python, pesos de modelos y registros
nota

Esta guía asume que tu sistema Jetson Thor ya está flasheado, arranca con normalidad y tiene acceso a Internet.

NVIDIA Jetson AGX Thor Developer Kit USB Camera

Primeros pasos

Paso 1. Preparar el sistema Jetson Thor

Abre una terminal en Jetson Thor e instala los paquetes de sistema requeridos:

sudo apt update
sudo apt install -y git git-lfs curl ffmpeg python3-pip python3.12-venv
git lfs install

Para un mejor rendimiento de inferencia en Jetson, cambia el dispositivo a un modo de energía de alto rendimiento:

sudo nvpmodel -m 0
sudo jetson_clocks
info

JoyAI-VL-Interaction se estandariza en Python 3.12, por lo que esta guía mantiene la misma versión en Thor.

Paso 2. Instalar uv y la CLI de Hugging Face

Los scripts de instalación upstream usan uv y el script de descarga de modelos espera el comando hf.

curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

uv tool install "huggingface_hub[cli]"
hf --version

Si hf sigue sin encontrarse, vuelve a abrir la terminal o ejecuta:

export PATH="$HOME/.local/bin:$PATH"

Paso 3. Clonar el repositorio JoyAI-VL-Interaction

git clone https://github.com/jd-opensource/JoyAI-VL-Interaction.git
cd JoyAI-VL-Interaction

Paso 4. Instalar el entorno de ejecución

Instala primero solo el entorno principal de WebUI e inferencia en streaming:

./install/install.sh --with-all

Este script crea el entorno virtual compartido en services/.venv e instala el entorno de ejecución fijado vllm==0.22.0 requerido por el proyecto.

nota

Si vllm==0.22.0 no se instala correctamente en Jetson ARM64, no continúes con el flujo predeterminado basado en wheel. En ese caso, cambia primero a la ruta oficial de compilación ARM64/origen de vLLM y luego vuelve a esta guía.

Paso 5. Descargar los pesos del modelo

Aquí seguimos el README de Github para descargar todos los pesos de los modelos:

./install/download-models.sh --all

De forma predeterminada, los modelos se descargan en:

  • /tmp/models/JoyAI-VL-Interaction-Preview
  • /tmp/models/Qwen3-VL-4B-Instruct
  • /tmp/models/Qwen3-ASR-1.7B
  • /tmp/models/Qwen3-TTS-12Hz-1.7B-CustomVoice

Paso 6. Iniciar la pila mínima de JoyAI en Thor

La distribución de GPU predeterminada upstream asume múltiples GPU:

  • modelo principal en la GPU 0
  • modelo de resumen en la GPU 1
  • ASR/TTS opcionales en la GPU 2

Jetson Thor es una plataforma de una sola GPU, por lo que necesitamos colocar tanto el modelo principal como el modelo de resumen en la GPU 0 y comenzar con configuraciones de memoria conservadoras.

Aquí necesitamos abrir cuatro terminales en el Jetson y ejecutar los siguientes comandos por separado.

  • Terminal1:
    source /home/seeed/JoyAI-VL-Interaction/services/.venv/bin/activate
    cd services/webinfer
    MAIN_GPU=0 MAIN_GPU_MEMORY_UTILIZATION=0.6 bash scripts/run.sh models
  • Terminal2:
    source /home/seeed/JoyAI-VL-Interaction/services/.venv/bin/activate
    cd services/webinfer
    SUMMARY_GPU=0 SUMMARY_GPU_MEMORY_UTILIZATION=0.3 bash scripts/run.sh summary
peligro

Ten en cuenta que debes esperar hasta que la Terminal 2 se haya iniciado completamente antes de continuar ejecutando los comandos en la Terminal 3.

Puedes comprobar los registros de ejecución en la Terminal 2 usando el siguiente comando:

tail -f /home/seeed/JoyAI-VL-Interaction/services/webinfer/summary_vllm_logs/vllm_8065.log

  • Terminal3:
    source /home/seeed/JoyAI-VL-Interaction/services/.venv/bin/activate
    cd services/webinfer
    bash scripts/run.sh adapter
  • Terminal4:
    source /home/seeed/JoyAI-VL-Interaction/services/.venv/bin/activate
    cd services/webui
    bash scripts/start_server.sh
info

Estos valores son un punto de partida orientado a Thor para el despliegue con una sola GPU. Si el servicio se inicia de forma fiable, puedes aumentar gradualmente la utilización de memoria de la GPU. Si vLLM informa errores de OOM, reduce aún más estos valores.

Cuando el inicio se complete correctamente, el script lanza:

  • la API principal VLM compatible con OpenAI en el puerto 7060
  • el modelo de resumen en el puerto 8065
  • el adaptador de streaming en el puerto 8070
  • la WebUI en el puerto 8099

Paso 7. Abrir la WebUI

Abre un navegador en Jetson Thor y visita:

https://<jetson-thor-ip>:8099

La WebUI utiliza un certificado autofirmado de forma predeterminada, por lo que tu navegador puede mostrar una advertencia de certificado en la primera visita. Acepta la advertencia y continúa.

A continuación puedes:

  • seleccionar una cámara web USB en el navegador
  • introducir una URL de flujo RTSP
  • iniciar la interacción de vídeo en tiempo real con JoyAI-VL-Interaction

Verificar el despliegue

Abre otra terminal y ejecuta las siguientes comprobaciones de estado:

curl http://127.0.0.1:7060/v1/models
curl http://127.0.0.1:8065/v1/models
curl http://127.0.0.1:8070/health

Si todos los servicios funcionan correctamente, el frontend de la WebUI debería poder conectarse al adaptador de streaming en:

http://127.0.0.1:8070/v1

Demostración

Solución de problemas

1. hf: command not found

Asegúrate de que la ruta local de binarios esté cargada:

source $HOME/.local/bin/env
export PATH="$HOME/.local/bin:$PATH"

2. vllm==0.22.0 o vllm-omni==0.22.0 falla en ARM64

El proyecto upstream está diseñado en torno a servicios basados en vLLM. Si la instalación predeterminada con pip o uv falla en Jetson ARM64, compila vllm o vllm-omni desde el código fuente o cambia a un contenedor CUDA ARM64 que ya incluya el entorno de ejecución correspondiente.

3. La WebUI se abre, pero la inferencia devuelve 502

Esto suele significar que el frontend del navegador está activo, pero los servicios de modelo backend aún no están listos. Vuelve a comprobar:

curl http://127.0.0.1:7060/v1/models
curl http://127.0.0.1:8065/v1/models
curl http://127.0.0.1:8070/health

Referencias

Soporte técnico y debate sobre el producto

Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a distintas preferencias y necesidades.

Loading Comments...