Texas Instruments stellt mit seiner Jacinto-Reihe eine speziell für anspruchsvolle Anwendungen in den Bereichen KI und Computer Vision zur Verfügung. In der Kombination aus hochoptimierten Hardware-Beschleunigern und leistungsstarken Digital Signal Prozessoren stellen sie eine ideale Familie für Edge- und ADAS-Anwendungen, bei denen hohe Rechenleistung und geringer Stromverbrauch entscheidend ist.
Das Herzstück der Jacinto Reihe im Kontext von Computer-Vision- und Edge-Anwendungen bilden der VPAC Vision Accelerator und die embedded DSP mit TOPS-MMA. Beide sind im folgenden architektonisch zusammengefasst:
Der VPAC3 ist ein Hardware-Beschleuniger, der in den Bildverarbeitungs-Subsystemen des Jacinto-Prozessors zum Einsatz kommt. Seine Hauptaufgabe besteht darin, Bildvorverarbeitung für Rohbildsensoren durchzuführen.
Einzelne Features werden jeweils in Teil-Kernen der IP umgesetzt, um Videodaten echtzeitfähig den Applikationskernen zur Verfügung zu stellen:
Dazu gehören:
Die Jacinto-Reihe hat praktisch durch alle Prozessoren gemeinsam, dass ein oder mehrere 512-Bit C7x DSPs verbaut sind. Die jeweils mit 1 GHz getakteten High-Performance-DSP dienen dazu Computer-Vision-Aufgaben und DL-Inferenzen zu beschleunigen. Für einen oder mehrere dieser DSPs wurde zudem eine MMA-Anbindung umgesetzt, damit KI-Workloads bestanden werden können. Diese Kombination aus DSP und MMA ermöglicht eine Rechenleistung von mehreren TOPS, sodass sowohl die Verarbeitung rechenintensiver ML-Anwendungen als auch die Verarbeitung von KNNs in Echtzeit mit x86-basierten Systemen in jedem Fall mithalten kann.
TIDL ermöglicht es Entwicklern, bereits trainierte neuronale Netze, die in Frameworks wie PyTorch oder TensorFlow erstellt wurden, für den Einsatz auf Jacinto-Prozessoren zu optimieren und zu portieren. Dazu stellt TIDL Werkzeuge bereit, die die Modelle quantisieren und an die Hardware anpassen, sodass diese in ressourcenbeschränkten Umgebungen performant laufen.
TIDL-Environment von Texas Instruments
Um ein vortrainiertes neuronales Netz von PyTorch auf ein Jacinto-Board zu portieren, müssen mehrere Schritte durchlaufen werden. Zunächst die Konvertierung des Modells in ein Format, das von der Jacinto-Hardware unterstützt wird, sowie die Optimierung und Quantisierung des Modells für Embedded-Systeme. Voraussetzung dafür ist, dass das neuronale Netz in PyTorch trainiert wurde. Dies kann durch ein bereits trainiertes Modell wie ResNet, MobileNet oder ein spezifisch entwickeltes Modell geschehen. Die Export-Fähigkeit von PyTorch erlaubt es, das Modell in ein ONNX (Open Neural Network Exchange) Format zu konvertieren, das von TIDL unterstützt wird.
import torch
import torchvision.models as models
# Beispiel eines vortrainierten ResNet-Modells
model = models.resnet18(pretrained=True)
model.eval()
# Exportiere das PyTorch-Modell in das ONNX-Format
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "resnet18.onnx")
Nachdem das Modell im ONNX-Format vorliegt, muss es mit den TIDL-Import-Tools in ein von der Jacinto-Hardware lesbares Format umgewandelt werden. TIDL unterstützt die Konvertierung und Optimierung von ONNX-Modellen, indem es diese für die Ausführung auf der Jacinto-Hardware quantisiert. Die TIDL-Konvertierungstools sind Teil des TIDL-Toolkits, das von Texas Instruments zur Verfügung gestellt wird.
./tidl_model_import.out onnx resnet18.onnx -o ./output_folder
Dieser Schritt führt die Quantisierung und Optimierung des Modells durch, indem es die numerische Präzision von Float32 auf Int8 reduziert, um Speicherbedarf und Rechenanforderungen zu minimieren. Die TIDL-Tools verwenden dazu quantisierte Versionen der Modellgewichte und können automatische Kalibrierungsfunktionen verwenden, die auf Testdatensätzen basieren.
Das konvertierte und quantisierte Modell wird dann auf das Jacinto-Board übertragen. Hierfür kann das Jacinto TDA4VM SDK verwendet werden, das die TIDL-Runtime beinhaltet. Die SDKs sind abrufbar und stehen frei zur Verfügung. Die SDK ist für die C7x-DSPs optimiert und sorgt bei korrekter Programmierung dafür, dass die Inferenz auf den DSPs und den Hardware-Beschleunigern der Jacinto-Plattform berechnet wird.
Zunächst wird das Modell auf das Jacinto-Board kopiert. Dann wird die TIDL-Runtime verwendet, um das Modell zu laden und die Inferenz durchzuführen.
#include "tidl_api.h"
// Modell laden und Inferenz ausführen
tidl_model_handle model = tidl_load_model("path_to_converted_model.bin");
tidl_inference_result result;
tidl_inference(model, input_data, &result);
// Ergebnisse anzeigen
Die TIDL-Runtime übernimmt die Ausführung des quantisierten Modells auf den DSPs, die speziell für die Ausführung von neuronalen Netzen optimiert sind. Sie unterstützt mehrere Eingabe- und Ausgabedatenformate und ermöglicht es, die Ergebnisse direkt in die Anwendung zu integrieren.
Ein entscheidender Schritt beim Deployment ist die Analyse der Performance des neuronalen Netzes auf der Zielhardware. TIDL-Tools bieten umfangreiche Profiler-Werkzeuge, mit denen die Ausführungszeiten, Speichernutzung und Hardware-Auslastung des Modells gemessen werden können. Auf Basis dieser Informationen können weitere Optimierungen durchgeführt werden, beispielsweise durch Architekturänderungen oder Anpassungen der Quantisierungseinstellungen.