【问题标题】:Submitting Google Cloud ML Engine Jobs from Python Directly直接从 Python 提交 Google Cloud ML Engine 作业
【发布时间】:2018-06-18 13:02:51
【问题描述】:

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

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

不过,我知道有一个适用于 Google Cloud 的 Python 客户端库,但其中的文档似乎有点不透明。

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

【问题讨论】:

    标签: python google-cloud-platform keras google-cloud-ml google-python-api


    【解决方案1】:

    确实有一种方法可以通过 Python 脚本向 Cloud ML Engine 提交作业。您可以为此目的使用Google Python API Client Library,并且在我分享的链接中,您可以查看API 调用方式的详细说明。有一个逐个命令的解释,最后是一个如何把所有东西放在一起的例子。为了使用该库,您必须先安装它,如 this other page 中所述。

    那么,您感兴趣的方法(用于提交作业)是cloudml.projects.jobs.create(),您可以在developers page 中找到有关如何调用它的详细信息。我认为您可能有兴趣首先使用 REST API,以便熟悉它的工作原理;您可以通过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 作业。

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

    【讨论】:

    • 小评论说你做了两次request.execute()。第二个总是会失败,因为在执行第一个之后,my_job_name 的作业已经存在。
    猜你喜欢
    • 2017-03-09
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2017-09-05
    • 2015-02-21
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多