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. 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:
Je l'ai utilisé comme référence lors de la création de cet article: bow_tone1:
** (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 |
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>
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
Il existe divers Outils, donc je pense que tout va bien, mais comme GIF Il sera retourné en JSON.
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
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/;
}
}
$ docker-compose up -d --build
$ 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>
$ 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
$ 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. .. ..
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. .. ..
$ docker-compose exec web-nginx /bin/bash
root@d6971e4dc05c:/#
Je l'ai également mis dans le conteneur côté serveur Web.
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. .. ..
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 |