Execution Provider
Als ExecutionProvider stehen bislang zur Verfügung:
- CPU
- CUDA
Der ExecutionProvider wird mit der Configure-Methode des FB_MlSvrPrediction übergeben.
CPU
Die Ausführung des geladenen KI-Modells wird auf den CPU-Ressourcen des IPC ausgeführt. Ist auf demselben Gerät eine TwinCAT-Laufzeit aktiv, können nur die CPU-Ressourcen genutzt werden, die nicht von TwinCAT beansprucht werden (Isolated Cores werden nur von TwinCAT verwendet, Shared Cores können nur zeitlich eingeschränkt genutzt werden). Das Betriebssystem übernimmt die Parallelisierung der Berechnung auf alle zur Verfügung stehenden Threads.
Erstellen mehrere Clients eine Session mit Execution Provider CPU auf einem Server, so werden die Inferenzanfragen nacheinander abgearbeitet. Beachten Sie dazu den Priority
Parameter beim Predict-Aufruf.
CUDA
Die Ausführung des geladenen KI-Modells wird auf den GPU-Ressourcen des IPC ausgeführt. Es können mehrere Sessions auf einer GPU parallel betrieben werden insofern die Ressourcen der GPU ausreichen.
Das Feld nDeviceId
ermöglicht die Unterscheidung zwischen potentiell mehreren installierten Graphikkarten. Für Rechner mit höchstens einer Graphikkarte kann der Wert auf dem Defaultwert belassen werden, ansonsten entspricht das Feld dem CUDA compute index der Graphikkarten. Sollte ein Rechner mit mehreren Graphikkarten verwendet werden, sollten folgende Systemumgebungsvariable gesetzt werden:
CUDA_DEVICE_ORDER='PCI_BUS_ID'
Weiterhin ermöglicht der TcMlServer das Teilen von Inferenzressourcen zwischen verschiedenen FBs, die eine gleiche Spezifikation für ihre Inferenzsession bereitstellen. Die Nutzung einer geteilten Inferenzmaschine (bExclusiveSession
= FALSE
) kann in Fällen vorkommen, in denen anderweitig ein Engpass -zum Beispiel an Speicher auf Graphikkarten- zu erwarten wäre. Für zustandsbehaftete Modelle (z. B. rekurrente Modelle), ist aber von einer solchen Konfiguration abzusehen.