Skalierbares TensorFlow-Inferenzsystem

Last reviewed 2023-11-02 UTC

In dieser Referenzarchitekturreihe wird beschrieben, wie Sie mithilfe einer NVIDIA® T4-GPU und Triton Inference Server ein leistungsstarkes Online-Inferenzsystem für Deep Learning-Modelle entwerfen und bereitstellen.

Mit dieser Architektur können Sie ein System erstellen, das maschinelle Lernmodelle verwendet und die GPU-Beschleunigung nutzen kann. Mit Google Kubernetes Engine (GKE) können Sie das System gemäß einer wachsenden Anzahl von Clients skalieren. Sie können den Durchsatz verbessern und die Latenz des Systems reduzieren, indem Sie die in dieser Reihe beschriebenen Optimierungstechniken anwenden.

Diese Reihe richtet sich an Entwickler, die mit Google Kubernetes Engine und ML-Frameworks (ML) vertraut sind, einschließlich TensorFlow und NVIDIA TensorRT.

Die folgenden Dokumente sind in dieser Reihe enthalten:

Architektur

Das folgende Diagramm zeigt die Architektur des Inferenzsystems.

Architektur des Inferenzsystems.

Diese Architektur umfasst die folgenden Komponenten:

  • Cloud Load Balancing: Sendet den Anfragetraffic an den GKE-Cluster, der dem Client am nächsten ist.

  • GKE-Cluster: Enthält die Clusterknoten und Monitoring-Server. Wenn Clients Anfragen aus mehreren Regionen senden, können Sie GKE-Cluster in mehreren Regionen bereitstellen. Sie stellen das Locust-Belastungstest-Tool auf demselben Cluster bereit.

  • Clusterknoten mit GPU-Beschleuniger: Enthält Triton Inference Server-Pods; für jeden Knoten wird ein einzelner Pod eingesetzt (eine einzelne GPU kann nicht von mehreren Pods genutzt werden).

  • Triton Inference Server: Stellt ResNet-50-Modelle bereit, die Sie erstellen. Der Server stellt einen Inferenzdienst über einen HTTP- oder gRPC-Endpunkt bereit. Mit dem Inferenzdienst können Remote-Clients die Ableitung eines Modells anfordern, das vom Server verwaltet wird.

  • NVIDIA T4: Verbessert die Inferenzleistung. Für jeden Pod muss eine NVIDIA T4 vorhanden sein. Diese GPU bietet Tensor Cores, spezielle Verarbeitungseinheiten, die INT8- und FP16-Berechnungen unterstützen und beschleunigen.

  • Monitoring-Server: Erfassen Sie Messwertdaten zur GPU-Auslastung und Speichernutzung von Triton. Für die Überwachung und Benachrichtigung von Ereignissen verwenden Sie Prometheus. Sie verwenden Grafana, um in Prometheus gespeicherte Leistungsdaten zu visualisieren und zu analysieren.

Überlegungen zum Design

Die folgenden Richtlinien können Ihnen bei der Entwicklung einer Architektur helfen, die den Anforderungen Ihrer Organisation hinsichtlich Zuverlässigkeit und Leistung entspricht.

Zuverlässigkeit

Diese Architektur verwendet GKE für Skalierbarkeit und flexible Ressourcenverwaltung.

Durch Bereitstellung des Systems auf GKE können Sie das System entsprechend der Anzahl der Clients skalieren. Sie können GKE-Cluster in mehreren Regionen bereitstellen und die Anzahl der Knoten im Cluster erhöhen.

Leistungsoptimierung

Beachten Sie beim Optimieren der Leistung die folgenden allgemeinen Richtlinien:

  • Definieren Sie die Leistungsmesswerte und Zielleistung entsprechend dem Anwendungsfall des Systems.
  • Messen Sie die Referenzleistung, bevor Sie die Leistungsoptimierung anwenden.
  • Wenden Sie einzelne Änderungen an und beobachten Sie die Verbesserung. Bei mehreren gleichzeitig angewendeten Änderungen können Sie nicht feststellen, welche Änderung die Verbesserung bewirkt hat.
  • Erfassen Sie geeignete Messwerte, um die Leistungsmerkmale zu verstehen und die nächste Aktion zur Leistungsoptimierung festzulegen.

Mithilfe der Richtlinien messen Sie die Leistungssteigerung, die durch folgende Faktoren erzielt wird:

  • TensorRT (Grafikoptimierung). TensorRT wendet Grafikoptimierungen für NVIDIA T4 an. Beispielsweise werden Deep-Learning-Modelle automatisch so geändert, dass sie mit Tensor Core verarbeitet werden können. Zuerst beobachten Sie die Inferenzleistung ohne TensorRT als Referenz. Danach können Sie beobachten, wie sich die Leistung der TensorRT-Grafikoptimierung verbessert.

  • FP16-Konvertierung. NVIDIA T4 unterstützt FP32 (32-Bit-Gleitkommazahl) und FP16 für Gleitkommaberechnungen. Wenn Sie die Genauigkeit der Variablen vom Standardgleitkommaformat FP32 zu FP16 ändern, können Sie die Inferenzleistung verbessern.

  • INT8-Quantisierung. Quantisierung ist eine Optimierungstechnik für Deep-Learning-Modelle, die die Rechenleistung von GPUs verbessert. NVIDIA T4 unterstützt INT8-Variablen mit 8 Bit für die Quantisierung. Im Vergleich zur Konvertierung auf FP16 kann die INT8-Quantisierung eine verbesserte Leistung bieten, aber möglicherweise die Genauigkeit verringern. TensorRT verwendet jedoch einen Kalibrierungsprozess, der den Informationsverlust bei der Berechnung minimiert.

  • Batchgröße und Anzahl von Instanzgruppen. Sie können die Batchgröße und die Anzahl der Instanzgruppen mithilfe von Triton anpassen. Wenn Sie beispielsweise eine Batchgröße auf 16 festlegen, werden Inferenzanfragen in einer Batchwarteschlange gespeichert und 16 Anfragen als einzelner Batch verarbeitet. Wenn Sie dagegen eine Reihe von Instanzgruppen auf 4 festlegen, werden mehrere Anfragen mit vier Threads parallel verarbeitet. In diesem Szenario gibt es 16 Anfragen in jedem Batch und 4 Threads mit paralleler Verarbeitung. Das bedeutet, dass 64 Anfragen gleichzeitig auf einer einzelnen GPU verarbeitet werden.

    Durch Erhöhen der Anzahl von Instanzgruppen kann TensorRT eine höhere GPU-Auslastung erzielen. Gleichzeitig können Sie mit der Anpassung der Batchgröße Triton-Berechnungen auf der GPU optimieren. Beispielsweise ist es möglich, mehrere Berechnungen aus verschiedenen Anfragen zu einer einzigen Berechnungsaufgabe in Tensor Core zu kombinieren.

Bereitstellung

Informationen zum Bereitstellen dieser Architektur finden Sie unter Skalierbares TensorFlow-Inferenzsystem bereitstellen.

Weitere Informationen zum Messen und Optimieren der Bereitstellung finden Sie unter Leistung eines TensorFlow-Inferenzsystems messen und optimieren.

Nächste Schritte