[PYTHON] (Remarque) Une application Web qui utilise TensorFlow pour déduire les noms de morceaux recommandés [Créer un environnement d'exécution avec docker-compose]

introduction

Cet article est la suite de l ' ** (Remarque) application Web ** qui utilise TensorFlow pour déduire les noms de chansons recommandés. .. Créez un environnement TensorFlow + Keras dans votre environnement local avec docker-compose, Je voudrais m'organiser jusqu'au point où j'ai frappé l'API WEB. Veuillez noter que c'est un article que j'ai fait pour moi-même, donc il peut être difficile à comprendre, les informations et la technologie peuvent être obsolètes: arc: En outre, j'espère que cela sera utile pour ceux qui souhaitent créer eux-mêmes une sorte d'application Web.

L'application Web réelle ressemble au GIF ci-dessous. ezgif.com-crop.gif Lorsque j'ai tapé une phrase dans le champ de recherche, M. Hamburg Hambird a répondu "même histoire": clap: $ \ tiny {* Puisqu'il y a peu de données d'apprentissage, seules quelques chansons seront frappées. .. C'est minable} $: bow_tone1: $ \ tiny {* Si vous cliquez sur le lien de la partition, une partie de la partition est affichée, mais elle sort du cadre de l'article} $: no_good_tone1:

Les références

Je l'ai utilisé comme référence lors de la création de cet article: bow_tone1:

Carte de TODO

** (Remarque) Suite de l'application Web ** qui utilise TensorFlow pour déduire les noms de chansons recommandés. Cette fois, il s'agit de ** construction d'environnement (environnement d'exécution) ** côté API Web.

chapitre Classification Statut Contenu Langue, FW, environnement, etc.
Préface Commun Déjà Aperçu de l'application Python
TensorFlow
Keras
Google Colaboratory
chapitre un Web API Déjà (Cette fois) Construction de l'environnement (environnement d'exécution) docker-compose
Flask
Nginx
gunicorn
Chapitre II Web API Déjà Apprentissage automatique Python
TensorFlow
Keras
Flask
chapitre 3 écran pas encore commencé Environnement Python
Django
Nginx
gunicorn
PostgreSQL
virtualenv
Chapitre 4 écran pas encore commencé Affichage, partie d'appel d'API Web Python
Django
Chapitre 5 AWS pas encore commencé Déploiement automatique AWS Github
EC2
CodeDeploy
CodePipeline

Environnement * Je pense que cela fonctionnera même si ce n'est pas la version suivante, mais veuillez noter qu'elle est ancienne: no_good_tone2: </ sup>

Version Ubuntu

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Version Docker

$ docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b7f0
 Built:             Wed Mar 11 01:25:46 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b7f0
  Built:            Wed Mar 11 01:24:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Docker-Compose version

$ docker-compose version
docker-compose version 1.25.5, build unknown
docker-py version: 4.2.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.1c  28 May 2019

* Pour une raison quelconque, build inconnu. J'ai abandonné parce que cela semblait prendre du temps: sanglot: </ sup>

Comment créer un environnement d'exécution

Pour faire simple, docker-compose est correctement installé, Si vous placez les fichiers nécessaires conformément à la [Structure du répertoire](# structure du répertoire) décrite ci-dessous, Exécutez simplement la commande suivante:

Construire&Commencez par l'arrière-plan


docker-compose up -d --build

Cela prend du temps pour construire la première fois, mais une fois le conteneur créé, si vous appuyez sur l'API Web, il ressemblera au GIF suivant.

Web_Exemple d'exécution d'API


http://localhost:7020/recommend/api/what-music/Une chanson qui est triste et souhaite le bonheur de quelqu'un

Exemple d'exécution d'API Web

Peek 2020-05-16 14-30.gif Il existe divers Outils, donc je pense que tout va bien, mais comme GIF Il sera retourné en JSON.

Structure du répertoire

Je le fais correctement $ \ tiny {* Ne le fixez pas} $: no_good_tone1: Il y a beaucoup de fichiers inutiles, mais ils sont sur Github. Source

Structure du répertoire


dk_tensor_fw
├── app_tensor
│   ├── Dockerfile
│   ├── exeWhatMusic.py
│   ├── inputFile
│   │   └── ans_studyInput_fork.txt
│   ├── mkdbAndStudy.py
│   ├── requirements.txt
│   ├── studyModel
│   │   ├── genre-model.hdf5
│   │   ├── genre-tdidf.dic
│   │   ├── genre.pickle
│   ├── tfidfWithIni.py
│   └── webQueApiRunServer.py
├── docker-compose.yml
├── web_nginx
    ├── Dockerfile
    └── nginx.conf

Fichiers requis pour créer un environnement local avec docker-compose

docker-compose.yml


version: '3'
services:
###########Paramètres du serveur d'applications###########
  app_tensor:
    container_name: app_tensor
    #Politique de redémarrage du service
    restart: always
    #Répertoire contenant le fichier docker à construire
    build: ./app_tensor
    volumes:
      #Répertoire à monter
      - ./app_tensor:/dk_tensor_fw/app_tensor
    ports:
      #Port côté hôte: port côté conteneur
      - 7010:7010
    networks:
      - nginx_network
###########Paramètres du serveur d'applications###########

###########Paramètres du serveur Web###########
  web-nginx:
    container_name: web-nginx
    build: ./web_nginx
    volumes:
      #Répertoire à monter
      - ./web_nginx:/dk_tensor_fw/web_nginx
    ports:
      #Transfert de port du PC hôte 7020 au conteneur 7020
      - 7020:7020
    depends_on:
      #Spécifiez la dépendance. la toile-app avant de démarrer le serveur-Va démarrer le serveur
      - app_tensor
    networks:
      - nginx_network
###########Paramètres du serveur Web###########
networks:
  nginx_network:
    driver: bridge

(Référence) Comment vérifier les ports libres


#Vérifiez les ports libres (gratuits si rien n'est affiché)
netstat -an | grep 7010

Dockerfile ← Côté serveur Ap(Gunicorn)


FROM ubuntu:18.04

WORKDIR /dk_tensor_fw/app_tensor
COPY requirements.txt /dk_tensor_fw/app_tensor

RUN apt-get -y update \
    && apt-get -y upgrade \
    && apt-get install -y --no-install-recommends locales curl python3-distutils vim ca-certificates \
    && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
    && python3 get-pip.py \
    && pip install -U pip \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && pip install -r requirements.txt --no-cache-dir

ENV LANG en_US.utf8

CMD ["gunicorn", "webQueApiRunServer:app", "-b", "0.0.0.0:7010"]

requirements.txt


Flask==1.1.0
gunicorn==19.9.0
Keras>=2.2.5
numpy==1.16.4
pandas==0.24.2
pillow>=6.2.0
python-dateutil==2.8.0
pytz==2019.1
PyYAML==5.1.1
requests==2.22.0
scikit-learn==0.21.2
sklearn==0.0
matplotlib==3.1.1
tensorboard>=1.14.0
tensorflow>=1.14.0
mecab-python3==0.996.2

Dockerfile ← Côté serveur Web(Nginx)


FROM nginx:latest

RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d

nginx.conf


    upstream app_tensor_config {
        #Si vous spécifiez le nom de service du conteneur, le nom sera résolu
        server app_tensor:7010;
    }

    server {
        listen 7020;
        root /dk_tensor_fw/app_tensor/;
        server_name localhost;

        location / {
            try_files $uri @flask;
        }

        location @flask {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_redirect off;

            proxy_pass http://app_tensor_config;
        }

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        #Les demandes de fichiers statiques sont acheminées de manière statique ← Cela n'est pas nécessaire car il n'est pas utilisé.
        location /static/ {
            alias /dk_tensor_fw/app_tensor/satic/;
        }
    }

Confirmation de l'environnement terminé

Commencez avec la construction et l'arrière-plan

$ docker-compose up -d --build

docker-compose Afficher les informations sur l'image

$ docker-compose images
Container          Repository           Tag       Image Id       Size  
-----------------------------------------------------------------------
app_tensor   dk_tensor_fw_app_tensor   latest   3b916ea797e0   2.104 GB
web-nginx    dk_tensor_fw_web-nginx    latest   175c2596bb8b   126.8 MB

Est-il mal fait? Il semble que la capacité soit assez grande: sueur: </ sup>

Liste des conteneurs

$ docker-compose ps
   Name                 Command               State               Ports             
------------------------------------------------------------------------------------
app_tensor   gunicorn webQueApiRunServe ...   Up      0.0.0.0:7010->7010/tcp        
web-nginx    nginx -g daemon off;             Up      0.0.0.0:7020->7020/tcp, 80/tcp

Se connecter au conteneur (côté serveur Ap)

$ docker-compose exec app_tensor /bin/bash
root@ba0ce565430c:/dk_tensor_fw/app_tensor#

Je l'ai mis dans un conteneur côté serveur Ap. .. ..

Vérifiez le contenu pour voir si TensorFlow ou Keras est inclus

J'en ai omis car l'affichage du résultat de sortie est long: sueur: </ sup>

root@ba0ce565430c:/dk_tensor_fw/app_tensor# pip3 list
Package                Version
---------------------- -----------
absl-py                0.9.0
Flask                  1.1.0
gunicorn               19.9.0
Keras                  2.3.1
Keras-Applications     1.0.8
Keras-Preprocessing    1.1.2
matplotlib             3.1.1
mecab-python3          0.996.2
numpy                  1.16.4
pandas                 0.24.2
Pillow                 7.1.2
pip                    20.1
python-dateutil        2.8.0
pytz                   2019.1
PyYAML                 5.1.1
requests               2.22.0
requests-oauthlib      1.3.0
rsa                    4.0
scikit-learn           0.21.2
six                    1.14.0
sklearn                0.0
tensorboard            2.2.1
tensorboard-plugin-wit 1.6.0.post3
tensorflow             2.2.0
tensorflow-estimator   2.2.0
(réduction)

Il semble que TensorFlow, Keras, etc. soient tous inclus. .. ..

Connectez-vous au conteneur côté serveur Web

$ docker-compose exec web-nginx /bin/bash
root@d6971e4dc05c:/# 

Je l'ai également mis dans le conteneur côté serveur Web.

Pour le moment, vérifiez si le serveur Web (Nginx) fonctionne.

root@d6971e4dc05c:/# /etc/init.d/nginx status
[ ok ] nginx is running.

Il semble que Nginx fonctionne également. Jusqu'à présent, j'ai confirmé l'environnement d'exécution. Si vous accédez à l'API WEB comme indiqué dans l '[exemple d'exécution de l'API Web] ci-dessus (# exemple d'exécution de l'API Web), vous devez disposer d'un environnement d'exécution du côté de l'API WEB. .. ..

À propos du futur

Cette fois, j'ai pu organiser un peu l'environnement d'exécution côté API WEB. Aussi, j'espère pouvoir le rafraîchir et l'organiser petit à petit quand j'en ai le temps: sanglot: C'est indécis, mais la prochaine fois, j'aimerais organiser la partie apprentissage automatique.

chapitre Classification Statut Contenu Langue, FW, environnement, etc.
Préface Commun Déjà Aperçu de l'application Python
TensorFlow
Keras
Google Colaboratory
chapitre un Web API Déjà Construction de l'environnement (environnement d'exécution) docker-compose
Flask
Nginx
gunicorn
Chapitre II Web API Déjà Apprentissage automatique Python
TensorFlow
Keras
Flask
chapitre 3 écran pas encore commencé Environnement Python
Django
Nginx
gunicorn
PostgreSQL
virtualenv
Chapitre 4 écran pas encore commencé Affichage, partie d'appel d'API Web Python
Django
Chapitre 5 AWS pas encore commencé Déploiement automatique AWS Github
EC2
CodeDeploy
CodePipeline

Recommended Posts

(Remarque) Une application Web qui utilise TensorFlow pour déduire les noms de morceaux recommandés [Créer un environnement d'exécution avec docker-compose]
(Remarque) Une application Web qui utilise TensorFlow pour déduire les noms de morceaux recommandés.
(Remarque) Application Web qui utilise TensorFlow pour déduire les noms de morceaux recommandés [Apprentissage automatique]
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
Créez une application Web qui reconnaît les nombres avec un réseau neuronal
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant venv sur Ubuntu 14.04 LTS
Créons une application Web de conversion A vers B avec Flask! De zéro ...
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
[Note] Comment créer un environnement de développement Ruby
[Note] Comment créer un environnement de développement Mac
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Création d'un environnement TensorFlow qui utilise des GPU sous Windows 10
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
Comment convertir un tableau en dictionnaire avec Python [Application]
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Tornado - Créons une API Web qui renvoie facilement JSON avec JSON
Créez une API Web capable de fournir des images avec Django
Créer une application Todo avec Django ① Créer un environnement avec Docker
[AWS] Version de déploiement d'application Flask qui a tenté de créer un environnement Python avec eb [Elastic Beanstalk]
J'ai trouvé un moyen de créer un modèle 3D à partir de photos Partie 01 Créer un environnement
Créer un environnement avec virtualenv
Créer un environnement d'exécution Windows Python avec VScode + Remote WSL
Essayez de créer un visualiseur de différence de chemin d'exécution avec angr + bingraphvis
Essayez de créer un environnement python avec Visual Studio Code et WSL
[AWS] Préparation du déploiement de l'application Flask pour la création d'un environnement Python avec eb [Elastic Beanstalk]