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. 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:
Ich habe es als Referenz beim Erstellen dieses Artikels verwendet: bow_tone1:
** (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 |
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>
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
Es gibt verschiedene Tools, daher denke ich, dass alles in Ordnung ist, aber wie GIF Es wird in JSON zurückgegeben.
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
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/;
}
}
$ 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
Ist es schlecht gemacht? Es scheint, dass die Kapazität ziemlich groß ist: Schweiß: </ 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#
Ich habe es in einen Container auf der Ap-Serverseite gelegt. .. ..
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. .. ..
$ docker-compose exec web-nginx /bin/bash
root@d6971e4dc05c:/#
Ich habe es auch in den Container auf der Webserverseite gestellt.
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. .. ..
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 |