Portabilität für Deep-Learning-Modelle mit ONNX

Mit Open-Source-Tools wie TensorFlow oder PyTorch lassen sich Machine-Learning-Modelle relativ einfach erstellen und trainieren, aber das Übertragen in den produktiven Betrieb oder zu anderen Tools ist alles andere als trivial. Abhilfe soll das ONNX-Format zum Austausch von Modellen schaffen.

Know-how  –  2 Kommentare

Andrew Ng, der zu den bekanntesten Köpfen im Bereich Künstliche Intelligenz (KI) zählt, hat den Satz "KI ist die neue Elektrizität" geprägt. Er ruft regelmäßig zu einer KI-getriebenen Gesellschaft auf, wie bei seinem Auftritt bei der AI Frontiers Konferenz 2017. Doch trotz zahlreicher wissenschaftlicher Durchbrüche, begeisternder Proof-of-Concept-Präsentation und vor allem ständig neuer Frameworks für Machine Learning (ML) bleiben Themen wie die einfache Überführung der Modelle in den Produktivbetrieb und die Interoperabilität zwischen Frameworks bisher auf der Strecke.

Analog zu der Elektrizität, die ihren Weg aus dem Labor in Milliarden Haushalte, Büros und Fabriken gefunden hat, lassen sich ML-Anwendungen schnell und einfach einem größerem Publikum zugänglich machen. Der praktische Weg vom Prototyping zum produktiven Einsatz eines Modells ist nicht an ein spezielles Framework gebunden. Stattdessen lassen sich die Stärken unterschiedlicher Frameworks kombinieren.

An der Stelle kommt das Format Open Neural Network eXchange (ONNX) zum Einsatz, das das Exportieren trainierter und untrainierter Modelle aus einem Framework in eine standardisierte Darstellung ermöglicht, um sie anschließend in einem anderen Framework wiederzuverwenden. Zur Veranschaulichung soll ein Praxisbeispiel zum Erkennen von Ziffern und Buchstaben in Bildern dienen, das in folgenden vier Schritten den Weg von der Exploration bis zur Produktion durchläuft:

  • Datenexploration
  • Modellentwicklung
  • Modellübersetzung
  • Modell-Deployment

Als Grundlage dient der EMNIST Datensatz. Das prototypische Modell entsteht in PyTorch. Auf den Export des Modells in eine generische Repräsentation über ONNX folgt dessen Import in TensorFlow und das Abspeichern in ein serialisiertes Dateiformat. Für das abschließende Deployment kommt GraphPipe zum Einsatz, das einen Modellserver mit TensorFlow Serving erzeugt, der als Antwort auf REST-Anfragen Klassifikationen der Testbilder liefert.

Der gesamte Code ist im GitHub-Repository des Autors verfügbar.

Übersetzung von PyTorch zu TensorFlow mit ONNX (Abb. 1)

Erkunden der Daten

Data Scientists schauen typischerweise zu Beginn jedes Projekts zunächst in ihre Daten und versuchen, eine grobe Vorstellung von Struktur, Qualität und Umfang zu erhalten. Der MNIST-Datensatz gilt dafür als eine Art "Hello World" des Deep Learning und ist Grundlage vieler Tutorials. Weniger bekannt, aber anspruchsvoller ist hingegen der Extended-MNIST-Datensatz (EMNIST). Die Erweiterung umfasst neben handschriftlichen Ziffern zusätzlich Klein- und Großbuchstaben des lateinischen Alphabets. Somit wächst die Zahl der Klassen von zehn auf 62 (10 + 2 * 26). Das Auseinanderhalten ist damit deutlich schwieriger, aber auch realistischer. Das Modell muss zwischen "0", "O" und "o" unterscheiden, was nicht nur bei Handschriften eine echte Herausforderung sein kann.

Das US National Institute of Standards and Technology (NIST) stellt den Datensatz bereit, der insgesamt 814.255 Graufarben-Bilder im Format 28x28 umfasst. Er bietet eine Aufteilung in Trainings- und Testdatensatz im Verhältnis 6:1. Wer mehr Informationen sucht, findet sie in der ausführlichen Beschreibung.

EMNIST Beispielbilder für 8, a, N (Abb. 2)

ML-Konferenz M³ London

Vom 30. September bis zum 2. Oktober findet in London die M³ 2019 statt. Für die von heise Developer und The Register ausgerichteten Entwicklerkonferenz zu Machine Learning gilt noch bis zum 22. Juli der Frühbucherrabatt mit günstigeren Ticketpreisen.

Ungleichmäßige Klassenhäufigkeiten sind ein erwartetes Problem in dem Datensatz. Die Hälfte der Bilder zeigt Ziffern und nur jeweils ein Viertel Groß- und Kleinbuchstaben. Innerhalb der Buchstabengruppen schwanken die Anteile der einzelnen Buchstaben zwischen ein und fünfzehn Prozent – ebenso wie ihre Verwendungshäufigkeit in der Sprache stark streut. Nichtsdestotrotz sind die Verteilungen zwischen Trainings- und Testdatensatz ähnlich. Eine ungleichmäßige Klassenhäufigkeit kann die Klassifikationsgüte negativ beeinflussen, aber als Gegenmittel existieren viele Methoden wie Downsampling, Upsampling, oder synthetisches Upsampling.