在没有gcloud的情况下使用CloudML预测API

问题描述:

在生产服务中使用CloudML预测API的最佳方式是什么?在没有gcloud的情况下使用CloudML预测API

我看到: https://cloud.google.com/ml/docs/quickstarts/prediction 但是它依赖于gcloud工具

我寻找到解决方案不依赖于具有gcloud安装并发出请求初始化的机器上。拥有可用于GCP,AWS和其他云计算的解决方案将非常好。

感谢

我会告诉你如何来验证您的生产环境中使用CloudML网上预报名。 CloudML快速入门使用gcloud通过用户名,密码等认证最终用户。gcloud不能很好地适应100台机器启动和停止的环境。下面,我将引导您完成创建Cloud 服务帐户并生成私钥的步骤,以便您的生产实例向Google服务器标识自己。请参阅验证文档here

这里有一个你可以使用的配方。

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

这些步骤只能做一次,并且会为您创建一个服务帐户和私钥。

# 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 

现在我们有一个私钥(在private_key.json),我们可以称之为从具有googleapiclient Python库的任何计算机预测API。现在从任何机器带或不带gcloud你只需要包括以下行通过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) 

访问CloudML预测服务最后,这里有一个工作例子假设你从quickstarts部署的MNIST模型。

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 

而且从我们所说的我们的代码Cloud ML samplesmnist/deployable文件夹中...

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]}]} 

瞧!我们使用私钥,并且从不需要使用gcloud进行身份验证或查询我们的预测模型!

+0

你如何选择哪个项目的服务帐户将与步'相关gcloud IAM服务帐户创建$ {SERVICE_ACCOUNT_PREFIX} \ --display名$ {SERVICE_ACCOUNT_PREFIX}' – Andrew

+0

安德鲁,我不认为它很重要。拥有该模型的项目仍将被记帐,并且仍然必须允许服务帐户访问(无论哪个项目拥有该项目)。拥有服务帐户的项目仅保留删除服务帐户的能力。 – JoshGC