[PYTHON] Créez une application flask faite avec tensorflow et dlib pour travailler sur centos7

Comme le titre l'indique, créez un environnement dans lequel l'application flask utilisant tensorflow s'exécute sur ceontos 7.1. Introduction On suppose que l'environnement de centos 7.1 est configuré avec conoha comme indiqué dans cet article.

Configuration de l'application

J'utilise python, flask, anaconda, tensorflow, dlib, opencv. La configuration de l'application est la suivante.

.
├── evaluation.py #Jugez l'image. Utilisez dlib, opencv, tensorflow.
├── guniconf.py
├── lib #Où placer les données entraînées de dlib et tensorflow
├── model.py #Utilisez un format appelé Modèle pour faciliter la gestion des données d'image
├── static
│   ├── css
│   │   └── style.css
│   ├── images/
│   ├── js
│   │   └── main.js
│   └── robots.txt
├── templates
│   ├── index.html
│   └── layout.html
└── web.py #Reçoit une demande et renvoie le résultat

Insérer anaconda

J'utiliserai pyenv pour mettre anaconda. Je me suis référé ici pour l'installation de pyenv avec centos. http://qiita.com/glostuan/items/6030e309542615470e0d

$ sudo yum install epel-release #Ajouter un référentiel epel
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ vim .bash_profile
#ajouter
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

$ source .bash_profile #Réfléchir
$ pyenv install --list
# anaconda3-4.0.Vérifiez s'il y a 0
$ pyenv install anaconda3-4.0.0
$ pyenv global anaconda3-4.0.0
$ pyenv versions
  system
* anaconda3-4.0.0 (set by /home/develop/.pyenv/version)

Vous pouvez maintenant utiliser anaconda.

Installation d'opencv

Au début, j'ai fait beaucoup de recherches pour mettre opencv, et j'ai pensé que je mettrais les bibliothèques dépendantes une par une, mais le montant était si grand que je ne pouvais pas le mettre correctement. Enfin, comme indiqué sur le site ci-dessous, j'ai installé l'ancien opencv avec yum et installé les bibliothèques dépendantes, puis j'ai supprimé l'ancien opencv, et j'ai pu l'obtenir avec succès. https://daichan.club/linux/78330 Cependant, il y avait une bibliothèque qui n'était pas installée pour exécuter opnecv cette fois, donc je l'ai installée séparément avec yum.

$ sudo yum install epel-release #Ajouter un référentiel epel
$ sudo yum update
$ sudo yum install opencv #Insérez l'ancien opencv
#Installation de bibliothèque dépendante

$ sudo yum remove opencv #Supprimer l'ancien opencv
$ conda install -c menpo opencv3
$ conda install -c menpo dlib
$ conda install -c meznom boost-python
$ conda install -c conda-forge tensorflow=1.1.0

#Déplacer vers le répertoire des applications

$ python web.py server
#Confirmer le démarrage et l'exécution
#Lisez l'erreur et installez les bibliothèques requises
$ sudo yum install libpng12

Ensuite, exécutez l'application avec nginx + gunicorn. Nous allons le mettre en place en référence à cet article. http://qiita.com/Alice1017/items/fb28e1055c6e498d021e

Configurer Gunicorn et Nginx

Installez gunicorn. Vous pouvez le mettre à partir de pip, mais j'ai pensé qu'il serait préférable de l'unifier avec d'autres choses, alors je l'ai mis à partir de conda.

$ conda install -c anaconda gunicorn
$ gunicorn web:app --config guniconf.py
# /tmp/gunicorn_my_app.Vérifiez si la chaussette est générée

guniconf.py est défini comme suit.

guniconf.py


import multiprocessing

# Server Socket
bind = 'unix:/tmp/gunicorn_my_app.sock'
backlog = 2048

# Worker Processes
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'sync'
worker_connections = 1000
max_requests = 0
timeout = 30
keepalive = 2
debug = False
spew = False

# Logging
logfile = '/var/www/app/log/error.log'
loglevel = 'error'
logconfig = None

# Process Name
proc_name = 'gunicorn_my_app'

Ensuite, installez nginx. Puisque nginx dans epel est ancien, enregistrons et installons le référentiel nginx afin que vous puissiez installer vous-même le dernier nginx.

$ sudo vim /etc/yum.repos.d/nginx.repo
#Ajout du contenu suivant
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

$ sudo yum -y --enablerepo=nginx install nginx

Modifiez le fichier nginx conf. Gardons le fichier original au cas où.

$ cd /etc/nginx/conf.d/
$ sudo mv default.conf default.conf.org
$ sudo vim default.conf

Réglez comme suit.

default.conf


upstream my_app_server{
    server unix:/tmp/gunicorn_my_app.sock;
}

server {
  listen 80 default_server;

  error_page 404 /404.html;

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
          root /usr/share/nginx/html;
  }

  location / {
          try_files $uri @my_app;
          client_max_body_size 20M;
  }

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

          proxy_pass http://my_app_server;
  }

}

client_max_body_size et proxy_request_buffering sont définis comme ceci à cause de l'application que j'ai créée. Nous vous serions reconnaissants de bien vouloir revoir les paramètres le cas échéant.

Redémarrez nginx et voyez si cela fonctionne.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx
# guniconf.Déplacer vers le répertoire où se trouve py
$ gunicorn web:app --config guniconf.py
#Vérifier avec le navigateur

Si vous pouvez le vérifier avec le navigateur, arrêtez avec ctrl + c.

Présentation du superviseur

Ensuite, j'utiliserai Supervisor pour faciliter le fonctionnement du démon gunicorn. Il est plus facile d'utiliser yum.

$ sudo yum install supervisor
$ sudo vim /etc/supervisord.d/my_app.ini

my_app.ini


[program:my_app]
command = /home/develop/.pyenv/shims/gunicorn web:app --config /var/www/app/guniconf.py
directory = /var/www/app/
user = root 

Enregistrez le superviseur avec systemd.

$ sudo vim /etc/systemd/system/supervisord.service

supervisord.service


[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s

[Install]
WantedBy=multi-user.target
$ sudo systemctl list-unit-files --type=service
#Vérifiez si superviseur est enregistré

$ sudo systemctl start supervisord
$ sudo systemctl status supervisord
$ sudo systemctl stop supervisord
#Vérifiez si les trois ci-dessus fonctionnent correctement

$ sudo systemctl enable supervisord.service
#Configuré pour démarrer automatiquement

#S'il est correctement défini, il fonctionne déjà, mais juste au cas où, exécutez-le et vérifiez
$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start my_app

Vous devriez maintenant pouvoir y accéder depuis votre navigateur.

Recommended Posts

Créez une application flask faite avec tensorflow et dlib pour travailler sur centos7
Comment déployer une application Web créée avec Flask sur Heroku
(Échec) Déployer une application Web créée avec Flask avec heroku
De l'introduction de Flask sur CentOS au service sur Nginx et uWSGI
Un mémo contenant Python2.7 et Python3 dans CentOS
Créez un environnement python avec ansible sur centos6
Créer un environnement de développement TensorFlow sur Amazon EC2 avec une copie de commande
Déployer l'application Django créée avec PTVS sur Azure
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Étapes pour configurer Pipenv, créer une application CRUD avec Flask et la conteneuriser avec Docker
Comment installer TensorFlow sur CentOS 7
Créer un environnement python3 sur CentOS7
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez une application Django sur Docker et déployez-la sur AWS Fargate
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Créez une application Web simple avec Flask
Construisez Linux sur un environnement Windows. Étapes pour installer Laradock et migrer
Construisez CentOS 8 sur ESXi 6.7 avec une configuration minimale
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Créez une application Web qui convertit le PDF en texte à l'aide de Flask et PyPDF2
Créez un environnement PYNQ sur Ultra96 V2 et connectez-vous à Jupyter Notebook
Jusqu'à ce que Python soit installé avec pythonbrew et que Flask s'exécute sur le serveur WSGI
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
Essayez Tensorflow avec une instance GPU sur AWS
Comment développer une application de panier avec Django
Gagnez l'application Web Python + Flask avec Jenkins
Créez un environnement virtuel avec pyenv et venv
Lancer un serveur Web avec Python et Flask
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Procédure de création d'application multi-plateforme avec kivy
Made Mattermost Bot avec Python (+ Flask)
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
Comment créer un bel environnement Python sur un nouveau Mac et installer Jupter Notebook
Créez des serveurs sur Linux et des réseaux locaux avec Raspberry Pi NextCloud et le partage de bureau
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
Mémo Un débutant a essayé de créer un environnement Java et de le traduire en japonais sur Ubuntu 18.04.2 LTS.
Je veux faire la transition avec un bouton sur le ballon
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez une application graphique native avec Py2app et Tkinter
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
J'ai créé une application de notification de nouvelles en ligne avec Python
Comment partager des dossiers avec Docker et Windows avec tensorflow
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
Comment créer un environnement Django (python) sur Docker
Je veux travailler avec un robot en python.
J'ai essayé de faire LINE BOT avec Python et Heroku
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créons une application Mac avec Tkinter et py2app
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
Mémo de travail que j'ai essayé i18n avec l'application Flask
Comment créer un environnement Python sur Amazon Linux 2
[Comment!] Apprenez et jouez à Super Mario avec Tensorflow !!