[PYTHON] Ich möchte maschinelles Lernen auch ohne Server durchführen - Time Series Edition -

Wir planen, es nach Bedarf zu aktualisieren, während wir daran arbeiten.

*aktualisieren

Im Januar 2017 wurde die Implementierung des Prototyps abgeschlossen. Wir haben in AWS Premier Night # 3 über diese Implementierung gesprochen. Weitere Informationen finden Sie unter [hier](http: http: http: //blog.serverworks.co.jp/tech/2017/01/13/awspremier3-starting-serverless-ml/) Bitte lesen Sie den Artikel.

Im Grunde ist es ein Artikel, in dem ich nur ein paar leckere Speisen machen möchte. Ein Versuch, eine einfache Bedienung und maschinelles Lernen gleichzeitig zu erreichen, indem die ML-Logik als Service aktiviert wird.

In diesem Artikel werde ich hier die Untersuchung beschreiben, um die Logik der "Zeitreihenanalyse" auf die serverlose Infrastruktur des FaaS-Systems oder der verwalteten Infrastruktur wie PaaS anzuwenden, wenn dies möglich ist. Bitte beachten Sie, dass die Details der Analysemethode nicht besprochen werden.

Tor

Derzeit ist das Ziel, ob der Ort, an dem sich die Implementierung des Analyseprozesses bewegt, (wahrscheinlich) einfacher zu bedienen ist als der herkömmliche physische / virtuelle Server. Die Grundlinie ist um FaaS und PaaS.

Einführung

Die Analyse, die ich versuche, ist "Zeitreihenanalyse". Im Rahmen der Infrastrukturüberwachung ist die Erkennung von Ausreißern / Änderungspunkten anwendbar. Kürzlich haben Sie Datadog als Beta-Version implementiert. Ich finde es sehr schön. => http://docs.datadoghq.com/ja/guides/anomalies/

Die Erkennung von Ausreißern / Änderungspunkten basiert auf früheren Daten, um zu bestimmen, ob die ** aktuellen Daten ** ein Wert sind, der im Hinblick auf vergangene Trends notiert werden sollte. Es ist eine Methode zur Bestimmung des aktuellen Werts und kann die Zukunft nicht vorhersagen. Andererseits ist die Methode, die ich diesmal verwende, "Future Value Prediction Logic" unter Verwendung von Methoden wie _AR (Auto Regression) _ und _MA (Moving Average) _.

Das prognostizierte Ziel ist "monatlicher Umsatz". Importieren Sie die aggregierte monatliche Verkaufsleistung aus CRM (in meinem Fall Salesforce) und verwenden Sie das Zeitreihenanalyse-Framework, um die letzten Verkäufe für N Monate vorherzusagen.

(Referenz) Inspirierte den nächsten

ML als Servicewerkstatt. Ein Spin-off-Ereignis von ServerlessConf. => [Sonderplan] Serverless Machine Learning Workshop => SlideShare

Annahme

Die verwendete Sprache ist im Grunde Python. Die Bibliothek rund um maschinelles Lernen ist umfangreich, die Umgebung, die Python unterstützt, ist groß und ich mag es.

In dieser Implementierung werden die folgenden Bibliotheken verwendet.

Ziel der Überlegung

Ich habe die Kandidaten aufgelistet, an die ich denken kann. Es gibt viele Dinge, die ich nicht berücksichtigt und nie benutzt habe. Ich möchte, dass Sie auf einflussreiche Informationen hinweisen.

Als allererstes

Aus der Nachbarschaft von "Maschinelles Lernen x Cloud". Immerhin sind diese drei die Hauptpunkte.

Amazon ML unterstützt keine Zeitreihenanalyse, daher ist es out. Ich hatte eine Veröffentlichung bei re: Invent erwartet, aber Direction von Another Sie haben evolution in / rekognition /) durchgeführt. Es war eine sehr heiße Ankündigung, aber es scheint, dass die Richtung anders ist, als ich diesmal erwartet hatte.

Die Azure-Zeitreihenanalyse unterstützt nur die Anomalieerkennung und wird daher nicht unterstützt. Sie können jedoch Python / R-Code einbetten und damit alles implementieren. Die Ausführungsumgebung unterstützt Anaconda, und es gibt kein Problem mit der Bibliotheksunterstützung.

GCP Machine Learning wurde noch nicht untersucht. Da es eine Beschreibung gibt, die auf TensorFlow basiert, denke ich, dass die Antwort wahrscheinlich "alles kann implementiert werden" lautet, aber mir fehlt immer noch das Verständnis, einschließlich Peripheriedienste, so dass es sich derzeit in einem ungeprüften Zustand befindet.

Verfolger, Zweitplatzierter, Vizemeister

Ein Dienst namens Function as a Service. Es gibt auch drei Hauptfächer unten.

Azure / GCP ist noch nicht ausreichend erforscht. Bei Lambda werden Python-Pakete (und gemeinsam genutzte Bibliotheken) gebündelt, die nicht in der Lambda-Ausführungsumgebung enthalten sind. Als Methode verweise ich auf diesen (netten) Hack. Der Unterschied besteht darin, dass statsmodels erforderlich ist, aber innerhalb der Größenbeschränkung (50 MB) des Labmda-Bundle-Pakets liegt. => Using Scikit-Learn in AWS Lambda -- Serverless Code

Ich frage mich, ob andere FaaS grundsätzlich die gleiche Bindung haben. Bei Azure-Funktionen basiert die Ausführungsplattform auf dem App Service, sodass Sie das Problem möglicherweise mithilfe des App Service-Editors lösen können. Offizielles Dokument "Node.js Apps mit App Service Editor entwickeln ", es scheint, dass Pakete von npm hinzugefügt werden können, also sogar in Python Das Grundprinzip ist, dass es der gleiche Grund wäre. Es ist immer noch nicht verifiziert, aber wenn ↑ wahr ist, sind Sie wahrscheinlich ein großer Fan von Azure.

Weiterer Zweiter

PaaS und verwaltete Containerumgebung. Da "Ich möchte ohne Server arbeiten" einer der Ausgangspunkte ist, zögere ich grundsätzlich, eine Einstellung in Betracht zu ziehen.

Anaconda verfügt über alle Bibliotheken, die ich benötige. Ein PaaS, das Anaconda in seiner Ausführungsumgebung unterstützt, wäre eine attraktive Option.

Heroku möchte Anaconda in der Ausführungsumgebung haben, aber es scheint nicht getan zu sein. Nach der Untersuchung des Build Packs scheint es ein [Conda Build Pack] zu geben (https://github.com/kennethreitz/conda-buildpack). Es ist eine sehr schöne Zeile, aber es scheint, dass statsmodels nicht enthalten ist. Ich habe keine andere Wahl, als die Umgebung selbst aufzubauen, aber wenn es mir schwer fällt, werde ich überlegen, wie ich mit FaaS mein Bestes geben soll.

Cloud Docker ist praktisch dasselbe wie ECS, wenn AWS als Back verwendet wird, sodass es einmal ausgeschlossen wird. Die Unterstützung mehrerer Plattformen ist jedoch wie bei Terraform interessant. Es ist ein Service, den ich bei einer anderen Gelegenheit einmal ansprechen möchte.

GAE kann eine benutzerdefinierte Dockerfile-basierte Laufzeit verwenden, wenn es sich um eine Beta-Version [Flexible Environment] handelt (https://cloud.google.com/appengine/docs/flexible/). Es scheint eine Möglichkeit zu geben.

Implementierung

Nehmen Sie AWS Lambda an

Materialien finden Sie im Unternehmensblog. Die Geschichte über die Implementierung ist ab Folie S.30 geschrieben.

Eindrücke nach der Montage

Da die Implementierung zu grob ist, müssen Konfiguration und Funktionen immer mehr überarbeitet werden. Ich möchte die Vor- und Nachbearbeitung von der Funktion trennen, die die Vorhersagelogik steuert, und sie zu einer stringartigen Konfiguration machen. Da sich die Datenquelle in Salesforce befindet, möchte ich dort an der Zusammenarbeit arbeiten.

Dies und das über Lambda

Es ist schade, dass die einzige Möglichkeit, ein Paket hinzuzufügen, darin besteht, "selbst in das Zip-Archiv zu pushen". Obwohl es serverlos ist, ist es überwältigend, sich so schwer mit dem Bau zu beschäftigen. .. ..

Nun, heutzutage gibt es Bereitstellungstools, die auf FaaS abzielen, und ich denke, es gibt viele Bereiche, die von der Leistungsfähigkeit der Tools abgedeckt werden können. Es ist ein Ärger, aber die aktuelle Wahrnehmung ist, dass es ein ernstes Problem ist.

In Bezug auf das Bereitstellungstool scheint Lamvery derzeit nützlich zu sein. Es scheint, dass es eine Funktion hat, nicht nur Python-Pakete, sondern auch gemeinsam genutzte Bibliotheken zu sammeln und zu bündeln, und die Build-Arbeit scheint Fortschritte zu machen. Es ist auch praktisch, dass die Verwaltungseinheit die Funktionseinheit ist. Ich habe keine speziellen Bereitstellungstools verwendet, daher werde ich Lamvery für die zukünftige Entwicklung verwenden.

Andere, die nicht berücksichtigt wurden (oder eher Azure)

Ich habe mich aufgrund meines Unternehmenshintergrunds für AWS Lambda entschieden, aber um ehrlich zu sein, bevorzuge ich in der aktuellen Situation die Verwendung von Azure.

Die Ausführungsumgebung für _ "Python-Skript ausführen" _ in Azure Machine Learning deckte alle benötigten Pakete ab. Azure Machine Learning berücksichtigt auch die Integration in Datenspeicher und Anwendungen. Wenn Sie mit der Logik (des Analyseteils) spielen und auch mit externen Diensten verknüpfen möchten, ist Azure Machine Learning meiner Meinung nach die beste Wahl.

Beachten Sie, dass Sie sicherstellen müssen, dass die erforderlichen Pakete in der Ausführungsumgebung Execute Python Script (Anaconda) enthalten sind. Es scheint, dass es verwaltet werden kann, auch wenn es nicht enthalten ist, aber um es zu löschen, müssen ähnliche Schritte wie beim obigen Lambda unternommen werden, damit der Vorteil, es leicht verwenden zu können, verloren geht. (Offizielle Referenz)

Zusammenfassung

Ich habe die mit der Ausführungsplattform von AWS Lambda auf S3 hochgeladenen "monatlichen Verkaufsinformationen" analysiert und versucht, die neuesten Verkäufe vorherzusagen.

Um die Vorhersagelogik ausführen zu können, mussten Pakete verwendet werden, die nicht in der Lambda-Funktionsausführungsumgebung enthalten sind. Sie wurden jedoch im Bereitstellungspaket gebündelt und zur Startverarbeitung zur Laufzeit mit .so geladen Das Problem beheben.

Da die Implementierung noch schwierig ist, gibt es viele Verbesserungsmöglichkeiten. Ab dem 14. Januar 2017 sind die Dinge unvollendet und die Zukunftsaussichten sind wie folgt.

Recommended Posts

Ich möchte maschinelles Lernen auch ohne Server durchführen - Time Series Edition -
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Textklassifizierung
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich möchte vorerst eine Docker-Datei erstellen.
Ich möchte ○○ mit Pandas machen
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
MacBookPro-Setup Schließlich möchte ich eine Neuinstallation durchführen
[Maschinelles Lernen] Ich habe versucht, so etwas wie Bilder weiterzugeben
Ich habe versucht, das überwachte Lernen des maschinellen Lernens auch für Serveringenieure auf leicht verständliche Weise zu verstehen 1
Ich habe versucht, das überwachte Lernen des maschinellen Lernens auch für Serveringenieure auf leicht verständliche Weise zu verstehen 2
Ich wechselte meinen Job zu einem Ingenieur für maschinelles Lernen bei AtCoder Jobs
Ich möchte in der Einschlussnotation drucken
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
Ich möchte jedes Mal, wenn ich sudo bin, von einem hübschen Mädchen verflucht werden! !!
Ich möchte eine Python-Umgebung erstellen
Ich habe versucht, Gitarrenakkorde in Echtzeit mithilfe von maschinellem Lernen zu klassifizieren
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Das maschinelle Lernen in einem Monat auf ein praktisches Niveau bringen # 1 (Startausgabe)
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Battle Edition ~
Ich möchte Affenpatches nur teilweise sicher mit Python machen
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).
9 Schritte, um in kürzester Zeit Experte für maschinelles Lernen zu werden [Völlig kostenlos]
[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
Ich möchte gleichzeitig einen Musik-Player erstellen und Musik ablegen
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
Ich möchte Dunnetts Test in Python machen
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte einen DataFrame in MSSQL einfügen
Ich möchte mit Python ein Fenster erstellen
Ich möchte datetime.datetime.now () auch mit pytest verspotten!
Ich möchte ein Spiel mit Python machen
Ich möchte keinen Codierungstest machen
Ich möchte systemd nach Zeitzone verwalten! !!
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Ich möchte pyenv + pipenv auch unter Windows machen
Ich möchte leicht einen leckeren Laden finden
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine Django-App auf Heroku hochladen
[Keras] Ich habe versucht, das Problem der Klassifizierung des Donut-Typ-Bereichs durch maschinelles Lernen zu lösen. [Studie]
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Ich möchte mit swagger-codegen in Sekundenschnelle einen Mock-Server für Python-Flask einrichten.
Ich möchte zum ersten Mal eine Django-Studie zur Mittagsdatenbank [EP1] erstellen
Ich möchte zum ersten Mal eine Django-Studie zum Mittagessen [EP1-4] erstellen
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Selbst Anfänger möchten sagen "Ich verstehe Python voll und ganz"
Ich möchte Timeout einfach in Python implementieren
Ich möchte einen Python-Generator viele Male iterieren
Ich möchte, dass DQN Puniki einen Homerun macht
100 Klopfen bei der Bildverarbeitung !! (021-030) Ich möchte eine Pause machen ...
Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Auch mit JavaScript möchte ich Python `range ()` sehen!
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen