[PYTHON] Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt

Überblick

Es gibt eine Apple-Bibliothek für maschinelles Lernen namens turicreate. (Es sind maschinelle Lernmodelle, also sollte das in Ordnung sein)

Ein Memo, als ich eine Konfiguration vorgenommen habe, um ein Modell zu verarbeiten, das dies auf GCP verwendet Referenz: https://cloud.google.com/blog/products/ai-machine-learning/how-to-serve-deep-learning-models-using-tensorflow-2-0-with-cloud-functions

Verfassung

Untitled (1).png

Der Benutzer greift auf die GAE zu, und danach lädt Cloud Run das Modell aus dem Speicher herunter und funktioniert. Natürlich ist es nicht sinnvoll, es jedes Mal aus dem Speicher zu holen, daher wird das geladene Modell im Speicher zwischengespeichert.

Problem + Lösung

In der Referenzkonfiguration wird das Tensorflow-Modell von Cloud-Funktionen geladen und als API zurückgegeben. Im Fall von Turicreate kann es jedoch möglicherweise nicht erstellt werden, wenn versucht wird, die Abhängigkeit aufzulösen, was zu einem Fehler führt. (Es kann dasselbe sein, auch wenn Sie es mit GAE tun. Möglicherweise müssen Sie die Einstellungen von Cloud Build ändern, aber ich wusste nicht, ob es von GAE oder Cloud-Funktionen berührt wurde.)

Aus diesem Grund habe ich mich für Cloud Run entschieden, mit dem Sie Ihr eigenes Ausführungsimage erstellen, bereitstellen und ausführen können.

Implementierung

Die Implementierung selbst ist nichts, fast nach der Konfiguration von Python + CloudRun

main.py


import turicreate
import os
from flask import Flask, request, jsonify
from google.cloud import storage
import zipfile

model = None

app = Flask(__name__)


def download_model(bucket_name, source_blob_name, dest_blob_name):
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(source_blob_name)

    blob.download_to_filename(dest_blob_name)
    with zipfile.ZipFile(dest_blob_name) as modelZip:
        modelZip.extractall('.')


@app.route('/')
def root():
    global model
    request_json = request.get_json()

    if request.args and 'userId' in request.args:
        userId = request.args.get('userId')
    else:
        return jsonify({'message': 'userId is not found'}), 400
    if 'limit' in request.args:
        limit = int(request.args.get('limit'))
    else:
        limit = 10

    if model is None:
        load_model()

    result = model.recommend(users=[userId], k=limit)

    random.shuffle(result)
    return jsonify({'result': result})

def load_model():
    global model

    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './credential.json'
    download_model("learning-data", "model.zip", "./model.zip")
    model = turicreate.load_model('./model')
    

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=int(
        os.environ.get('PORT', 8080)), debug=False)
FROM python:3.7

ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .

RUN pip install -r requirements.txt

CMD [ "python", "main.py" ]

requirements.txt


turicreate==6.1
flask==1.1.1
gunicorn==20.0.4
google-cloud-storage==1.26.0

GAE ist in Ordnung, solange Sie auf den abgeschlossenen Dienst zugreifen

Aufgabe

→ Ich denke einmal darüber nach, wie die Daten im Speicher auf "key: time, value: model" gesetzt werden sollen, damit die Modelldaten zuerst zu einem separaten Zeitpunkt asynchron gelesen werden.

Dieser Bereich kann hilfreich sein https://cloud.google.com/run/docs/tips?hl=ja

Recommended Posts

Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie die CRUD-API mit der Fast API
Erstellen Sie eine Anwendung mit der Spotify-API
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
Verwenden Sie Matplotlib, um mehrere Liniendiagramme gleichzeitig aus einem Datenrahmen zu erstellen
Erstellen wir eine REST-API mit SpringBoot + MongoDB
Erstellen Sie mit ClustalW2 einen phylogenetischen Baum aus Biopyton
Erstellen einer interaktiven Anwendung mithilfe eines Themenmodells
Erstellen Sie mit Kaitai Struct einen Binärdatenparser
Erstellen Sie Word Cloud aus akademischen Programmen
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Erstellen Sie eine REST-API mit dem in Lobe und TensorFlow Serving erlernten Modell.
Erstellen Sie mithilfe der COTOHA-API eine App, die gut mit Berichten von Personen funktioniert
Entwickeln Sie eine Web-API, die in DB gespeicherte Daten mit Django und SQLite zurückgibt
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Erstellen eines seq2seq-Modells mithilfe der Funktions-API-Übersicht von keras
[Los] Erstellen Sie ein Tool, das den Rennwert des Pokémon zurückgibt, der von der Standardeingabe empfangen wurde
Ein Memo, das das Gesicht des mit Djangos OpenCV von der Webkamera aufgenommenen Bilds erkennt und zurückgibt.
Erstellen Sie mit GitHub Pages einen Pseudo-REST-API-Server
Erstellen eines seq2seq-Modells unter Verwendung der funktionalen API-Inferenz von keras
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Erstellen einer API, die mit BERT im Django REST-Framework negativ-positive Inferenzergebnisse zurückgibt
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ein Memo, das mit Python & Spark Daten aus dashDB liest
Erstellen Sie sofort ein Diagramm mit 2D-Daten mit der matplotlib von Python
Erstellen Sie einen Datenrahmen aus den erfassten Textdaten des Bootsrennens
Erstellen Sie ein seq2seq-Modell mit dem Functional API Model Building & Learning von keras
Erstellen Sie mithilfe der Twitter-Streaming-API einen Echtzeit-Bot für die automatische Antwort
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Erstellen Sie eine GCE-Instanz aus einem GCR Docker-Image mithilfe von Terraform
Python-Programm, das die Zeitnutzung aus icalendar-Daten aggregiert
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
Erstellen Sie eine API mit Django
Erstellen Sie eine Dummy-Datendatei
Erstellen Sie ein Modell zum Speichern von Informationen aus der Google Books-API für eine intuitive Handhabung und Prüfung
Ich habe mir eine Möglichkeit ausgedacht, ein 3D-Modell aus Fotos zu erstellen. Teil 01 Erstellen einer Umgebung
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
[numpy] Erstellen Sie eine sich bewegende Fenstermatrix aus mehrdimensionalen Zeitreihendaten
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Erstellen Sie mit Python3 + Falcon eine REST-API, die die aktuelle Uhrzeit zurückgibt
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
Erstellen Sie ganz einfach einen TalkBot mit Discord.py und der Talk-API von A3RT (pya3rt).
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Verwenden Sie ScraperWiki, um regelmäßig Daten von Ihrer Website abzurufen
Abrufen von Salesforce-Daten mithilfe der REST-API
Datenerfassung mit Python Googlemap API
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie einen Pandas-Datenrahmen aus einer Zeichenfolge.
Eine Funktion, die einen zufälligen Namen zurückgibt
Erstellen Sie ein verschachteltes Wörterbuch mit defaultdict
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Datenerfassungsnotiz mit der Backlog-API
Erstellen Sie eine API mit hug mit mod_wsgi
[Data Science-Grundlagen] Datenerfassung über API
Erstellen eines Lernmodells mit MNIST