Ultralytics YOLO27: Trag dich auf die Warteliste ein.
Get Started

AMD-Xilinx-Export für Ultralytics YOLO mit Vitis AI#

Beim Export von Ultralytics YOLO26-Modellen mit format="xilinx" werden diese mit AMD Quark für die NPUs in adaptiven SoCs der AMD Versal AI Edge Series Gen 2 quantisiert. Anschließend kann der Vitis-AI-Compiler von AMD daraus ein .rai-Modell erstellen. Derselbe Export prüft die INT8-Genauigkeit auf jedem Host, bevor du das Modell bereitstellst.

Unterstützte AMD-Geräte

Der Export ist auf den aktiv gepflegten Vitis-AI-NPU-Workflow für Geräte der Versal AI Edge Series Gen 2 ausgerichtet, beispielsweise das VEK385-Evaluierungskit. Zynq UltraScale+- und Kria-DPUs sowie die Versal-AI-Edge-NPU der ersten Generation (VEK280) verwenden andere Vitis-AI-Workflows, die unter Bereitstellung auf anderen AMD-Xilinx-Zielen beschrieben sind.

AMD-Xilinx-Geräte sind in vielen Industriekameras, Bildverarbeitungssystemen für Fahrzeuge, Robotern, Drohnen und Produkten für die medizinische Bildgebung weltweit im Einsatz. Sie verbinden Arm-Prozessoren mit programmierbarer Logik und verfügen bei neueren Geräten zusätzlich über dedizierte AI Engines. Dadurch kann ein einzelner Chip Video erfassen und vorverarbeiten, Objekte erkennen und mit niedriger, vorhersehbarer Inferenzlatenz auf die Ergebnisse reagieren.

Dieser Leitfaden behandelt den AMD-Xilinx-Export, das Kompilieren und Ausführen auf einem Versal-Board, die verschiedenen AMD-Xilinx-Gerätefamilien, die Ausführung von KI auf diesen Geräten sowie die von den einzelnen Beschleunigern unterstützten Ultralytics-YOLO-Operatoren.

Was ist AMD Xilinx?#

Xilinx erfand in den 1980er-Jahren das feldprogrammierbare Gate-Array (FPGA) und wurde zu einem führenden Anbieter von adaptiven SoCs und FPGAs. AMD schloss die Übernahme von Xilinx im Februar 2022 ab. Die Produktlinien werden nun unter der Marke AMD als AMD Zynq, AMD Kria, AMD Versal und AMD Vitis verkauft.

Xilinx oder AMD?

Beide Namen beziehen sich auf dieselben Produkte. AMD vermarktet sie als „adaptive SoCs und FPGAs“, aber unter Entwicklerinnen und Entwicklern ist „Xilinx“ weiterhin weit verbreitet. Die Teilenummern behalten das Präfix XC bei (zum Beispiel xczu7ev). Das ältere Vitis-AI-Repository und die Docker-Images werden auf GitHub und Docker Hub weiterhin unter dem Namen Xilinx geführt. Diese Anleitung verwendet „AMD Xilinx“, damit du sie unter beiden Namen finden kannst.

Wichtige Begriffe und Konzepte#

Bei der Bereitstellung auf AMD Xilinx kommt eine eigene Terminologie zum Einsatz. Die folgende Tabelle erläutert alle in dieser Anleitung verwendeten Begriffe.

BegriffBedeutung
FPGAFeldprogrammierbares Gate-Array: ein Chip, dessen digitale Logik nach der Herstellung durch das Laden eines als Bitstream bezeichneten Entwurfs konfiguriert wird. Damit lassen sich kundenspezifische Hardwarekomponenten wie Videoverarbeitungspipelines oder Beschleuniger für neuronale Netze implementieren.
Programmierbare Logik (PL)Die FPGA-Logik innerhalb eines AMD-Xilinx-SoCs. Bei Zynq- und Kria-Geräten ist der AI-Beschleuniger in der PL implementiert.
Verarbeitungssystem (PS)Die fest integrierten Arm-CPU-Kerne, Speichercontroller und Peripheriegeräte des SoCs. Darauf laufen Linux, deine Anwendung und alle Modellschichten, die der Beschleuniger nicht ausführen kann.
Adaptives SoC / MPSoCEin System-on-Chip, das ein Verarbeitungssystem mit programmierbarer Logik und bei vielen Versal-Geräten zusätzlich mit AI Engines verbindet. MPSoC steht für Multiprozessor-System-on-Chip.
AI Engine (AIE, AIE-ML, AIE-MLv2)Gruppen fest integrierter Vektorprozessoren auf vielen Versal-Geräten, darunter die hier behandelte Versal-AI-Edge-Serie. Sie sind für maschinelles Lernen und Signalverarbeitung ausgelegt.
DPUEinheit zur Verarbeitung von Deep Learning: AMDs INT8-Beschleuniger für neuronale Netze, der als IP bereitgestellt und in die PL integriert wird (zum Beispiel DPUCZDX8G auf Zynq UltraScale+ und Kria). Größen von B512 bis B4096 geben die maximale Anzahl von Operationen pro Taktzyklus an.
NPU / NPU-IPNeuronale Verarbeitungseinheit: AMDs Beschleuniger der aktuellen Generation für Inferenz, der in neueren Vitis-AI-Versionen die DPU ersetzt. AMD beschreibt seine NPU-IP als einen Soft-Beschleuniger, der AI Engines mit programmierbarer Logik verbindet und daher ebenfalls ein passendes Hardwaredesign benötigt. Siehe den Glossareintrag zur NPU.
Vitis AIAMDs Toolchain für die Bereitstellung neuronaler Netze auf AMD-Xilinx-Geräten. Sie umfasst Quantisierung, Kompilierung, Laufzeitumgebungen, Beispiele und Docker-Umgebungen.
AMD QuarkAMDs aktuelle Bibliothek zur Modellquantisierung. Sie wird im Arbeitsablauf für Versal AI Edge Gen 2 verwendet, um ein FP32-ONNX-Modell in ein INT8-Modell umzuwandeln.
Quantisierung, PTQ und QATUmwandlung von FP32-Gewichten und -Aktivierungen in INT8. Bei der Quantisierung nach dem Training (PTQ) werden Kalibrierungsbilder verwendet. Beim quantisierungsbewussten Training (QAT) wird das Modell feinabgestimmt, um die Genauigkeit wiederherzustellen.
KalibrierungsbilderEine kleine, repräsentative Bildauswahl, die bei der PTQ durch das Modell geleitet wird, um die INT8-Skalierung für jeden Tensor festzulegen.
BF16 und gemischte GenauigkeitBFloat16 ist ein Gleitkommaformat mit 16 Bit, das den Wertebereich von FP32 beibehält. Bei gemischter Genauigkeit läuft der größte Teil des Netzes mit INT8, während empfindliche Schichten BF16 verwenden.
XIRXilinx Intermediate Representation: das Graphformat, das der DPU-Compiler erzeugt und die Laufzeitumgebung einliest.
.xmodelEin serialisierter XIR-Graph. Der Quantisierer schreibt ein quantisiertes .xmodel; der DPU-Compiler wandelt es in ein kompiliertes .xmodel mit DPU-Anweisungen, quantisierten Gewichten und etwaigen CPU-Teilgraphen um. Für das kompilierte Modell ist die passende DPU-Konfiguration erforderlich.
arch.json / DPU-FingerabdruckDie Datei, die eine bestimmte DPU-Konfiguration beschreibt. Der DPU-Compiler benötigt diese Datei. Ein für einen bestimmten Fingerabdruck kompiliertes .xmodel läuft nicht mit einem anderen Fingerabdruck.
SnapshotDas Verzeichnis des kompilierten Modells, das beim NPU-Arbeitsablauf für Versal AI Edge (VEK280) entsteht. Es ist an eine bestimmte NPU-IP-Variante gebunden.
.raiDie Modelldatei, die beim NPU-Arbeitsablauf für Versal AI Edge Gen 2 entsteht.
VART / VART-MLDie Vitis-AI-Laufzeitbibliotheken, die kompilierte Modelle laden und auf der Platine ausführen. Sie bieten C++- und Python-APIs.
ONNX-Runtime-Vitis-AI-EPDas VitisAIExecutionProvider für ONNX Runtime, mit dem ONNX-Modelle auf AMD-NPUs kompiliert und ausgeführt werden.
CPU-Ausweichlösung / GraphaufteilungKann der Beschleuniger einen Operator nicht ausführen, teilt der Compiler das Modell üblicherweise in Teilgraphen für den Beschleuniger und die CPU auf. Jede Aufteilung verursacht eine Datenübertragung, die die Latenz deutlich erhöhen kann. Bei manchen Operatoren wird stattdessen das gesamte Modell auf die CPU verlagert oder die Kompilierung schlägt fehl.

AMD-Xilinx-Gerätefamilien für Edge AI#

AMD-Xilinx-Geräte für Edge AI gehören zu drei Familien. Zynq und Kria nutzen die DPU in der programmierbaren Logik, während die hier behandelten Versal-AI-Edge-Geräte die NPU auf ihren AI Engines einsetzen.

FamilieBeschreibungAnwendungsprozessorAI-BeschleunigerBeispielplatinen
Zynq UltraScale+ MPSoCArm-CPUs und FPGA-Logik auf einem Chip, in Größen von ZU1 bis ZU19Arm Cortex-A53 mit zwei oder vier KernenIn der programmierbaren Logik integrierte DPUZCU104, ZCU102, kundenspezifische Platinen
Kria K26 System-on-ModuleProduktionsreifes Modul auf Basis eines Zynq UltraScale+ MPSoCArm Cortex-A53 mit vier KernenIn der programmierbaren Logik integrierte DPUKV260 Vision AI Starter Kit, KR260 Robotics Starter Kit
Versal AI Edge SeriesAdaptive SoCs; AIE-ML-Bauteile wie VE2302 und VE2802 führen die NPU ausArm Cortex-A72 mit zwei KernenNPU auf AIE-ML-AI-Engines und in der PLVEK280
Versal AI Edge Series Gen 2Adaptives SoC der nächsten Generation mit AIE-MLv2-AI-EnginesBis zu acht Arm Cortex-A78AENPU auf AIE-MLv2-AI-Engines und in der PLVEK385

Zynq UltraScale+ MPSoC#

Jeder Zynq UltraScale+-Chip verbindet ein Arm-Verarbeitungssystem mit FPGA-Logik. Das Verarbeitungssystem verfügt je nach Variante über Cortex-A53-Kerne mit zwei Kernen (CG) oder vier Kernen (EG und EV) sowie Cortex-R5F-Echtzeitkerne. EV-Geräte bieten zusätzlich einen fest integrierten H.264/H.265-Videocodec. Für neuronale Netze integrieren Entwicklerinnen und Entwickler eine DPU in die Logik neben den Kamera- und Videopipelines. Bei kleinen Geräten beansprucht die DPU Platz, der dann für andere Teile des Designs fehlt.

Kria-System-on-Modules#

Das Kria-K26-Modul vereint einen Zynq UltraScale+ MPSoC, Speicher und Stromversorgung auf einem produktionsreifen Modul. So musst du Prozessor, Speicher und Stromversorgung nicht selbst entwerfen. Das Modul wird auf eine Trägerplatine gesteckt, entweder auf eine Platine aus einem Starter Kit oder auf eine eigene Platine. Es bildet die Grundlage für das KV260 Vision AI Starter Kit für intelligente Kameras und das KR260 Robotics Starter Kit für Robotik. Da das K26 auf Zynq UltraScale+ basiert, nutzt es denselben DPU-Arbeitsablauf. Zum Kria-Portfolio gehören auch weitere Module. Prüfe daher vor der Wahl eines Arbeitsablaufs, welchen Prozessor dein Modul verwendet.

Adaptive Versal-SoCs#

Versal ist AMDs Familie adaptiver SoCs. Die AI-Edge- und AI-Core-Serien verfügen neben den Arm-Kernen und der programmierbaren Logik über fest integrierte AI Engines, während einige andere Versal-Serien keine AI Engines bieten. AMDs NPU-IP wird gemeinsam auf AI Engines und programmierbarer Logik ausgeführt. Vitis AI unterstützt die AIE-ML-Bauteile der AI-Edge-Serie, zum Beispiel VE2302 und VE2802. Die Versal AI Edge Series (VEK280-Evaluierungskit) und die Versal AI Edge Series Gen 2 (VEK385-Evaluierungskit) sind AMDs aktuelle Zielplattformen für Edge AI und stehen im Mittelpunkt der aktuellen Vitis-AI-Versionen.

So läuft AI auf AMD-Xilinx-Geräten: DPU und NPU im Vergleich#

Die meisten AI-Bereitstellungen auf AMD-Xilinx-Geräten folgen demselben Muster. Der Beschleuniger verarbeitet die von ihm unterstützten Schichten. Die Arm-CPU übernimmt die Vorverarbeitung, die Nachverarbeitung und alle Schichten, die der Beschleuniger nicht ausführen kann. Eine Laufzeitumgebung auf der Platine koordiniert beide.

AMD hat zwei Beschleunigergenerationen auf den Markt gebracht, jeweils mit eigener Toolchain und eigener Modelldatei. Diese Anleitung behandelt Vitis AI 3.5 für die DPU und Vitis AI 6.3 für die NPU. Informationen zu späteren Versionen findest du in der aktuellen AMD-Dokumentation.

ArbeitsablaufHardwareToolchainQuantisiererKompiliertes ArtefaktLaufzeitumgebung auf der PlatineStatus
DPUZynq UltraScale+, KriaVitis AI 3.5 (Docker)vai_q_pytorch.xmodelVARTEingefrorener Compiler, Modellzoo und DPU-IP
NPU (Versal AI Edge)VEK280 und andere Versal AI Edge-BauteileVitis AI 6.3 (Docker)In den Snapshot-Ablauf integriertSnapshotVART-MLAktiv
NPU (Versal AI Edge Gen 2)VEK385 und andere Gen-2-BauteileVitis AI 6.3 (Docker)AMD Quark.raiONNX Runtime Vitis AI EP oder VART-MLAktiv
Der DPU-Ablauf wird nicht mehr weiterentwickelt

Vitis AI 3.5 ist die letzte Version mit Aktualisierungen des DPU-Compilers und der Modellbibliothek. In späteren Versionen des Repositorys Xilinx/Vitis-AI bleiben Compiler, Modellbibliothek und Zynq UltraScale+ DPU-IP unverändert; aktualisiert werden hingegen die Laufzeitumgebung und die Kompatibilität mit neueren AMD-Toolversionen (siehe die Vitis AI 5.0-Versionshinweise). Die aktuelle Vitis AI-Dokumentation von AMD beschreibt die NPU als Ersatz für die veraltete DPU-Architektur. Bestehende Zynq UltraScale+- und Kria-Produkte können weiterhin mit der DPU ausgeliefert werden, aber deren Unterstützung für Operatoren wird nicht erweitert. Neuere Modellarchitekturen benötigen daher die unter YOLO-Modellkompatibilität beschriebenen Anpassungen.

Ryzen AI-Laptops verwenden einen anderen Software-Stack

AMD Ryzen AI-Prozessoren in PCs enthalten ebenfalls eine NPU, verwenden aber den separaten Software-Stack Ryzen AI Software statt der eingebetteten Vitis AI-Abläufe in dieser Anleitung. Informationen zu AMD Instinct- und Radeon-GPUs findest du unter AMD-GPU-Integration.

Welchen Vitis AI-Ablauf brauche ich?#

Wähle anhand des Geräts auf deiner Platine den passenden Ablauf aus:

Export nach AMD Xilinx: YOLO-Modell konvertieren#

Unterstützte Aufgaben#

Der AMD-Xilinx-Export unterstützt alle sieben Ultralytics-Aufgaben. Semantische Segmentierung und Tiefenschätzung sind nur mit YOLO26 verfügbar, da nur diese Modellfamilie entsprechende Köpfe enthält.

AufgabeYOLOv8YOLO11YOLO26
Erkennung✅✅✅
Segmentierung✅✅✅
Semantik❌❌✅
Tiefe❌❌✅
Klassifizierung✅✅✅
Pose✅✅✅
OBB✅✅✅

Installation#

Der AMD-Xilinx-Export läuft unter Linux (x86-64 oder ARM64) mit Python 3.11 bis 3.13, den von AMD Quark unterstützten Versionen. Beim ersten Export werden außerdem die benutzerdefinierten Operatoren von Quark kompiliert. Dafür ist ein C++-Compiler wie g++ erforderlich.

Installation
# Install the required package for YOLO
pip install ultralytics

AMD Quark wird beim ersten Export automatisch von PyPI installiert. So kannst du die Exportabhängigkeiten vorab installieren:

pip install "ultralytics[export-xilinx]"

Für eine bearbeitbare Installation aus dem Repository ersetze "ultralytics[export-xilinx]" durch -e ".[export-base,export-xilinx]". Um die Python-3.12-Umgebung und den von CI verwendeten Exporttest nachzustellen, führe den vorhandenen Umgebungs-Builder im Stammverzeichnis des Repositorys aus:

ULTRALYTICS_ISOLATED_VENVS="$PWD/.venvs" python .github/scripts/create-export-env.py --env isolated-xilinx

Verwendung#

Das AMD-Xilinx-Format unterstützt die Modi Export, Vorhersage und Validierung. Ist der Vitis AI Execution Provider von AMD nicht verfügbar, führen Vorhersage und Validierung das quantisierte Modell mit ONNX Runtime auf der CPU aus, um seine INT8-Genauigkeit auf jedem Host zu messen. Wenn ONNX Runtime den VitisAIExecutionProvider bereitstellt, wie auf einem Board der Versal AI Edge Series Gen 2, wählt Ultralytics ihn automatisch aus.

Exportieren
from ultralytics import YOLO

# Ein YOLO26-Modell laden
model = YOLO("yolo26n.pt")

# In das AMD-Xilinx-Format für das VEK385 exportieren (quantize=8 wird automatisch erzwungen)
model.export(format="xilinx")  # creates 'yolo26n_xilinx_model/'
Vorhersagen
from ultralytics import YOLO

# Das exportierte AMD-Xilinx-Modell laden
model = YOLO("yolo26n_xilinx_model")

# Inferenz ausführen
results = model("https://ultralytics.com/images/bus.jpg")
Validieren
from ultralytics import YOLO

# Das exportierte AMD-Xilinx-Modell laden
model = YOLO("yolo26n_xilinx_model")

# Die INT8-Genauigkeit anhand des COCO8-Datensatzes validieren
metrics = model.val(data="coco8.yaml")

Die Formatnamen vitis, vitisai und versal sind Aliase für xilinx.

Exportargumente#

ArgumentTypStandardBeschreibung
formatstr'xilinx'Zielformat des exportierten Modells, das die Kompatibilität mit NPUs der AMD Versal AI Edge Series Gen 2 festlegt.
imgszint oder tuple640Gewünschte Eingabebildgröße des Modells: eine Ganzzahl für quadratische Bilder oder ein Tupel (height, width). Das exportierte Modell hat eine feste Batchgröße von 1.
quantizeint oder str8/automatischQuantisierungspräzision. 8 (Vitis AI INT8) ist erforderlich und wird automatisch aktiviert, wenn nichts anderes angegeben ist.
datastrNoneFür die INT8-Kalibrierung verwendete Dataset-YAML-Datei; bei der Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder ein integrierter Dataset-Name angegeben. Wenn du nichts angibst, verwendet Ultralytics den Kalibrierungsdatensatz der jeweiligen Aufgabe, beispielsweise coco128.yaml für die Erkennung.
fractionfloat1.0Anteil des Kalibrierungsdatensatzes, der verwendet werden soll.
namestr've2-xc2ve3858'Vitis-AI-Compilergerät: 've2-xc2ve3858' (VEK385-Evaluierungskit), 've2-xc2ve3804', 've2-xc2ve3558', 've2-xc2ve3504', 've2-xc2ve3358' oder 've2-xc2ve3304'.
opsetintNoneONNX-Operatorensatz für den Zwischengraphen. Standardmäßig wird 17 verwendet, der von AMD für YOLO auf Vitis AI validierte Operatorensatz.
simplifyboolTrueVereinfacht den zwischengeschalteten ONNX-Graphen mit onnxslim.
devicestrNoneLegt das Gerät für den Export fest: GPU (device=0) oder CPU (device=cpu).

Setze nms=False, um den NMS-freien Kopf von YOLO26 zu exportieren. Eingebettetes NMS (nms=True) wird nicht unterstützt, da AMD NonMaxSuppression als einen der Operatoren aufführt, die dazu führen können, dass das gesamte Modell auf der CPU ausgeführt wird.

Mit eigenen Daten kalibrieren

Die INT8-Genauigkeit hängt davon ab, wie gut die Kalibrierungsbilder die Einsatzumgebung abbilden. Übergib data= eine Dataset-YAML-Datei mit mindestens 300 repräsentativen Bildern deiner eigenen Kameras; die Standardkalibrierungsdatensätze sind kleine öffentliche Beispieldatensätze.

Weitere Informationen zum Exportvorgang findest du auf der Ultralytics-Dokumentationsseite zum Export.

Ausgabestruktur#

Nach einem erfolgreichen Export wird ein Modellverzeichnis mit folgender Struktur erstellt:

yolo26n_xilinx_model/
├── yolo26n.onnx          # AMD Quark VINT8 model with the Ultralytics metadata
└── vitisai_config.json   # Vitis AI compiler configuration for the target device

Beim Kompilieren des Modells, wie weiter unten beschrieben, wird im selben Verzeichnis ein Compiler-Cache yolo26n/ angelegt, der das NPU-Modell yolo26n.rai und AMD-Kompilierungsberichte wie final-vaiml-pass-summary.txt enthält.

Ablauf des Exports#

Der Export folgt dem von AMD dokumentierten Vitis-AI-Workflow für die Versal AI Edge Series Gen 2:

  1. ONNX-Export mit Operatorensatz 17 und statischer Batchgröße 1.
  2. Quantisierung mit AMD Quark und der Konfiguration VINT8 (symmetrisches INT8 mit Zweierpotenz-Skalierungen) sowie den von AMD für die NPU-Kompilierung vorgeschriebenen Optionen: Int32Bias=False, enable_npu_cnn=True, DedicatedQDQPair=True und QuantizeAllOpTypes=True. Für die Kalibrierung wird der standardmäßige Ultralytics-INT8-Kalibrierungslader verwendet, der dieselbe Vorverarbeitung mit Letterboxing, RGB und Werten von 0–1 wie bei der Inferenz nutzt.
  3. Gemischte Präzision: Der Modellkopf bleibt im Gleitkommaformat, und der Vitis-AI-Compiler führt ihn auf der NPU in BF16 aus. Die Quantisierung des Kopfes auf INT8 verursacht den größten Teil des Genauigkeitsverlusts. Aus demselben Grund belässt AMDs YOLOv8m-Tutorial den Nachverarbeitungsabschnitt außerhalb von INT8.
  4. Compilerkonfiguration: vitisai_config.json legt das Ziel VAIML sowie das Gerät aus name fest.

Genauigkeit#

Die Tabelle vergleicht das exportierte INT8-Modell mit dem FP32-ONNX-Modell auf dem COCO-Val2017-Datensatz (5.000 Bilder) bei 640. Beide Modelle werden mit ONNX Runtime auf der Host-CPU ausgeführt. Die INT8-Modelle wurden mit dem Standarddatensatz coco128.yaml kalibriert; mit eigenen Einsatzbildern lässt sich der Abstand normalerweise verringern.

ModellFP32 mAP50-95AMD Xilinx INT8 mAP50-95
YOLO26n40.336.7
YOLO26s47.942.5
YOLO11n38.835.5

Bei diesen Host-Ergebnissen wird das quantisierte Modell mit ONNX Runtime auf der CPU ausgeführt. Dies ist die Vergleichsbasis für AMDs Genauigkeitsmethodik bei NPU-Ergebnissen. Die von AMD veröffentlichten YOLOv8m-Ergebnisse auf dem VEK385 verwenden auf der NPU denselben Ansatz mit gemischter Präzision:

YOLOv8m-KonfigurationHardwaremAP50-95 (COCO)
FP32 ONNXHost-CPU49.95
BF16VEK385 NPU50.29
VINT8-quantisiert, FP32-AbschlussHost-CPU48.75
VINT8 mit BF16-AbschlussVEK385 NPU48.38

Quelle: AMD-YOLOv8m-Tutorial für Versal AI Edge Gen 2, das bei dp_size=1 auch eine durchschnittliche Inferenzzeit von 10.69 ms für 100 VART-Läufe angibt.

Auf Versal AI Edge Gen 2 kompilieren und ausführen#

Das exportierte Verzeichnis ist für den Vitis-AI-Compiler von AMD vorbereitet, der das auf der NPU ausführbare Modell .rai erstellt.

  1. Host und Board vorbereiten. Kompiliere auf einem x86-64-Linux-Host mit AMDs Vitis-AI-6.3-Docker-Image für Versal AI Edge Gen 2 und einer Lizenz für den AMD-AI-Engine-Compiler (siehe Lizenzierungsseite von AMD). Richte das VEK385 mithilfe von AMDs Board-Einrichtungsanleitung ein.

  2. Kompilieren. Erstelle im Container eine ONNX-Runtime-Sitzung mit dem Vitis AI Execution Provider, wie in AMDs Kompilierungsanleitung beschrieben. Dabei wird der Cache yolo26n/ mit yolo26n.rai im Exportverzeichnis angelegt:

    import onnxruntime as ort
    
    d = "yolo26n_xilinx_model"
    options = {"config_file": f"{d}/vitisai_config.json", "cache_dir": d, "cache_key": "yolo26n", "target": "VAIML"}
    ort.InferenceSession(f"{d}/yolo26n.onnx", providers=["VitisAIExecutionProvider"], provider_options=[options])

    Prüfe yolo26n_xilinx_model/yolo26n/final-vaiml-pass-summary.txt, um zu sehen, welcher Anteil des Modells auf der NPU ausgeführt wird. Beim YOLO26n mit einer Größe von 640 platziert der Vitis-AI-6.3-Compiler von AMD 99,9 % der Operatoren und Rechenlast in einer einzigen Partition auf der VEK385-NPU.

  3. Auf dem Board ausführen. Kopiere das Exportverzeichnis auf das VEK385. ONNX Runtime mit dem Vitis AI Execution Provider lädt das kompilierte yolo26n.rai und führt es auf der NPU aus. YOLO("yolo26n_xilinx_model") wählt diesen Provider automatisch aus, wenn er verfügbar ist.

Für die Kompilierung wird nur AMDs ONNX Runtime benötigt. Exportiere daher auf einem beliebigen Linux-Rechner und kopiere das Verzeichnis in den Container, statt Ultralytics dort zu installieren und dadurch möglicherweise die festgelegten Pakete des Containers zu ändern. Wenn Ultralytics zusammen mit AMDs Build onnxruntime-vitisai installiert ist, wie auf dem Board, bleibt dieser Build erhalten, statt durch das standardmäßige onnxruntime ersetzt zu werden.

ONNX Runtime und VART-ML

Der Export richtet die Standardkompilierung für ONNX Runtime ein. Diese führt alle nicht NPU-kompatiblen Operatoren, etwa die Top-k-Auswahl von YOLO26 mit nms=False, direkt auf der Arm-CPU aus. AMDs VART-ML-Laufzeitumgebung führt ein Modell nur aus, wenn alle Operatoren auf der NPU liegen, sofern du nicht AMDs CPU-Partitionsdurchläufe zu vitisai_config.json hinzufügst. Diese Artefakte können nicht mit ONNX Runtime ausgeführt werden.

YOLO-Modellkompatibilität und unterstützte Operatoren#

Ein Beschleuniger beschleunigt nur die Operatoren, die er in Hardware implementiert. Enthält ein Modell einen nicht unterstützten Operator, führt der Compiler diesen Teil des Netzwerks in der Regel auf der Arm-CPU aus. Jeder Wechsel zwischen Beschleuniger und CPU erhöht die Latenz. Manche Operatoren lassen sich nicht aufteilen: Für die Versal AI Edge Gen 2 NPU führt AMD Operatoren wie NonZero und NonMaxSuppression auf, die das gesamte Modell auf die CPU zwingen können. Die Operatorunterstützung ist der wichtigste Faktor dafür, wie gut ein YOLO-Modell auf AMD Xilinx-Hardware läuft.

Die Tabelle zeigt, wo jeder Operator in einem YOLO26-Modell ausgeführt wird. Ein unveränderter YOLO26n-ONNX-Export enthält 87 SiLU-Aktivierungen, die jeweils als Sigmoid und Mul exportiert werden, sowie 4 MatMul- und 2 Softmax-Operatoren aus den beiden Attention-Blöcken: dem C2PSA-Block am Ende des Backbones (Layer 10) und dem Attention-fähigen C3k2-Block, der die P5-Ausgabe erzeugt (Layer 22).

OperatorEinsatzort in YOLODPU (Zynq UltraScale+, Kria)NPU (Versal AI Edge Gen 2)
Faltung + Batch-NormalisierungJeder Conv-Block✅✅
SiLU-AktivierungJeder Conv-Block (Standardaktivierung)❌ Wird auf der CPU ausgeführt; durch Hard-Swish ersetzen✅
Hard-Swish, ReLU, ReLU6, LeakyReLUOptionale Aktivierungen in der Modell-YAML-Datei✅ In die Faltung integriert✅
SigmoidKlassenwerte im Detektionskopf❌ Wird auf der CPU ausgeführt (meist Teil der Nachbearbeitung)✅
MatMul zwischen zwei AktivierungenAttention-Blöcke (C2PSA; YOLO26 C3k2)❌ Wird auf der CPU ausgeführt✅
SoftmaxAttention-Blöcke; DFL in YOLOv8 und YOLO11❌ Wird auf der CPU ausgeführt✅
Umformen, TransponierenAttention-Blöcke⚠️ Wenn möglich integriert, andernfalls auf der CPU ausgeführt✅
Aufteilen, AusschneidenC3k2- und C2f-Blöcke⚠️ In Teilbereiche umgewandelt; Compilerbericht prüfen✅
Resize (Hochskalieren mit nächstem Nachbarn)Hochskalierung im Neck✅✅
MaxPool, Concat, AddSPPF-Block und Zusammenführen von Merkmalen✅✅
TopK, GatherElementsNMS-freier YOLO26-Kopf (nms=False)❌ Wird auf der CPU ausgeführt⚠️ CPU-Aufteilung auf dem Arm-Host
NonMaxSuppressionNur bei Export mit nms=True❌ Wird auf der CPU ausgeführt❌ Kann das gesamte Modell auf die CPU zwingen

Quellen: AMD UG1414 – unterstützte Operatoren, PyTorch-Unterstützung für Operatoren sowie die Listen der von Versal AI Edge Gen 2 unterstützten, auf der CPU ausgeführten und nicht unterstützten Operatoren. Die Unterstützung hängt auch von deiner DPU-Konfiguration und den Graphmustern ab. Prüfe daher immer den Aufteilungsbericht des Compilers.

YOLO26-Kopf: kein DFL und eine optionale NMS-freie Ausgabe

YOLO26 verzichtet auf den Verteilungsfokusverlust (DFL). Anders als bei YOLO11 und YOLOv8 müssen die Box-Ausgaben deshalb nicht per Softmax dekodiert werden. Im Vergleich zu YOLO11 enthält das Modell außerdem einen zweiten Attention-Block. Vergleiche daher die Compilerberichte für dein Zielgerät und die Messwerte auf dem Gerät, bevor du ein Modell auswählst. Bei Exporten mit nicht gesetztem nms bleibt der One-to-many-Kopf erhalten; wie bei anderen YOLO-Modellen ist dann NMS auf der CPU erforderlich. Verwende beim Export nms=False, um stattdessen den NMS-freien One-to-one-Kopf von YOLO26 zu nutzen. Dieser ersetzt NMS durch eine einfache Top-k-Auswahl, die auf der CPU ausgeführt wird.

YOLO26 mit Hard-Swish für die DPU vorbereiten#

Die DPU integriert nur ReLU, ReLU6, LeakyReLU, Hard-Swish und Hard-Sigmoid in ihre Faltungen. Hard-Swish ist eine hardwarefreundliche Näherung von SiLU und daher der naheliegende Ersatz. In den YAML-Dateien für Ultralytics-Modelle kannst du mit dem Schlüssel activation die Standardaktivierung der Conv-Blöcke ändern (Anleitung zur Modell-YAML-Konfiguration).

Kopiere yolo26.yaml nach yolo26-hswish.yaml und füge unter den Parametern eine Zeile hinzu:

# Parameters
nc: 80 # number of classes
activation: nn.Hardswish() # default Conv activation, DPU-native
end2end: True # whether to use end-to-end mode

Erstelle anschließend das Modell, übertrage die vortrainierten YOLO26-Gewichte und führe auf deinem Datensatz eine Feinabstimmung durch:

Ein YOLO26-Modell mit Hard-Swish feinabstimmen
from ultralytics import YOLO

# # YOLO26n mit Hard-Swish-Aktivierungen erstellen; das „n“ im Namen bezeichnet die Nano-Größenvariante
model = YOLO("yolo26n-hswish.yaml").load("yolo26n.pt")  # # vortrainierte Gewichte übertragen

# # Durch Feinabstimmung das Netzwerk an Hard-Swish anpassen
model.train(data="coco8.yaml", epochs=100, imgsz=640)

Aktivierungen haben keine Gewichte, daher werden alle vortrainierten Gewichte übernommen. Der exportierte ONNX-Graph enthält dann 87 HardSwish-Operatoren und keine SiLU-Operatoren. Ersetze coco8.yaml durch deinen eigenen Datensatz und vergleiche vor der Bereitstellung mit dem SiLU-Modell die Genauigkeit im Validierungsmodus.

Alternativen zum erneuten Trainieren
  • Beim Quantisieren austauschen: Setze "convert_silu_to_hswish": true in der JSON-Konfiguration des Vitis AI 3.5 PyTorch-Quantisierers, um SiLU während der Quantisierung zu ersetzen. So entfällt ein Trainingslauf, allerdings geht dies meist mit einem größeren Genauigkeitsverlust einher. Diesen kann AMDs schnelle Feinabstimmung oder QAT teilweise ausgleichen. Siehe die Konfigurationsanleitung für vai_q_pytorch.
  • LeakyReLU: Die DPU implementiert LeakyReLU mit einer festen negativen Steigung von 26/256 (etwa 0,1). Wenn du LeakyReLU verwendest, trainiere mit activation: nn.LeakyReLU(0.1015625), damit die Steigungen beim Training und bei der Bereitstellung übereinstimmen.

Attention-Blöcke auf der DPU verarbeiten#

YOLO26 wendet Attention an der niedrigsten Auflösung (ein 20×20-Raster bei einer Eingabegröße von 640) an zwei Stellen an: im C2PSA-Block auf Layer 10 und im Attention-fähigen C3k2-Block auf Layer 22. YOLO11 hat einen C2PSA-Block. Auf einer DPU werden dessen MatMul- und Softmax-Operatoren auf der CPU ausgeführt. Dadurch wird das Modell in abwechselnde DPU- und CPU-Untergraphen aufgeteilt. Du hast drei Möglichkeiten:

  1. Die CPU-Blöcke akzeptieren. Das kompilierte .xmodel enthält dann CPU-Untergraphen. Führe es daher mit AMDs Graph Runner aus, der DPU- und CPU-Untergraphen gemeinsam ausführt, sofern für jeden Operator eine CPU-Implementierung vorhanden ist. Andernfalls musst du die fehlenden Operatoren implementieren und registrieren. Bei 20×20 ist die Attention-Berechnung klein, aber jede zusätzliche Übertragung zwischen DPU und CPU erhöht die Latenz. Miss daher die Leistung auf deiner Platine.

  2. Eine YAML-Datei ohne Attention verwenden. Ersetze in deiner Hard-Swish-YAML-Datei den C2PSA-Layer durch nn.Identity, damit die von Concat und Detect verwendeten Layer-Indizes gültig bleiben, und deaktiviere Attention in Layer 22:

    backbone:
        # ... layers 0-9 unchanged
        - [-1, 1, nn.Identity, []] # 10 C2PSA removed; keeps later layer indices valid
    
    head:
        # ... layers 11-21 unchanged
        - [-1, 1, C3k2, [1024, True, 0.5, False]] # 22 (P5/32-large), attention disabled
        - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

    Der exportierte ONNX-Graph enthält dann keine MatMul- oder Softmax-Operatoren. Die Attention-Gewichte sind nicht mehr anwendbar (624 von 666 YOLO26n-Gewichten werden übernommen). Führe daher eine längere Feinabstimmung durch und vergleiche die Genauigkeit im Validierungsmodus.

  3. Ein Modell ohne Attention verwenden, zum Beispiel YOLOv8, das AMD in eigenen DPU-Beispielen verwendet hat.

Auf Versal AI Edge Gen 2 werden Attention-Operatoren als von der NPU unterstützt aufgeführt, daher sind diese Änderungen normalerweise nicht nötig. Prüfe im Compilerbericht, wo die Operatoren ausgeführt werden, denn laut AMD können auch unterstützte Operatoren aufgrund von Konfigurations- oder Speicherbeschränkungen auf die CPU ausweichen.

Modellkompatibilität auf einen Blick#

ModellDPU (Zynq UltraScale+, Kria)NPU (Versal AI Edge Gen 2)
YOLO26Mit Hard-Swish trainieren; zwei Attention-Blöcke werden zu CPU-Untergraphen; kein DFLNativer format="xilinx"-Export; Kopf wird in BF16 ausgeführt
YOLO11Mit Hard-Swish trainieren; C2PSA und DFL-Softmax werden auf der CPU ausgeführtNativer format="xilinx"-Export; Kopf wird in BF16 ausgeführt
YOLOv8Mit Hard-Swish trainieren; DFL-Softmax wird auf der CPU ausgeführtNativer format="xilinx"-Export. AMDs YOLOv8m-Tutorial (Vitis AI 6.3, VEK385, INT8 mit BF16-Nachverarbeitung): Der Compilerbericht zeigt 1.181 Operatoren (99,915 %) und 99,994 % der GOPs auf der NPU; keine Modelländerungen erforderlich

Bereitstellung auf anderen AMD-Xilinx-Zielen#

Zynq UltraScale+- und Kria-DPUs sowie die Versal-AI-Edge-NPU der ersten Generation verwenden Vitis-AI-Workflows, die format="xilinx" nicht erzeugt. Trainiere mit Ultralytics und erstelle anschließend das Artefakt für dein Zielgerät mit den AMD-Tools in deren x86-64-Linux-Docker-Images. Wähle den Tab für dein Gerät:

  1. Starte AMDs Vitis-AI-6.3-Docker-Image für Versal AI Edge.

  2. Aktiviere die NPU-Umgebung für die NPU-IP auf deinem Board, indem du settings.sh einliest. Übergib den Namen der NPU-IP deines Boards als Argument oder LIST, um die verfügbaren IPs anzuzeigen.

  3. Erstelle eine Momentaufnahme, indem du ein gewöhnliches Inferenzskript mit repräsentativen Bildern und der gesetzten Umgebungsvariable VAISW_SNAPSHOT_DIRECTORY ausführst. Codeänderungen sind nicht erforderlich:

    # Activate the NPU environment inside the Vitis AI Docker container
    source $VITIS_AI_REPO/npu_ip/settings.sh
    
    # Capture a mixed INT8/BF16 snapshot, calibrating on 100 images from your inference script
    VAISW_SNAPSHOT_DIRECTORY=snapshot.yolo26n VAISW_FE_PRECISION=MIXED VAISW_QUANTIZATION_NBIMAGES=100 python3 my_inference.py

VAISW_FE_PRECISION akzeptiert INT8 (Standard), BF16 oder MIXED. VAISW_QUANTIZATION_NBIMAGES ist standardmäßig auf 4 Bilder eingestellt; lege für Erkennungsmodelle daher eine größere, repräsentative Zahl fest. Die Momentaufnahme ist an die NPU-IP-Variante auf deinem Board gebunden. YOLO-Nachbearbeitungsteile laufen nur mit BF16- oder MIXED-Präzision auf den AI Engines. AMDs Dokumentation zu Softmax ist uneinheitlich: Auf der Beispielseite steht, dass Softmax nicht beschleunigt wird und der Softmax-Abschluss von YOLOv8 der CPU zugewiesen wird, während die Versionshinweise zu Vitis AI 6.1 eine vollständige YOLOv8-Beschleunigung mit gemischter Präzision melden. Prüfe die Datei wrp_network_iriz.onnx in der Momentaufnahme, um zu bestätigen, welche Teile deines Modells, einschließlich der Attention von YOLO11 und YOLO26, auf der NPU ausgeführt werden. Siehe eigenes Modell verwenden.

Richte das Board mit einem Hardwaredesign und einem Linux-Image ein, die die Konfiguration des Beschleunigers enthalten, für die du kompiliert hast, und installiere die passende Vitis-AI-Laufzeitumgebung. Siehe die Einrichtungsanleitungen von AMD für Zynq-UltraScale+- und Kria-DPU-Ziele und Versal AI Edge (VEK280). Kopiere anschließend die von deiner Laufzeitumgebung benötigten Artefakte:

ArbeitsablaufAuf das Board zu kopierende ArtefakteLaufzeitumgebung auf der Platine
DPU (Zynq UltraScale+, Kria)Kompiliertes .xmodelVART; Graph Runner für CPU-Teilgraphen
NPU (Versal AI Edge, VEK280)Verzeichnis der MomentaufnahmeVART-ML

In der DPU speichern VART-Puffer Festkommawerte im INT8-Format: Ermittle für jeden Tensor die Form und die fix_point-Skalierung und quantisiere die Eingaben beziehungsweise dequantisiere die Ausgaben vor der Nachverarbeitung. Der Graph Runner gibt die Ausgaben des gesamten Graphen zurück, während ein reiner DPU-Runner die Ausgaben von Zwischen-Untergraphen der DPU zurückgibt, deren Berechnung dein Code abschließen muss. VART-ML auf dem VEK280 verwendet standardmäßig Hardware-Tensoransichten, deren Form, Datentyp und Speicherlayout von den ONNX-Layouts abweichen können. Konfiguriere daher die Eingabe- und Ausgabe-Tensortypen des Runners als CPU-Ansichten oder wandle das Hardwareformat selbst um (siehe AMDs Übersicht zur VART-ML-Architektur).

Lizenzierung für kommerzielle Produkte

Für den Vertrieb von Ultralytics YOLO als Bestandteil eines kommerziellen AMD-Xilinx-Produkts musst du entweder die Bedingungen der AGPL-3.0-Lizenz einhalten oder eine Ultralytics Enterprise-Lizenz erwerben.

Anwendungen in der Praxis#

AMD-Xilinx-Geräte sind überall verbreitet, wo Vision-KI in Echtzeit, mit geringem Stromverbrauch und in Sensornähe ausgeführt werden muss:

  • Sicherheit in Industrie und Bauwesen: Erkenne Personen und Maschinen in der Nähe schwerer Geräte und überwache Arbeitsbereiche mit Objekterkennung und Objektzählung.
  • Bildverarbeitung für Straßenfahrzeuge und Geländefahrzeuge: Führe kamerabasierte Wahrnehmung auf qualifizierten Fahrzeugkomponenten aus und unterstütze autonome Fahrzeuge sowie Fahrerassistenz.
  • Intelligente Kameras und Videoanalyse: Kombiniere Videoaufnahme, Kodierung und YOLO-Inferenz auf einem Chip für Sicherheitssysteme und Videoanalyse.
  • Industrielle Bildverarbeitung und Qualitätsprüfung: Kombiniere FPGA-basierte Hochgeschwindigkeits-Bildaufnahme mit YOLO-Instanzsegmentierung oder Klassifizierung, um Fehler direkt in der Produktionslinie zu erkennen.
  • Robotik und Drohnen: Nutze Kria KR260 oder Versal-Module für Posenschätzung, Erkennung gedrehter Objekte und Navigation mit deterministischer Latenz.

Zusammenfassung#

Beim Export mit format="xilinx" werden Ultralytics-YOLO-Modelle mit AMD Quark für NPUs der Versal AI Edge Series Gen 2 quantisiert. Der Kopf bleibt in BF16, und die Vitis-AI-Compilerkonfiguration wird neben dem Modell gespeichert. Validiere die INT8-Genauigkeit auf einem beliebigen Host, kompiliere das Modell .rai im Vitis-AI-Docker-Image von AMD und führe es auf dem Board mit ONNX Runtime und dem Vitis AI Execution Provider aus.

Ältere AMD-Xilinx-Geräte verwenden andere Workflows. Die DPU auf Zynq UltraScale+ und Kria nutzt die eingefrorene Vitis-AI-3.5-Toolchain und .xmodel-Dateien, benötigt DPU-eigene Aktivierungsfunktionen wie Hard-Swish und führt die Attention auf der CPU aus. Die Versal-AI-Edge-NPU der ersten Generation verwendet den Snapshot-Workflow; die Operatorabdeckung hängt von der Vitis-AI-Version und der Präzision ab.

Weitere Bereitstellungsziele findest du im Leitfaden zu Modellbereitstellungsoptionen, in den bewährten Vorgehensweisen zur Bereitstellung und in Integrationen für Beschleuniger wie Hailo, Rockchip RKNN und Axelera.

Häufig gestellte Fragen#

  • Ja. AMD schloss die Übernahme von Xilinx im Februar 2022 ab. Xilinx-Produkte werden nun als adaptive SoCs und FPGAs von AMD verkauft: AMD Zynq, AMD Kria, AMD Versal und AMD Vitis. Ingenieure verwenden den Namen Xilinx weiterhin häufig, und die Teilenummern behalten das Präfix XC.

  • Ja. model.export(format="xilinx") quantisiert das Modell mit AMD Quark für NPUs der Versal AI Edge Series Gen 2 und erstellt ein Verzeichnis mit dem quantisierten ONNX-Modell und seiner Vitis-AI-Compilerkonfiguration. Kompiliere es mit den Vitis-AI-Tools von AMD wie unter Auf Versal AI Edge Gen 2 kompilieren und ausführen beschrieben zu .rai. Für Zynq UltraScale+, Kria und VEK280 gelten die Workflows unter Bereitstellung auf anderen AMD-Xilinx-Zielen.

  • Die DPU (Deep-Learning-Verarbeitungseinheit) ist der frühere INT8-Beschleuniger von AMD. Sie ist in die programmierbare Logik von Zynq UltraScale+- und Kria-Geräten integriert, wird mit Vitis AI 3.5 kompiliert und erzeugt .xmodel-Dateien. In aktuellen Vitis-AI-Versionen wird sie durch die NPU ersetzt. In Versal-AI-Edge-Geräten kombiniert die NPU gehärtete AI Engines mit programmierbarer Logik, unterstützt INT8, BF16 und gemischte Präzision sowie mehr Operatoren, darunter SiLU und, bei Versal AI Edge Gen 2, Attention.

  • Eine .xmodel ist ein serialisierter XIR-Graph, der in der AMD-DPU-Werkzeugkette verwendet wird. Der Quantisierer schreibt ein quantisiertes .xmodel, und der Compiler vai_c_xir wandelt es in ein kompiliertes .xmodel um. Dieses enthält den DPU-Befehlsspeicher, quantisierte INT8-Gewichte und alle Teilgraphen, die auf der CPU ausgeführt werden müssen. Die kompilierte Datei ist für eine bestimmte DPU-Konfiguration vorgesehen, die durch einen arch.json-Fingerabdruck beschrieben wird. Sie wird auf dem Board über die Vitis AI Runtime (VART) oder, wenn sie CPU-Teilgraphen enthält, über den Graph Runner ausgeführt.

  • Nein. Die DPU beschleunigt nur die Aktivierungsfunktionen ReLU, ReLU6, LeakyReLU, Hard-Swish und Hard-Sigmoid. Sigmoid, Softmax und MatMul zwischen zwei Aktivierungen führt sie auf der CPU aus. Trainiere YOLO mit activation: nn.Hardswish() in der Modell-YAML-Datei, damit die Faltungen auf der DPU ausgeführt werden. Informationen zu Attention-Optionen findest du unter Attention-Blöcke auf der DPU verarbeiten. NPUs der Versal AI Edge Gen 2 unterstützen SiLU, Softmax und MatMul nativ.

  • Der KV260 verwendet ein Zynq UltraScale+ MPSoC mit einer DPU; folge daher dem DPU-Ablauf. Trainiere ein YOLO26-Modell mit Hard-Swish, quantisiere es mit vai_q_pytorch im Vitis-AI-3.5-Docker-Image, kompiliere es mit vai_c_xir für das arch.json des KV260 und führe das resultierende .xmodel auf dem Board mit VART aus oder mit dem Graph Runner, falls es CPU-Teilgraphen enthält.

  • Nein. Der Export läuft auf jedem Linux-Host mit Python 3.11 bis 3.13 und erfordert kein AMD-Konto. Das exportierte Modell kann zur Genauigkeitsprüfung auf jedem Host auf der CPU ausgeführt werden. Zum Kompilieren des Modells .rai benötigst du AMDs Vitis-AI-Docker-Image und eine Lizenz für den AI-Engine-Compiler. Für die Ausführung auf der NPU brauchst du ein Board der Versal AI Edge Series Gen 2.

  • Ultralytics verwendet den Vitis AI Execution Provider nur, wenn ONNX Runtime ihn bereitstellt, etwa mit AMDs Build onnxruntime-vitisai auf einem Versal-Board oder im Docker-Image von AMD. Andernorts wird das quantisierte Modell mit dem standardmäßigen ONNX Runtime auf der CPU ausgeführt. So misst du die INT8-Genauigkeit vor der Bereitstellung.

  • Jede Aufgabe kann ausgeführt werden, wenn sich ihre Operatoren für deinen Beschleuniger kompilieren lassen. Nicht unterstützte Operatoren werden üblicherweise auf der CPU ausgeführt, einige können jedoch dazu führen, dass das gesamte Modell auf der CPU ausgeführt wird oder die Kompilierung fehlschlägt. Objekterkennung ist der häufigste Arbeitslasttyp und wird auch in AMDs eigenen Beispielen verwendet. Prüfe bei Segmentierung, Posenschätzung und anderen Aufgaben den Partitionierungsbericht des Compilers, um sicherzustellen, dass die rechenintensiven Schichten auf dem Beschleuniger laufen.

Mitwirkende

Kommentare