[PYTHON] (Hinweis) Eine Webanwendung, die TensorFlow verwendet, um empfohlene Songnamen abzuleiten. [Erstellen Sie eine Ausführungsumgebung mit Docker-Compose.]

Einführung

Dieser Artikel ist eine Fortsetzung der ** (Hinweis) Web-App ** , die TensorFlow verwendet, um empfohlene Songnamen abzuleiten. .. Erstellen Sie eine TensorFlow + Keras-Umgebung in Ihrer lokalen Umgebung mit Docker-Compose. Ich möchte bis zu dem Punkt organisieren, an dem ich auf die WEB-API stoße. Bitte beachten Sie, dass dies ein Artikel ist, den ich für mich selbst erstellt habe. Daher ist es möglicherweise schwer zu verstehen, Informationen und Technologie sind möglicherweise veraltet: bow: Ich hoffe auch, dass es für diejenigen hilfreich sein wird, die selbst eine Art Webanwendung erstellen möchten.

Die eigentliche Webanwendung sieht wie im folgenden GIF aus. ezgif.com-crop.gif Als ich einen Satz in das Suchfeld eintippte, antwortete Herr Hamburg Hambird "gleiche Geschichte": klatschen: $ \ tiny {* Da es nur wenige Lerndaten gibt, werden nur einige Songs getroffen. .. Es ist schäbig} $: bow_tone1: $ \ tiny {* Wenn Sie auf den Score-Link klicken, wird ein Teil der Partitur angezeigt, der jedoch außerhalb des Geltungsbereichs des Artikels liegt.} $: no_good_tone1:

Verweise

Ich habe es als Referenz beim Erstellen dieses Artikels verwendet: bow_tone1:

TODO Karte

** (Hinweis) Eine Fortsetzung der Web-App ** , die TensorFlow verwendet, um empfohlene Songnamen abzuleiten. Diesmal handelt es sich um eine ** Umgebungskonstruktion (Ausführungsumgebung) ** auf der Web-API-Seite.

Kapitel Einstufung Status Inhalt Sprache, FW, Umgebung usw.
Vorwort Verbreitet Bereits App Übersicht Python
TensorFlow
Keras
Google Colaboratory
Kapitel eins Web API Bereits (Diesmal) Umgebungskonstruktion (Ausführungsumgebung) docker-compose
Flask
Nginx
gunicorn
Kapitel II Web API Bereits Maschinelles Lernen Python
TensorFlow
Keras
Flask
Kapitel 3 Bildschirm noch nicht angefangen Umgebung Python
Django
Nginx
gunicorn
PostgreSQL
virtualenv
Kapitel 4 Bildschirm noch nicht angefangen Anzeige, Web-API-Aufrufteil Python
Django
Kapitel 5 AWS noch nicht angefangen Automatische Bereitstellung von AWS Github
EC2
CodeDeploy
CodePipeline

Umgebung * Ich denke, es wird funktionieren, auch wenn es nicht die folgende Ver ist, aber bitte beachten Sie, dass es alt ist: no_good_tone2: </ sup>

Ubuntu-Version

$ 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

Docker-Version

$ 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-Version verfassen

$ 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

* Aus irgendeinem Grund Build unbekannt. Ich gab auf, weil es einige Zeit zu dauern schien: schluchzen: </ sup>

So erstellen Sie eine Ausführungsumgebung

Einfach ausgedrückt ist Docker-Compose ordnungsgemäß installiert. Wenn Sie die erforderlichen Dateien gemäß der unten beschriebenen [Verzeichnisstruktur](# Verzeichnisstruktur) platzieren, Führen Sie einfach den folgenden Befehl aus:

Bauen&Beginnen Sie mit dem Hintergrund


docker-compose up -d --build

Das erstmalige Erstellen dauert einige Zeit, aber wenn Sie nach dem Erstellen des Containers auf die Web-API klicken, sieht es wie das folgende GIF aus.

Web_API-Ausführungsbeispiel


http://localhost:7020/recommend/api/what-music/Ein Lied, das traurig ist und sich jemandes Glück wünscht

Beispiel für die Ausführung einer Web-API

Peek 2020-05-16 14-30.gif Es gibt verschiedene Tools, daher denke ich, dass alles in Ordnung ist, aber wie GIF Es wird in JSON zurückgegeben.

Verzeichnisaufbau

Ich mache es richtig $ \ tiny {* Starr es nicht an} $: no_good_tone1: Es gibt viele Mülldateien, aber sie befinden sich auf Github. Quelle

Verzeichnisaufbau


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

Dateien, die zum Erstellen einer lokalen Umgebung mit Docker-Compose erforderlich sind

docker-compose.yml


version: '3'
services:
###########App Server Einstellungen###########
  app_tensor:
    container_name: app_tensor
    #Richtlinie zum Neustart des Dienstes
    restart: always
    #Verzeichnis mit der zu erstellenden Docker-Datei
    build: ./app_tensor
    volumes:
      #Verzeichnis zum Mounten
      - ./app_tensor:/dk_tensor_fw/app_tensor
    ports:
      #Host-seitiger Port: Container-seitiger Port
      - 7010:7010
    networks:
      - nginx_network
###########App Server Einstellungen###########

###########Webserver-Einstellungen###########
  web-nginx:
    container_name: web-nginx
    build: ./web_nginx
    volumes:
      #Verzeichnis zum Mounten
      - ./web_nginx:/dk_tensor_fw/web_nginx
    ports:
      #Portweiterleitung vom Host-PC 7020 zum Container 7020
      - 7020:7020
    depends_on:
      #Geben Sie die Abhängigkeit an. Netz-App vor dem Start des Servers-Startet den Server
      - app_tensor
    networks:
      - nginx_network
###########Webserver-Einstellungen###########
networks:
  nginx_network:
    driver: bridge

(Referenz) So überprüfen Sie freie Ports


#Überprüfen Sie die freien Ports (frei, wenn nichts angezeigt wird)
netstat -an | grep 7010

Dockerfile ← Ap Server Seite(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 ← Webserverseite(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 {
        #Wenn Sie den Dienstnamen des Containers angeben, wird der Name aufgelöst
        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;
        }

        #Statische Dateianforderungen werden statisch weitergeleitet. ← Es ist nicht erforderlich, da es nicht verwendet wird.
        location /static/ {
            alias /dk_tensor_fw/app_tensor/satic/;
        }
    }

Bestätigung der abgeschlossenen Umgebung

Beginnen Sie mit Build & Hintergrund

$ docker-compose up -d --build

Docker-Compose Bildinformationen anzeigen

$ 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

Ist es schlecht gemacht? Es scheint, dass die Kapazität ziemlich groß ist: Schweiß: </ sup>

Liste der Container

$ 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

Verbindung zum Container herstellen (Ap-Serverseite)

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

Ich habe es in einen Container auf der Ap-Serverseite gelegt. .. ..

Überprüfen Sie den Inhalt, um festzustellen, ob TensorFlow oder Keras enthalten sind

Ich habe einige weggelassen, weil die Anzeige des Ausgabeergebnisses lang ist: Schweiß: </ 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
(Kürzung)

Es scheint, dass TensorFlow, Keras usw. alle enthalten sind. .. ..

Stellen Sie eine Verbindung zum Container auf der Webserverseite her

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

Ich habe es auch in den Container auf der Webserverseite gestellt.

Überprüfen Sie vorerst, ob der Webserver (Nginx) ausgeführt wird.

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

Es scheint, dass Nginx auch läuft. Ich habe die Ausführungsumgebung bisher bestätigt. Wenn Sie die WEB-API wie im obigen [Web-API-Ausführungsbeispiel](# Web-API-Ausführungsbeispiel) gezeigt aufrufen, sollten Sie eine Ausführungsumgebung auf der WEB-API-Seite haben. .. ..

Über die Zukunft

Dieses Mal konnte ich die Ausführungsumgebung auf der WEB-API-Seite ein wenig organisieren. Außerdem hoffe ich, dass ich es nach und nach auffrischen und organisieren kann, wenn ich Zeit habe: schluchzen: Es ist unentschlossen, aber das nächste Mal möchte ich den Teil des maschinellen Lernens organisieren.

Kapitel Einstufung Status Inhalt Sprache, FW, Umgebung usw.
Vorwort Verbreitet Bereits App Übersicht Python
TensorFlow
Keras
Google Colaboratory
Kapitel eins Web API Bereits Umgebungskonstruktion (Ausführungsumgebung) docker-compose
Flask
Nginx
gunicorn
Kapitel II Web API Bereits Maschinelles Lernen Python
TensorFlow
Keras
Flask
Kapitel 3 Bildschirm noch nicht angefangen Umgebung Python
Django
Nginx
gunicorn
PostgreSQL
virtualenv
Kapitel 4 Bildschirm noch nicht angefangen Anzeige, Web-API-Aufrufteil Python
Django
Kapitel 5 AWS noch nicht angefangen Automatische Bereitstellung von AWS Github
EC2
CodeDeploy
CodePipeline

Recommended Posts

(Hinweis) Eine Webanwendung, die TensorFlow verwendet, um empfohlene Songnamen abzuleiten. [Erstellen Sie eine Ausführungsumgebung mit Docker-Compose.]
(Hinweis) Eine Webanwendung, die TensorFlow verwendet, um empfohlene Songnamen abzuleiten.
(Hinweis) Web-App, die TensorFlow verwendet, um empfohlene Songnamen abzuleiten [Maschinelles Lernen]
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Beachten Sie, dass ich süchtig danach war, mit Pythons mysql.connector über eine Webanwendung auf die Datenbank zuzugreifen
Erstellen Sie mit pyenv unter Ubuntu 12.04 schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
Erstellen Sie mit venv unter Ubuntu 14.04 LTS schnell eine Ausführungsumgebung für Python3.4 + Nginx + uWSGI + Flask-Webanwendungen
Lassen Sie uns mit Flask eine Webanwendung zur Konvertierung von A nach B erstellen! Von Grund auf neu ...
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
[Hinweis] So erstellen Sie eine Mac-Entwicklungsumgebung
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
Erstellen einer TensorFlow-Umgebung, die GPUs unter Windows 10 verwendet
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Minimales Makefile und buildout.cfg, um eine Umgebung mit buildout zu erstellen
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
[AWS] Flask-Anwendungsbereitstellungsversion, die versucht hat, eine Python-Umgebung mit eb zu erstellen [Elastic Beanstalk]
Ich habe mir eine Möglichkeit ausgedacht, ein 3D-Modell aus Fotos zu erstellen. Teil 01 Erstellen einer Umgebung
Erstellen Sie eine Umgebung mit virtualenv
Erstellen Sie eine Windows Python-Ausführungsumgebung mit VScode + Remote WSL
Versuchen Sie, mit angr + bingraphvis einen Ausführungspfaddifferenz-Viewer zu erstellen
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
[AWS] Vorbereitung der Bereitstellung von Flask-Anwendungen zum Erstellen einer Python-Umgebung mit eb [Elastic Beanstalk]