直接从 Python 提交 Google Cloud ML Engine 作业

Submitting Google Cloud ML Engine Jobs from Python Directly

我有一个 Keras .h5 模型,我一直在本地训练它,但现在希望通过 Google Cloud ML-Engine 自动化整个过程。

我已将所有 GCloud 存储桶设置为可从应用程序访问,并且我已阅读有关将作业配置为 submit a Keras model 以在 GCloud ML-Engine 中进行训练的信息。但是,所有这些教程(包括 google 云 ml-engine 上的文档)都表明 运行 最好从命令行 运行 gcloud ml-engine jobs submit training 完成这项工作。

我知道有一个 Python 客户端库用于 Google Cloud,但是关于它的文档似乎有点不透明。

有谁知道我是否可以从 python 文件本身(通过直接 API 调用或通过 Google 客户端库)完全提交模型训练?我问是因为我希望将其变成一个完全自动化的托管 Flask 网络应用程序,用于模型训练,因此它需要尽可能地放手。

确实有一种方法可以从 Python 脚本向 Cloud ML Engine 提交作业。您可以使用 Google Python API Client Library for that purpose, and in the link I shared you can have a look at a close explanation of how the API calls. There's a command-by-command explanation, and at the end an example of how to put everything together. In order to work with the library, you will have to install it first, as explained in this other page.

那么,您感兴趣的(用于提交工作的)方法是 cloudml.projects.jobs.create(),您可以在 developers page. I think you might be interested in playing around with the REST API first, in order to get familiar with how it works; you can do so through the APIs Explorer 中找到有关如何调用它的详细信息。下面是一个用于进行 API 调用的正文示例:

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'complex_model_m',
    'workerType': 'complex_model_m',
    'parameterServerType': 'large_model',
    'workerCount': 9,
    'parameterServerCount': 3,
    'packageUris': ['gs://<YOUR_TRAINER_PATH>/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task',
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': '<REGION>',
    'jobDir': 'gs://<YOUR_TRAINING_PATH>',
    'runtimeVersion': '1.4'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

您应该根据您的型号规格进行调整。准备就绪后,您可以查看此页面解释 how to submit a training job using Python,但简而言之,它应该是这样的:

from oauth2client.client import GoogleCredentials
from googleapiclient import discovery
from googleapiclient import errors

project_name = 'my_project_name'
project_id = 'projects/{}'.format(project_name)

credentials = GoogleCredentials.get_application_default()

cloudml = discovery.build('ml', 'v1', credentials=credentials)

request = cloudml.projects().jobs().create(body=job_spec, parent=project_id)

try:
    response = request.execute()
    # Handle a successful request

except errors.HttpError, err:
    logging.error('There was an error creating the training job.'
                  ' Check the details:')
    logging.error(err._get_reason())

您应该能够 运行 此代码,以便通过 Python 脚本提交 Cloud ML Engine 作业。

我希望这会有所帮助,并减轻您提到的文档的不透明度。