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
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.
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.
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
→ 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