2016-12-01 2 views
3

Wie kann die CloudML-Vorhersage-API am besten im Produktionsdienst verwendet werden?Verwenden der CloudML-Vorhersage-API in der Produktion ohne gcloud

Ich habe gesehen: https://cloud.google.com/ml/docs/quickstarts/prediction aber es stützt sich auf gcloud Werkzeug

Ich bin in Lösung, die nicht davon abhängt, installiert und initialisiert auf Maschine gcloud hat den Antrag zu machen. Es wäre großartig, eine Lösung zu haben, die auf GCP, AWS und möglicherweise anderen Clouds funktioniert.

Danke

Antwort

5

Ich werde Ihnen zeigen, wie Sie Ihre Produktionsumgebung authentifizieren CloudML Online-Vorhersage zu verwenden. Die CloudML-Schnellstarts verwenden gcloud, um den Endbenutzer über Benutzernamen, Passwort usw. zu authentifizieren. gcloud skaliert nicht gut in Umgebungen mit 100-er Maschinenstart und -stopp. Im Folgenden führen wir Sie durch die Schritte zum Erstellen eines Cloud-Dienstkontos und zum Generieren eines privaten Schlüssels , mit dem sich Ihre Produktionsinstanzen bei den Google-Servern identifizieren können. Siehe Authentifizierungsdokumentation here.

Hier ist ein Rezept, das Sie verwenden können.

PROJECT= 
MODEL_NAME= 
SERVICE_ACCOUNT_PREFIX=cloud-ml-predict 
SERVICE_ACCOUNT="${SERVICE_ACCOUNT_PREFIX}@${PROJECT}.iam.gserviceaccount.com" 

Diese Schritte müssen nur einmal ausgeführt werden und erstellen ein Dienstkonto und einen privaten Schlüssel für Sie.

# Make a new service account 
gcloud iam service-accounts create ${SERVICE_ACCOUNT_PREFIX} \ 
    --display-name ${SERVICE_ACCOUNT_PREFIX} 

# Provide correct role to service account permissions: 
gcloud projects add-iam-policy-binding $PROJECT \ 
    --member "serviceAccount:$SERVICE_ACCOUNT" --role roles/viewer 

# Create private key for the service account: 
gcloud iam service-accounts keys create --iam-account \ 
    $SERVICE_ACCOUNT private_key.json 

Nachdem wir nun einen privaten Schlüssel (in private_key.json) haben wir die Vorhersage API von jedem Rechner aus aufrufen, die die googleapiclient Python-Bibliothek hat. Jetzt von jedem Rechner mit oder ohne gcloud Sie müssen nur die folgenden Zeilen enthalten, um die Vorhersage CloudML Zugriff Service über HTTP

scopes = ['https://www.googleapis.com/auth/cloud-platform'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name(key_filename, scopes=scopes) 
ml_service = discovery.build('ml', 'v1beta1', credentials=credentials) 

Schließlich ist hier ein ausgearbeitetes Beispiel vorausgesetzt, Sie haben einen der MNIST Modell aus der quickstarts eingesetzt.

cat > key_pair_cloud_ml_serve.py <<EOD 
from googleapiclient import discovery 
import json 
from oauth2client.service_account import ServiceAccountCredentials 
import sys 

def get_mnist_prediction(ml_service, project, model_name, instance): 
    parent = 'projects/{}/models/{}'.format(project, model_name) 
    request_dict = {'instances': [json.loads(instance)]} 

    request = ml_service.projects().predict(name=parent, body=request_dict) 
    print request.execute() # waits till request is returned 

if __name__ == '__main__': 
    usage_str = 'usage: python prog private_key.json MODEL_NAME data/predict*json' 
    assert len(sys.argv) == 4, usage_str 

    key_file = sys.argv[1] 
    model_name = sys.argv[2] 
    data_file = sys.argv[3] 

    scopes = ['https://www.googleapis.com/auth/cloud-platform'] 
    credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file, 
scopes=scopes) 
    ml_service = discovery.build('ml', 'v1beta1', credentials=credentials) 
    with open(key_file) as ff: 
    project = json.load(ff)['project_id'] 


    with open(data_file) as ff: 
    for ii, instance in enumerate(ff): 
     get_mnist_prediction(ml_service, project, model_name, instance) 
EOD 

Und aus dem mnist/deployable Ordner des Cloud ML samples wir unseren Code nennen ...

python key_pair_cloud_ml_serve.py private_key.json \ 
    $MODEL_NAME data/predict_sample.tensor.json 


{u'predictions': [{u'prediction': 5, u'key': 0, u'scores': [0.04025577753782272, 0.00042669562390074134, 0.005919951014220715, 0.4221051335334778, 2.2986243493505754e-05, 0.5084351897239685, 0.0007824163185432553, 0.01125132292509079, 0.008616944774985313, 0.0021835025399923325]}]} 

Voila! Wir haben einen privaten Schlüssel verwendet und nie gcloud zur Authentifizierung oder Abfrage unseres Vorhersagemodells benötigt!

+0

Wie wählen Sie die das Dienstkonto Projekt wird mit in dem Schritt zugeordnet werden 'gcloud iam Service-Konten erstellen $ {SERVICE_ACCOUNT_PREFIX} \ --display-name $ {SERVICE_ACCOUNT_PREFIX}' – Andrew

+0

Andrew, ich glaube nicht, es ist wichtig. Das Projekt, dem das Modell gehört, wird weiterhin in Rechnung gestellt und muss weiterhin den Zugriff auf das Dienstkonto zulassen (unabhängig davon, welches Projekt es besitzt). Das Projekt, dem das Dienstkonto gehört, behält lediglich die Möglichkeit, das Dienstkonto zu löschen. – JoshGC

Verwandte Themen