Usar el acelerador USB Google Coral con reComputer RK3576
El acelerador USB Google Coral añade un coprocesador Edge TPU a un host mediante USB. Este tutorial muestra una forma probada de conectarlo a un reComputer RK3576, verificar el estado del USB, instalar el runtime de Edge TPU, ejecutar un modelo TensorFlow Lite compilado para Edge TPU y reproducir un benchmark de latencia.
Alcance del benchmark: el resultado de esta página compara el Edge TPU de Coral con una línea base de TensorFlow Lite en CPU de ocho hilos. No prueba la NPU integrada del RK3576. Comparar ambos aceleradores requiere desplegar el mismo modelo y un preprocesamiento equivalente a través de las cadenas de herramientas de Edge TPU y RKNN.
Entorno de prueba
| Elemento | Configuración probada |
|---|---|
| Host | reComputer RK3576 Dev Kit |
| Sistema operativo | Armbian-unofficial 26.05.0-trunk, Debian 12 (bookworm) |
| Kernel | 6.1.115-vendor-seeed-rk3576 |
| Arquitectura del host | AArch64, 8 CPU lógicos |
| Acelerador | Google Coral USB Accelerator |
| Enlace USB | USB 3 SuperSpeed, reportado como 5000M por lsusb -t |
| Runtime de Edge TPU | Runtime estándar (frecuencia reducida), libedgetpu.so.1.0 |
Esta es la configuración usada para las mediciones siguientes, no una declaración de versiones mínimas compatibles. La documentación del USB Accelerator de Coral indica que Linux Armv8 derivado de Debian es compatible y recomienda USB 3 para el mejor rendimiento.
Conexión del hardware
Usa un puerto host USB 3 y un cable de buena calidad. Las siguientes fotografías muestran el reComputer RK3576, el acelerador USB Coral y el cable probados.

Conecta el Coral a uno de los puertos USB 3 del RK3576. La siguiente imagen de cerca muestra la conexión real de la prueba.

Buscar y verificar el Coral
Ejecuta el siguiente comando para buscar cualquiera de los dos USB ID que usa el acelerador:
lsusb | grep -Ei '1a6e:089a|18d1:9302|Google|Global Unichip'Los IDs describen dos estados normales del dispositivo:
| USB ID | Nombre típico en lsusb | Significado |
|---|---|---|
1a6e:089a | Global Unichip Corp. | Estado inicial DFU/bootloader |
18d1:9302 | Google Inc. | Estado del runtime Edge TPU tras cargar el firmware |
Comprueba la velocidad USB negociada:
lsusb -tPara una conexión USB 3, la rama del acelerador debería reportar 5000M. Una entrada 480M indica USB 2.
Para inspeccionar eventos recientes de enumeración y firmware, ejecuta:
sudo dmesg | grep -E 'device firmware changed|New USB device found' | tail -n 10La siguiente captura muestra el acelerador en modo runtime como 18d1:9302, conectado a 5000M, con la enumeración DFU previa y los mensajes posteriores de cambio de firmware visibles en dmesg.

Ver 1a6e:089a justo después de conectar el acelerador es normal. Cargar el delegado de Edge TPU puede cargar el firmware del dispositivo y hacer que se reenumere como 18d1:9302.
Instalar el runtime de Edge TPU
Usa el repositorio Linux de Coral e instala el runtime estándar:
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install libedgetpu1-stdSi el acelerador ya estaba conectado durante la instalación, desconéctalo y vuelve a conectarlo una vez para que la regla udev recién instalada surta efecto.
libedgetpu1-std usa la frecuencia de operación reducida. Coral también ofrece libedgetpu1-max como runtime alternativo de frecuencia máxima, pero aumenta el consumo de energía y puede hacer que la carcasa metálica se caliente mucho. No se pueden instalar los dos paquetes de runtime al mismo tiempo.
Crear el entorno de Python
La placa probada usó Python 3.11 y la API de Python de TensorFlow Lite directamente en lugar de PyCoral. Crea un entorno aislado e instala los paquetes usados por los ejemplos:
sudo apt-get install python3-venv
python3 -m venv /tmp/coral-venv
/tmp/coral-venv/bin/pip install --upgrade pip
/tmp/coral-venv/bin/pip install tflite-runtime opencv-python-headlessVerifica que Python pueda cargar el delegado de Edge TPU:
/tmp/coral-venv/bin/python -c "from tflite_runtime.interpreter import load_delegate; print(load_delegate('libedgetpu.so.1.0'))"El comando debería imprimir un objeto delegado de TensorFlow Lite. También puede provocar el cambio de 1a6e:089a a 18d1:9302 en el primer acceso.
Descargar los recursos de prueba
Crea un directorio de trabajo y descarga los modelos emparejados de Edge TPU y CPU de Google junto con la imagen de ejemplo:
mkdir -p /tmp/coral-test
cd /tmp/coral-test
curl -fL -o model.tflite \
https://raw.githubusercontent.com/google-coral/test_data/master/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite
curl -fL -o model_cpu.tflite \
https://raw.githubusercontent.com/google-coral/test_data/master/mobilenet_v2_1.0_224_inat_bird_quant.tflite
curl -fL -o labels.txt \
https://raw.githubusercontent.com/google-coral/test_data/master/inat_bird_labels.txt
curl -fL -o parrot.jpg \
https://raw.githubusercontent.com/google-coral/test_data/master/parrot.jpgparrot.jpg es la imagen de ejemplo del repositorio público google-coral/test_data de Google; no es una fotografía creada para este tutorial. El modelo de Edge TPU está compilado para el acelerador, mientras que model_cpu.tflite es su contraparte de TensorFlow Lite sin Edge TPU.
Ejecutar una inferencia mínima en Edge TPU
Guarda lo siguiente como /tmp/coral-test/inference.py:
import cv2
from tflite_runtime.interpreter import Interpreter, load_delegate
delegate = load_delegate("libedgetpu.so.1.0")
interpreter = Interpreter(
model_path="model.tflite",
experimental_delegates=[delegate],
)
interpreter.allocate_tensors()
input_info = interpreter.get_input_details()[0]
image = cv2.cvtColor(cv2.imread("parrot.jpg"), cv2.COLOR_BGR2RGB)
height, width = input_info["shape"][1:3]
tensor = cv2.resize(image, (int(width), int(height))).astype(input_info["dtype"])
interpreter.set_tensor(input_info["index"], tensor[None, ...])
interpreter.invoke()
print("Edge TPU inference completed")Ejecútalo desde el directorio de trabajo:
cd /tmp/coral-test
/tmp/coral-venv/bin/python inference.pyVerificación opcional del rendimiento
El benchmark realiza 10 invocaciones de calentamiento seguidas de 100 invocaciones cronometradas para cada ruta. Cronometra únicamente Interpreter.invoke(), incluida la ejecución del delegado y la comunicación host-dispositivo asociada. Excluye la inicialización del modelo/delegado, la carga de la imagen y el redimensionado.
La ruta de CPU usa la versión sin Edge TPU del modelo con num_threads=8. Los modelos de Edge TPU y de CPU provienen del mismo conjunto de pruebas de Google Coral MobileNet V2 iNaturalist de aves, y ambos reciben el mismo tensor de entrada preprocesado.
El script completo de prueba opcional está disponible como benchmark.py. Después de descargar los tres recursos anteriores, guárdalo o descárgalo como /tmp/coral-test/benchmark.py.
Ejecuta el benchmark:
cd /tmp/coral-test
/tmp/coral-venv/bin/python benchmark.pyResultado observado
Una ejecución en el RK3576 probado produjo:
| Ruta | Latencia media | Latencia mediana | Latencia P95 | Rendimiento derivado |
|---|---|---|---|---|
| Coral Edge TPU | 6.202 ms | 6.193 ms | 6.344 ms | 161.23 FPS |
| CPU, 8 hilos | 20.700 ms | 20.610 ms | 21.196 ms | 48.31 FPS |
En esta ejecución, la latencia media de la ruta Coral fue 3.34x menor que la latencia media de la ruta de CPU de ocho hilos. Los valores de FPS son 1000 / latencia media para inferencias repetidas de una sola imagen; no son mediciones de un pipeline completo de cámara, decodificación, preprocesamiento y visualización.

Estos valores son una medición de un dispositivo y una configuración de software concretos, no una especificación de producto garantizada. El escalado de frecuencia, el estado térmico, la actividad en segundo plano, la elección del runtime, el particionado del modelo y la topología USB pueden cambiar el resultado.
Nota: Esta comprobación opcional compara únicamente el Coral Edge TPU con la ruta de TensorFlow Lite en CPU con ocho hilos. No compara Coral con la NPU del RK3576, que no se usa en esta prueba. Por tanto, las cifras máximas de 4 TOPS de Coral y 6 TOPS de la NPU del RK3576 no describen ni predicen este resultado.
Solución de problemas
- No hay entrada de Coral en
lsusb: reconecta el dispositivo, usa un cable que se sepa que funciona, prueba otro puerto host USB e inspeccionadmesg. - El dispositivo permanece en
1a6e:089a: primero verifica quelibedgetpu.so.1.0carga correctamente. Luego reconecta el acelerador e inspecciona los mensajes de firmware endmesg. 480Menlsusb -t: la conexión negoció a velocidad USB 2. Mueve el acelerador a un puerto USB 3 y comprueba el cable.Failed to load delegate: verifica que el runtime de Edge TPU está instalado y que el usuario actual puede acceder al dispositivo USB.- Temperatura de la carcasa alta: usa el runtime estándar
libedgetpu1-stdy mantén el flujo de aire. El runtime de frecuencia máxima puede calentarse mucho.