AutoML in UWP: Ja oder Nein?

Wie sich Machine Learning in modernen Apps nutzen lässt
Keine Kommentare

Das Machine-Learning-Portfolio für Entwickler ist breit und komplex und bietet neben klassischen Algorithmen auch die Möglichkeit, neuronale Netzwerke bei der Lösungsfindung zu nutzen. Eine ebenfalls neue Möglichkeit für Entwickler gibt es im Bereich Oberflächengestaltung. Mit Windows 10 hat Microsoft die Universal Windows Platform (UWP) eingeführt. Kann man nun ML und UWP auch sinnvoll zusammenbringen?

Das ML.NET Framework von Microsoft kennt allein zehn Algorithmen für Klassifizierungen mit mehreren möglichen Werten (Multiclass) [1]. FastTree, LightGBM und Fast Forest: Welcher Algorithmus ist für die vorliegenden Daten am besten geeignet? Welcher kommt mit mehr Daten zurecht, welcher kommt mit wenigen aus? Welcher kann meine komplexen oder einfachen Datenstrukturen am besten interpretieren? Um diese Fragen zu beantworten, kann man entweder den Algorithmus dahinter studieren oder – was naheliegender ist – es ausprobieren. Genau das macht AutoML. Als Teil von ML.NET nimmt es eine Datenstruktur, trainiert mehrere Modelle damit, misst, welcher Algorithmus am besten funktioniert, und liefert diesen dann an den Entwickler und die Entwicklerin zurück.

Eine weitere neue Möglichkeit eröffnet sich den Entwicklern im Bereich Oberflächengestaltung. Mit Windows 10 hat Microsoft die Universal Windows Platform (UWP) eingeführt. UWP ermöglicht es nach Jahrzehnten der Windows Forms Executables, Software in einem festen Rahmenwerk an den Nutzer zu bringen [2]. Die eigene App oder das eigene Spiel können dann auf all denjenigen Geräten genutzt werden, die Windows 10 als Basisbetriebssystem nutzen: Desktop-PCs, Smartphones, VR-Brillen (HoloLens), Konsolen (Xbox) und Windows-IoT-Geräte. Durch konsolidierte APIs und strenge Regeln im Zusammenspiel von App und Betriebssystem können UWP-Apps durch den Windows-Store komfortabel auf eine Vielzahl von Geräten verteilt werden [3]. Zur Definition der Oberfläche nutzen UWP-Apps die schon von der Windows Presentation Foundation (WPF) bekannte Extensible Application Markup Language (XAML). Im Vergleich zur Windows-Forms-Programmierung ist die Erstellung von auflösungsunabhängigen Oberflächen hiermit einfacher [4]. Programmieren mit XAML ist ein wichtiger Baustein für die Plattformunabhängigkeit von Apps. UWP unterstützt neben der klassischen Eingabe per Maus und Tastatur auch modernere Eingabeformen wie Spracheingabe, Kamerabild und Gesten. Abbildung 1 zeigt den Windows-Taschenrechner im neuen UWP-Design. Hier ist der Hintergrund zum Beispiel semitransparent – in UWP-Apps ist das eine einfache, aber effektive Farbeinstellung.

Abb. 1: UWP-Layout mit Transparenzeffekt (Quelle: adesso)

Abb. 1: UWP-Layout mit Transparenzeffekt (Quelle: adesso)

Die Möglichkeiten im Überblick

Wie bringt man einen neuartigen App-Lifecycle mit einem modernen Layout und dem genau passenden Algorithmus für ein neuronales Netz zusammen? Die Antwort auf diese Frage ist das NuGet-Paket Microsoft.ML. Das plattformunabhängige Paket funktioniert auf .NET Framework, .NET Core sowie .NET Standard und kann dadurch neben Windows auch auf Linux genutzt werden. Doch bevor ich auf die Details der AutoML-Möglichkeiten eingehe, nehmen wir zunächst eine Einordnung in das KI-Ökosystem von Microsoft vor.

Das älteste heute genutzte Framework von Microsoft ist das 2014 veröffentlichte Microsoft Cognitive Toolkit (CNTK). Zunächst startete es als C++-Bibliothek – heutzutage bietet es auch Wrapper für C#, Java und Python. Die schnellsten Erfolge feiern Entwickler dagegen in der Regel bei der Nutzung der Cognitive Services. Diese Cloud-basierten Dienste erweitern die eigene Anwendung um von Microsoft vortrainierte und stets auf dem neuesten Stand gehaltene Modelle, unter anderem zur Erkennung von gesprochener Sprache, zur Objekterkennung in Bildern und zur Analyse von Texten.

Mit Azure Machine Learning bietet Microsoft eine webbasierte Drag-and-drop-Umgebung zum Erstellen von einfachen bis hin zu komplexen neuronalen Netzen auf Basis eigener Daten. Nach erfolgreicher Modellgenerierung wird das Modell in Form eines Web-Service bereitgestellt, der von der eigenen Anwendung konsumiert werden kann.

Besucher diverser Internetauftritte, beispielsweise von Krankenkassen und Produktanbietern, kennen sie vielleicht: eine „Wie kann ich helfen?“-Chatbox, die mit einem FAQ-Wissensschatz natürlich wirkende Kommunikation mit Nutzern ermöglicht. So eine Mensch-Maschine-Interaktion bietet unter anderem das Bot Framework von Microsoft. Im Hintergrund läuft ein Dienst zur Spracherkennung. Sprache wird in Keywords übersetzt, anhand derer dem Nutzer eine qualifizierte Antwort gegeben werden kann. Dabei stehen neben dem Webchat viele weitere Kanäle zur Verfügung: gängige Chat-Apps wie Telegram; die eigene Anwendung per API oder gar per E-Mail lassen sich damit als Kommunikationskanal nutzen.

Ein vergleichsweiser neuer Dienst ist Windows ML, das mit neueren Windows-10-Versionen und für den Windows Server 2019 verfügbar ist. Als Interface zwischen Anwendung und Modell bietet Windows ML die Ausführung von Modellen im Format Open Neural Network Exchange (ONNX) mit Hardwarebeschleunigung. Anwendungen konsumieren dann nur noch dieses Modell, Windows ML kümmert sich um den Rest. Das ONNX-Format wurde von Facebook und Microsoft mit dem Ziel ins Leben gerufen, neuronale Netzwerke auch plattformübergreifend verfügbar zu machen. Außerdem lassen sich mit dem beliebten Python-basierten Framework TensorFlow erstellte Modelle so auch in .NET-Umgebungen nutzen – und umgekehrt.

Zu guter Letzt gibt es ML.NET. Gerade für unternehmensspezifische Modelle, die aus verschiedenen Gründen nicht in der Cloud generiert werden sollen – etwa aus Datenschutzgründen – ist ML.NET eine gute Wahl für Unternehmen, die ihre eigenen Daten über ein Modell in die Produktion einbinden wollen.

Und damit schließt sich der Kreis zu AutoML. Trotz immer größerer Rechenpower für die Modellgenerierung auf den führenden Plattformen von Google [5], Amazon [6] und Microsoft [7] ist diese gar nicht für alle Modelle erforderlich. Microsoft hat bei der Optimierung von ML.NET im Vergleich zu Open-Source-Produkten gute Arbeit geleistet und bietet .NET-Entwicklern ein Framework, das auch auf Consumer-Hardware gute Ergebnisse liefern kann [8]. Das Datenset NYC Taxi Fare zum Beispiel bietet mit nur 24 MB Dateigröße über eine Million Datensätze zu Taxifahrten in New York City [9]. Lässt man AutoML für nur 60 Sekunden auf einem Intel i5 von 2012 trainieren, kommt dabei ein Modell mit stolzen 97 Prozent Genauigkeit bei der Ermittlung von Preisen mittels Regression heraus. Abbildung 2 zeigt die Ausführung mit der Kommandozeile.

Abb. 2: Testausführung auf CPU von 2008 (Quelle: adesso)

Abb. 2: Testausführung auf CPU von 2008 (Quelle: adesso)

Auch bei der Zugänglichkeit zur AutoML-Technologie macht Microsoft mehrere Schritte auf Entwickler zu und bietet einen in Visual Studio integrierten Projektgenerator, ein Command-Line-Tool sowie die optionale Generierung rein über Code.

Neben der Ermittlung von Zahlenwerten wie im letztgenannten Beispiel der Taxis in New York City bietet Microsoft mit AutoML-Codegeneratoren für folgende Nutzungsszenarien (Stand Dezember 2019):

  • Einordnung von Daten in zwei Gruppen: zum Beispiel „ja“ und „nein“ bei Kaufentscheidungen oder „gut“ und „schlecht“ bei der Stimmungsanalyse etwa von Tweets oder Bewertungen (binäre Klassifikation).

  • Einordnung von Daten in drei oder mehr Gruppen: Ein Beispiel ist die Ermittlung von Blumenarten, wenn Daten wie Maße und Farben bekannt sind (mehrfache Klassifizierung).

  • Erkennen von Zusammenhängen in Bildern: Mittels ML.NET lassen sich Bilder etwa einer Kamera zuordnen. Beispiele wären die Erkennung von Autos auf einer Webcam zur Ermittlung freier Parkplätze oder die visuelle Erkennung von Produktionsfehlern direkt auf den Lieferbändern.

Online vs. On-Premise

UWP-Apps laufen hauptsächlich auf On-Premise-Geräten. Doch ist es eine gute Idee, deswegen auch das Machine Learning auf der eigenen Hardware zu betreiben? Auch wenn das Vertrauen deutscher Unternehmen in die Cloud wächst, kann es Gründe geben, Modelle nicht in der Cloud zu generieren [10]. Ebenfalls gibt es Fälle, in denen die Nutzung von Cloud-Infrastruktur für Machine Learning die einzige Option ist, etwa bei sehr großen Modellen. Ein Faktor ist unter anderem die Netzanbindung. Das Bundesministerium für Verkehr und digitale Infrastruktur unterhält den Breitbandaltlas [11]. Darin zeichnet die Karte für Gewerbliche Breitbandverfügbarkeit Glasfaser ≥ 1000 Mbit/s ein trauriges Bild: Bis heute verfügen wenige Gebiete flächendeckend über schnelle Anschlüsse. Nutzen Unternehmen dieselben Netze wie Privatpersonen, sind sie mit durchschnittlich 21 Mbit/s im Upload ausgestattet [12]. Jeder Upload von 5 GB Daten dauert demnach fast 32 Minuten – und zwar jedes Mal.

Da es sich um einen Durchschnittswert handelt, liegt die Hälfte der Unternehmen bei noch höheren Werten, bis hin zu Regionen, die nicht einmal über DSL-Anschlüsse verfügen. Bei fortlaufender Nutzung von Cloud-Diensten kommt zudem eine zusätzliche Belastung auf die möglicherweise schwache Internetanbindung dazu. Da liegt die Überlegung nahe, die Generierung auf den eigenen Systemen stattfinden zu lassen. Microsoft hat für solche Fälle einen Ausweg parat, zumindest bei den Cognitive Services. Je nach Anwendungsfall bietet Microsoft ein Docker Image [13]. Damit lassen sich die sonst in der Cloud laufenden Dienste im eigenen Serverraum nutzen, ohne dass die Bandbreite leidet.

Weitere Vorzüge von Cloud-Diensten wie dem Azure Machine Learning Studio gegenüber lokal entwickelten Modellen sind die Einfachheit, die Performance und die Aktualität. Ähnlich wie bei SharePoint Online aktualisiert Microsoft sein ML Studio on the fly. Neue Tools, Bugfixes, Optimierungen und Algorithmen sind schneller verfügbar als ein On-Premise-Entwickler sie erfassen oder nachentwickeln könnte. Das Performanceblatt wendet sich noch einmal gänzlich, wenn es um Deep Learning geht. Die bisher beschriebenen Möglichkeiten von AutoML generieren vergleichsweise kleine neuronale Netze. Bei obiger Beispieltabelle der Taxis in New York sind es sechs Datenpunkte je Datenzeile. Abbildung 3 zeigt das durch ML.NET generierte Modell. Wenn beim Deep Learning Bilder analysiert werden, sind das bei einer Bildauflösung von 420 x 420 Pixeln schon 176 400 Datenpunkte je Datenzeile. Das Mehr an benötigter Performance können Cloud-Dienste dabei erbringen, ohne dass man zusätzlich in eigene Hardware investieren muss.

Abb. 3: Das NYC-Taxi-Modell aus ML.NET visualisiert, mittels Netron [14] (Quelle: adesso)

Abb. 3: Das NYC-Taxi-Modell aus ML.NET visualisiert, mittels Netron [14] (Quelle: adesso)

Umgang mit Trainingsdaten in UWP-Apps

Wenn die Modellgenerierung oder die Modellnutzung aus einer UWP-App heraus stattfinden soll, gibt es für den Entwickler zwar eine Komforthürde, zugleich zwingt es aber auch zu sauberer Programmierung. UWP-Anwendungen können nicht direkt auf Dateien außerhalb ihres eigenen Arbeitsbereichs zugreifen. Für Nutzer ist das ein beruhigendes Feature: Die Anwendung kann nicht ungefragt etwa die eigene Finanzplanung.xlsx lesen oder gar verschicken, wie das bisher bei klassischen Executables der Fall war. Um dennoch an Trainingsdaten zu kommen, muss der Zugriff mittels Nutzerinteraktion legitimiert werden. Das geht zum Beispiel durch den bekannten Open-File-Dialog:

var picker = new Windows.Storage.Pickers.FileOpenPicker();
  picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
  picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
picker.FileTypeFilter.Add(".csv");
 
StorageFile pickedFile = await picker.PickSingleFileAsync();
 

Anschließend kann die Datei in den Arbeitsordner kopiert werden:

var currentWorkSpaceFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync("TrainingsDaten");
StorageFile copiedFile = await pickedFile.CopyAsync(currentWorkSpaceFolder,"MeineTrainingsdaten.csv", NameCollisionOption.ReplaceExisting);
 

Liegt die Datei im eigenen Arbeitsordner, kann sie, wie man es gewohnt ist, genutzt werden. Der Standard-TextLoader von Microsoft.ML kann nun mit StorageFile verwendet werden:

[…]
mlContext.Data.LoadFromTextFile(copiedFile.Path, textloaderOptions)

copiedFile.Path enthält dabei den vollen Pfad auf der Festplatte als String.

Fazit

Bei Machine Learning treffen im Jahr 2020 viele Möglichkeiten auf viel Performance – ein ideales Umfeld, um große wie kleine Vorhaben zu realisieren. Wenn klar ist, wie der eigene Datenschatz gewinnbringend eingesetzt werden soll, ist die Wahl des passenden Werkzeugs der nächste Schritt. Hier steht Entwicklern und Unternehmen die ganze Bandbreite fertiger Modelle bis hin zu Eigenentwicklungen offen. Dabei können auch UWP-Apps zum Erstellen und Nutzen von Modellen berücksichtigt werden [14].

 

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -