[PYTHON] Je veux faire du machine learning même sans serveur - Time Series Edition -

Il sera mis à jour à tout moment car il est en cours.

*mise à jour

En janvier 2017, la mise en œuvre du prototype a été achevée. Nous avons parlé de cette implémentation à AWS Premier Night # 3, veuillez donc vous reporter à [ici](http: http: //blog.serverworks.co.jp/tech/2017/01/13/awspremier3-starting-serverless-ml/) Veuillez consulter l'article.

En gros, c'est un article que je veux juste faire de délicieux plats récents. Une tentative pour obtenir une opération facile et un apprentissage automatique en même temps en mettant la logique ML sur _ comme un service_

Dans cet article, nous allons discuter ici comment mettre la logique de «l'analyse des séries temporelles» sur une infrastructure sans serveur d'un système FaaS ou une infrastructure gérée telle que PaaS. Veuillez noter que les détails de la méthode d'analyse ne seront pas discutés.

objectif

Pour le moment, l'objectif est de savoir si le lieu où se déplace la mise en œuvre du processus d'analyse est (probablement) plus facile à exploiter que le serveur physique / virtuel conventionnel. La ligne de base est autour de FaaS et PaaS.

introduction

L'analyse que j'essaie de faire est une "analyse de séries chronologiques". Dans le contexte de la surveillance des infrastructures, la détection des valeurs aberrantes / détection des points de changement est applicable. Récemment, vous avez Datadog implémenté en tant que fonction de version bêta. Je trouve que c'est très sympa. => http://docs.datadoghq.com/ja/guides/anomalies/

La détection des valeurs aberrantes / détection des points de changement est basée sur les données passées pour déterminer si les ** données actuelles sont ** une valeur à noter au vu des tendances passées. C'est une méthode pour déterminer la valeur actuelle et ne peut pas prédire l'avenir. D'autre part, la méthode que j'utilise cette fois est la "logique de prédiction de la valeur future" en utilisant des méthodes telles que _AR (Auto Regression) _ et _MA (Moving Average) _.

L'objectif de prévision est le "montant des ventes mensuelles". Importez les performances de ventes mensuelles agrégées à partir du CRM (Salesforce dans mon cas) et utilisez le cadre d'analyse des séries chronologiques pour prévoir les ventes les plus récentes sur N mois.

(Référence) Inspiré le suivant

Atelier ML en tant que service. Un événement dérivé de ServerlessConf. => [Plan spécial] Atelier d'apprentissage automatique sans serveur => SlideShare

supposition

Le langage utilisé est essentiellement Python. La bibliothèque autour de l'apprentissage automatique est vaste, l'environnement qui prend en charge Python est vaste et j'aime ça.

Dans cette implémentation, les bibliothèques suivantes sont utilisées.

Objectif à considérer

J'ai listé les candidats auxquels je pense. Il y a beaucoup de choses que je n'ai pas envisagées et que je n'ai jamais utilisées. Je voudrais que vous signaliez toute information influente.

Tout d'abord

Du voisinage du "machine learning x cloud". Après tous ces trois sont les principaux points.

Amazon ML ne prend pas en charge l'analyse des séries chronologiques, il est donc hors service. J'attendais une sortie chez re: Invent, mais Direction de Another Vous avez fait evolution dans / rekognition /). C'était une annonce très chaude, mais il semble que la direction soit différente de ce à quoi je m'attendais cette fois.

L'analyse des séries temporelles Azure prend uniquement en charge la détection des anomalies, elle n'est donc pas prise en charge telle quelle. Cependant, vous pouvez intégrer du code Python / R et vous pouvez l'utiliser pour implémenter n'importe quoi. L'environnement d'exécution prend en charge Anaconda et il n'y a aucun problème avec la prise en charge de la bibliothèque.

L'apprentissage automatique GCP n'a pas encore été étudié. Puisqu'il y a une description qu'il est basé sur TensorFlow, je pense que la réponse est probablement "tout peut être implémenté", mais je manque encore de compréhension, y compris les services périphériques, donc c'est dans un état non examiné pour le moment.

Finaliste

Un service appelé Function as a Service. Il y a également trois majors ci-dessous.

Azure / GCP fait encore l'objet de recherches insuffisantes. Pour Lambda, cela fonctionne en regroupant des packages Python (et des bibliothèques partagées) qui ne sont pas inclus dans l'environnement d'exécution Lambda. En tant que méthode, je me réfère à ce (joli) hack. La différence est que statsmodels est requis, mais il s'inscrit dans la limite de taille (50 Mo) du package bundle de Labmda. => Using Scikit-Learn in AWS Lambda -- Serverless Code

Je me demande si les autres FaaS ont fondamentalement la même liaison. Comme pour Azure Functions, la plate-forme d'exécution est basée sur App Service, il est donc possible de résoudre le problème en utilisant App Service Editor. Document officiel "Développer des applications Node.js avec App Service Editor ", il semble que les packages peuvent être ajoutés par npm, donc même en Python Le raisonnement est que ce serait la même raison. Ce n'est toujours pas vérifié, mais si ↑ est vrai, vous êtes probablement un grand fan d'Azure.

Autre finaliste

PaaS et environnement de conteneur géré. Puisque «je veux faire du sans serveur» est l'un des points de départ, je suis fondamentalement réticent à envisager l'embauche.

Anaconda a toutes les bibliothèques dont j'ai besoin. Un PaaS prenant en charge Anaconda dans l'environnement d'exécution serait une option intéressante.

Heroku aimerait avoir Anaconda dans l'environnement d'exécution, mais cela ne semble pas être fait. Après avoir étudié le Build pack, il semble qu'il existe un Conda Build Pack. C'est une très belle ligne, mais il semble que statsmodels ne soit pas inclus. Je n'ai pas d'autre choix que de construire mon environnement par moi-même, mais si j'ai du mal, je considérerai la direction de faire de mon mieux avec FaaS.

Cloud Docker est pratiquement identique à ECS si AWS est utilisé comme arrière, il est donc exclu une fois. Cependant, le support multi-plateforme est intéressant comme Terraform. C'est un service que j'aimerais aborder une fois à une autre occasion.

GAE peut utiliser un environnement d'exécution basé sur Dockerfile défini par l'utilisateur s'il s'agit d'une version bêta Environnement flexible. Il semble y avoir une possibilité.

la mise en oeuvre

Adoptez AWS Lambda

Veuillez consulter le Blog de l'entreprise pour les documents. L'histoire de la mise en œuvre est écrite à partir de la diapositive p.30.

Impressions après le montage

La mise en œuvre étant trop approximative, la configuration et les fonctions doivent être de plus en plus refactorisées. Je veux séparer le prétraitement et le post-traitement de la fonction qui pilote la logique de prédiction et en faire une configuration de type chaîne. Étant donné que la source de données est sur Salesforce, j'aimerais y travailler sur la coopération.

Ceci et cela à propos de Lambda

C'est dommage que la seule façon d'ajouter un paquet soit de "pousser vous-même dans l'archive zip". Tout en disant qu'il est sans serveur, c'est un peu écrasant d'avoir autant de mal autour de la construction. .. ..

Eh bien, de nos jours, il existe des outils de déploiement qui ciblent FaaS, et je pense qu'il y a de nombreux domaines qui peuvent être couverts par la puissance des outils. C'est un problème, mais la perception actuelle est que c'est une grave préoccupation.

Concernant l'outil de déploiement, Lamvery semble être utile pour le moment. Il semble qu'il ait une fonction pour collecter et regrouper non seulement les packages Python, mais aussi les bibliothèques partagées, et le travail de construction semble progresser. Il est également pratique que l'unité de gestion soit l'unité fonctionnelle. Je n'ai utilisé aucun outil de déploiement en particulier, je vais donc utiliser Lamvery pour le développement futur.

D'autres qui n'ont pas été considérés (ou plutôt Azure)

J'ai choisi AWS Lambda en raison de mon expérience dans l'entreprise, mais pour être honnête, je préfère utiliser Azure dans la situation actuelle.

L'environnement d'exécution de _ "Exécuter un script Python" _ dans Azure Machine Learning couvrait tous les packages dont j'avais besoin. Azure Machine Learning envisage également l'intégration avec les magasins de données et les applications. Si vous souhaitez jouer avec la logique (de la partie analyse) et souhaitez également vous lier à des services externes, je pense qu'Azure Machine Learning est le meilleur choix.

Notez que vous devez vous assurer que les packages requis sont inclus dans l'environnement d'exécution Execute Python Script (Anaconda). Il semble qu'il puisse être géré même s'il n'est pas inclus, mais pour l'effacer, il est nécessaire de prendre des mesures similaires à Lambda ci-dessus, de sorte que l'avantage de pouvoir l'utiliser facilement est perdu. (Référence officielle)

Résumé

J'ai analysé les "informations de ventes mensuelles" téléchargées sur S3 avec la plate-forme d'exécution d'AWS Lambda et j'ai essayé de prédire les dernières ventes.

Pour faire fonctionner la logique de prédiction, il était nécessaire d'utiliser des packages qui ne sont pas inclus dans l'environnement d'exécution de la fonction Lambda, mais en les regroupant dans le package de déploiement + en ajoutant le processus de chargement .so au processus de démarrage au moment de l'exécution, ce Résoudre le problème.

La mise en œuvre étant encore approximative, il y a de nombreux points à améliorer. Au 14 janvier 2017, les choses laissées en suspens et les perspectives d'avenir sont les suivantes.

Recommended Posts

Je veux faire du machine learning même sans serveur - Time Series Edition -
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web
Je souhaite créer un service d'apprentissage automatique sans programmation!
Je veux escalader une montagne avec l'apprentissage par renforcement
J'ai créé un package pour filtrer les séries chronologiques avec python
Je veux créer un Dockerfile pour le moment.
Je veux faire ○○ avec les Pandas
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Configuration MacBookPro Après tout, je veux faire une installation propre
[Apprentissage automatique] J'ai essayé de faire quelque chose comme passer des images
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 1
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 2
J'ai changé de travail pour devenir ingénieur en apprentissage automatique chez AtCoder Jobs
Je veux imprimer dans la notation d'inclusion
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Je veux être maudit par une jolie fille à chaque fois que je sudo! !!
Je veux créer un environnement Python
J'ai essayé de classer les accords de guitare en temps réel en utilisant l'apprentissage automatique
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Amener l'apprentissage automatique à un niveau pratique en un mois # 1 (édition de départ)
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Battle Edition ~
Je veux faire un patch monkey seulement en partie en toute sécurité avec Python
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
9 étapes pour devenir un expert en apprentissage automatique dans les plus brefs délais [Entièrement gratuit]
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
GTUG Girls + PyLadiesTokyo Meetup Je suis allé au premier machine learning
Je veux faire le test de Dunnett en Python
Je souhaite créer facilement un modèle de bruit
Je veux INSÉRER un DataFrame dans MSSQL
Je veux créer une fenêtre avec Python
Je veux moquer datetime.datetime.now () même avec pytest!
Je veux faire un jeu avec Python
Je ne veux pas passer un test de codage
Je veux gérer systemd par fuseau horaire! !!
Je souhaite créer un type d'implémentation pouvant être branché
Je veux faire pyenv + pipenv même sous Windows
Je veux trouver facilement une délicieuse boutique
Je veux écrire dans un fichier avec Python
Je souhaite télécharger une application Django sur heroku
[Keras] J'ai essayé de résoudre le problème de classification des zones de type beignet par apprentissage automatique [Étude]
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Je veux configurer un serveur fictif pour python-flask en quelques secondes en utilisant swagger-codegen.
Je souhaite créer une base de données de déjeuners [EP1] Django pour la première fois
Je souhaite créer une base de données de déjeuner [EP1-4] Django pour la première fois
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Même les débutants veulent dire "Je comprends parfaitement Python"
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Je veux que DQN Puniki frappe un home run
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Je veux donner un group_id à une trame de données pandas
Je veux faire la transition avec un bouton sur le ballon
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Je veux diviser une chaîne de caractères avec hiragana