Für den optimierten Fluss

TensorFlow 1.7 – Integration von Nvidias TensorRT verbessert

Marcel Richters
TensorFlow

© Shutterstock.com / Kudra

TensorFlow 1.7 ist erschienen und die Machine-Learning-Bibliothek bringt neben mehreren neuen Features auch diverse Bugfixes. Obwohl das letzte Release nicht einmal ganz einen Monat her ist, gibt es in TensorFlow 1.7 eine ganz besonders weitreichende Neuerung – was zeigt, wie schnell sich derzeit der gesamte Bereich rund ums Machine Learning entwickelt.

Mit der neuen Version wird TensorRT vollständig in TensorFlow integriert. Die C++-Bibliothek soll besonders schnelle Inferences auf GPUs ermöglichen. Insbesondere von den FP16- und INT8-Optimierungen durch TensorRT soll TensorFlow profitieren können. TensorRT kann dabei laut Entwickler NVIDIA helfen, während Inferences auf GPUs den Durchsatz zu maximieren und die Latenz zu minimieren, da die leistungsfähigsten Kernel je nach Plattform automatisch ausgewählt werden.

Bei Tests konnte mit TensorRT auf NVIDIA Volta Tensor Cores eine bis zu achtmal schnellere Performance bei ResNet-50 gemessen werden als ohne TensorRT. Die Latenz lag bei 7 Millisekunden. Um diese Werte zu erreichen, passiert folgendes: TensorRT optimiert die Netzwerkdefinitionen, indem Tensoren und Layer zusammengeführt, die effizientesten Zwischenformate genutzt und aus einem großen Kernel-Katalog basierend auf den Layer-Parametern und der Leistung ausgewählt werden.

Daneben enthält die Bibliothek mehrere Import-Methods, die helfen sollen, Deep-Learning-Modelle für TensorRT zu optimieren. Hilfreich ist dabei auch ein Tool, mit dem sich die schnellste Implementierungsmethode (basierend auf Graphenoptimierung und Layer-Fusion) herausfinden lässt. Mit einer ebenfalls integrierten Laufzeit können TensorRT-Netzwerke in einem Inferenz-Kontext ausgeführt werden. Auch die Hochgeschwindigkeitsfunktionen von Volta- und Pascal-GPUs für die optionale Optimierung lassen sich mithilfe der Laufzeit nutzen. Dafür optimiert TensorRT kompatible Sub-Graphen, TensorFlow kümmert sich um den Rest. So lassen sich die umfangreichen Features von TensorFlow verwenden, um Modelle einerseits schnell zu entwicklen, aber gleichzeitig mit TensorRT die optimale Leistung zu erzielen.

Während es bisher vorkam, dass nicht unterstützte Layer manuell importiert werden mussten, kann jetzt TensorRT die Optimierung vornehmen und jeden Sub-Graph durch einen von TensorRT optimierten Node ersetzen.

TensorRT

Der Workflow mit TensorRT-Integration. Quelle: Google

Mit TensorFlow 1.7 werden Graphen in unterstützen Bereichen zuerst ausgeführt, also bevor TensorRT für die Ausführung der optimierten Knoten aufgerufen wird. Wenn beispielsweise ein Modell aus drei Teilen (A, B, C) besteht, würde nur B durch TensorRT optimiert und durch einen einzigen Node ersetzt. TensorFlow führt erst A aus, TensorRT führt B aus und TensorFlow dann wieder C.

Zusätzlich lassen sich mit TensorRT eingefrorene TF-Graphen optimieren, auch auf Sub-Graphen wird die Optimierung angewandt. Danach werden diese inklusive aller Änderungen an TensorFlow zurückgesendet und dort weiter verarbeitet. Das sieht dann so aus:

# Reserve memory for TensorRT inference engine
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction = number_between_0_and_1)
... 
trt_graph = trt.create_inference_graph(
                 input_graph_def = frozen_graph_def, 
                 outputs = output_node_name,
                 max_batch_size=batch_size,
                 max_workspace_size_bytes=workspace_size,
                 precision_mode=precision)  # Get optimized graph

Neben den umfangreichen Neuerungen bezüglich TensorRT bietet TensorFlow 1.7 jetzt eine graphische Benutzeroberfläche (GUI) für den Debugger, diverse Bugfixes und zwei Deprecations. So wird voraussichtlich ab TensorFlow 1.8 das Cuda-Toolkit von Nvidia nicht mehr in Versionen unterhalb von 8.0 unterstützt. Damit unterstützt TensorFlow 1.8 dann voraussichtlich auch keine Grafikkarten der Maxwell-Serie und niedriger mehr. Die Grafikkarten mit Maxwell-GPU wurden bereits 2014 von Nvidia veröffentlicht. Ähnliches gilt für cuDNN. Dieses wird ab TensorFlow 1.8 nur noch in Version 6.0 oder höher unterstützt.

Alle Neuerungen und BugFixes lassen sich in den Release Notes bei GitHub finden.

Geschrieben von
Marcel Richters
Marcel Richters
Marcel hat Soziologie an der Goethe-Universität in Frankfurt am Main studiert und danach als E-Commerce-Manager gearbeitet. Seit Februar 2018 unterstützt er das Team von JAXenter als Redakteur. Daneben arbeitet er als freier Journalist in der Mainmetropole.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: