[PYTHON] Je souhaite créer un service d'apprentissage automatique sans programmation! API Web

Contenu de cette époque

Ceci est le deuxième volet de Je veux créer un service d'apprentissage automatique sans programmation! Classification de texte. Rend les résultats de classification de l'apprentissage automatique disponibles à partir de l'API Web.

À ce stade, ce n'était pas vraiment de la non-programmation, et cela a commencé à être une arnaque au titre, mais ce n'est que 60 lignes de code, donc je ne pense pas que ce soit difficile à lire.

La source est disponible sur https://github.com/shuukei-imas-cg/imas_cg_words.

À propos du framework et du logiciel à utiliser

Falcon Falcon est un framework web très rapide et minimaliste pour les applications backend. Selon le benchmark publié sur le Site officiel, il est 9 fois plus performant que le Flask standard (0.11.1) en tant que framework web pour Python. Cette fois, c'est un gros problème, alors je vais faire du cythonisation et le configurer pour qu'il fonctionne plus vite.

Gunicorn Gunicorn est un serveur Web WSGI simple et rapide recommandé par Falcon. WSGI signifie Web Server Gateway Interface et est une définition d'interface standardisée pour les serveurs Web et les infrastructures Web. Si vous suivez ceci, vous pouvez l'utiliser avec votre combinaison préférée de serveur Web et d'application Web (framework).

Exemple de procédure d'exécution

 cd imas_cg_words / (répertoire cloné dans l'article précédent)
git pull

# Installez Gunicorn, cython
pip install cython gunicorn
# Installer lors de la compilation de Falcon avec le compilateur C
pip install --no-binary :all: falcon 

# Démarrez le serveur webapi sur localhost
cd webapi/
python server.py &
# Requete
 curl http: // localhost: 8080 / imas_cg-words / v1 / predict / Delusion
[
    {
        "score": 1.2635555267333984,
 "nom:": "Hinako Kita"
    },
    {
        "score": -0.9001807570457458,
 "nom:": "Aiumi Munakata"
    },
    {
        "score": -1.0048713684082031,
 "nom:": "Nanami Asari"
    }
]

Si vous lancez une requête avec curl et qu'elle s'affiche comme ci-dessus, cela fonctionne correctement. Reçoit du texte arbitraire avec la méthode HTTP GET et renvoie le résultat de la classification au format JSON.

Lors de la publication en tant qu'API Web pouvant être utilisée de l'extérieur

Lors de la publication en tant qu'API Web accessible de l'extérieur, simple_server ne suffit pas, utilisez donc Gunicorn comme suit. Notez que lors du démarrage à partir de Gunicorn, l'adresse IP et le numéro de port définis dans config.py seront ignorés et les valeurs spécifiées dans les options de ligne de commande prévaudront.

 gunicorn -b (adresse IP): (numéro de port) serveur: api &
# Lors de la spécification du nombre de travailleurs et du fichier journal
 gunicorn -w 4 -b (adresse IP) :( numéro de port) --access-logfile log / access.log --error-logfile log / error.log serveur: api &

Pour l'adresse IP, spécifiez une adresse IP qui peut être référencée de l'extérieur.

Commentaire

Je vais expliquer le contenu de webapi / server.py.

Tout d'abord, créez une instance de Falcon et configurez le routage pour affecter la classe PredictSerif au chemin de l'URI. La partie {words} peut prendre n'importe quelle valeur et son contenu est passé sous forme de variables à la classe ou à la fonction.

# Add route
api = falcon.API()
api.add_route('/imas_cg-words/v1/predict/{words}', PredictSerif())

Predict Serif définit le comportement de la méthode HTTP GET. Le contenu de la fonction prédire est presque le même que celui créé précédent. La valeur de retour est convertie au format JSON et affichée en tant que sortie de WebAPI.

_add_headers ajoute des en-têtes HTTP. Dans le prochain article, afin d'accéder à cette API Web à partir de SPA en utilisant JavaScript, nous allons configurer pour autoriser CORS pour le moment.

class PredictSerif(object):
    def on_get(self, req, resp, words):
        result = predict(words)
        json_out = json.dumps(result, indent=4, ensure_ascii=False)
        _add_headers(resp)
        resp.body = json_out
        resp.status = falcon.HTTP_200
        logging.info("predict {0} {1}".format(req.remote_addr, words.decode('utf-8')))

Indent = 4 dans json.dumps est défini pour la lisibilité. Vous pouvez le supprimer en production.

la prochaine fois

Vous pouvez désormais utiliser la fonction de classification de machine learning en tant qu'API Web. La prochaine fois, je créerai un frontal qui utilise cette API Web avec Vue.js.

Enfin (important)

Si vous aimez cet article, il se tiendra vers avril 2018 chez Idol Master Cinderella Girls autant que vous le pensez. Veuillez voter pour Hinako Kita à la «7e élection générale des filles de Cendrillon» qui aura lieu.

Recommended Posts

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 faire du machine learning même sans serveur - Time Series Edition -
Je souhaite créer facilement un modèle de bruit
Je veux créer une fenêtre avec Python
Je souhaite créer un type d'implémentation pouvant être branché
Je veux escalader une montagne avec l'apprentissage par renforcement
Je souhaite créer manuellement une légende avec matplotlib
Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (1: Acquérir des images de candidats à l'aide du service API Web)
Je veux créer un Dockerfile pour le moment.
Application correspondante, j'ai essayé de prendre des statistiques de personnes fortes et j'ai essayé de créer un modèle d'apprentissage automatique
Qiskit: Je veux créer un circuit qui crée des états arbitraires! !!
Je veux créer un système pour éviter d'oublier de serrer la clé 1
Je veux créer un fichier pip et le refléter dans le menu fixe
Comment créer une API de machine learning sans serveur avec AWS Lambda
Je veux imprimer dans la notation d'inclusion
J'ai essayé de créer un linebot (préparation)
Je veux créer un environnement Python
J'ai changé de travail pour devenir ingénieur en apprentissage automatique chez AtCoder Jobs
Je veux faire de matplotlib un thème sombre
Je veux INSÉRER un DataFrame dans MSSQL
Je veux faire un jeu avec Python
Si vous souhaitez créer Word Cloud.
Je ne veux pas passer un test de codage
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
Je veux créer un bel environnement de développement Python pour mon nouveau Mac
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
[Azure] J'ai essayé de créer une machine virtuelle Linux avec Azure de Microsoft Learn
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
Un débutant en apprentissage automatique a tenté de créer une IA de jugement Sheltie en un jour
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é)
Créer un ensemble de données d'images à utiliser pour la formation
[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 déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Je souhaite intégrer une variable dans une chaîne 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 ...
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
Je veux donner un group_id à une trame de données pandas
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux faire la transition avec un bouton sur le ballon
Je veux écrire en Python! (2) Écrivons un test
Je veux trouver un package populaire sur PyPi
Je veux échantillonner au hasard un fichier avec Python
Je souhaite créer facilement un environnement de développement basé sur un modèle
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
Je veux diviser une chaîne de caractères avec hiragana
Préparation au démarrage de «Python Machine Learning Programming» (pour macOS)
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
[Python] Je veux faire d'une liste imbriquée un taple
Les débutants en apprentissage automatique essaient de créer un arbre de décision
Je souhaite envoyer automatiquement un e-mail de création d'entreprise
Je veux faire fonctionner un ordinateur quantique avec Python
Introduction à l'apprentissage automatique
Je veux lier une variable locale avec lambda