我使用以下Python代码创建机器学习任务:
credentials = GoogleCredentials.get_application_default()ml = discovery.build('ml','v1beta1', credentials=credentials)projectID = 'projects/{}'.format('testtf')jobDict = { 'jobId': 'test_job_2', 'trainingInput': { 'scaleTier': 'BASIC', 'packageUris': [ 'gs://testtf-ml/cloudmldist/1479282298/trainer-0.0.0.tar.gz' ], 'pythonModule': 'trainer.task', 'region': 'us-central1' } }request = ml.projects().jobs().create(parent = projectID, body = jobDict)response = request.execute()
任务创建并成功执行,但Google Cloud Storage上没有任何输出。
我在尝试重复https://cloud.google.com/ml/docs/quickstarts/training教程,但使用的是代码而不是控制台。
以下是通过控制台提交任务的命令:
JOB_NAME=mnist_${USER}_$(date +%Y%m%d_%H%M%S)PROJECT_ID=`gcloud config list project --format "value(core.project)"`TRAIN_BUCKET=gs://${PROJECT_ID}-mlTRAIN_PATH=${TRAIN_BUCKET}/${JOB_NAME}gsutil rm -rf ${TRAIN_PATH}gcloud beta ml jobs submit training ${JOB_NAME} \ --package-path=trainer \ --module-name=trainer.task \ --staging-bucket="${TRAIN_BUCKET}" \ --region=us-central1 \ -- \ --train_dir="${TRAIN_PATH}/train"
最后一行指定了输出目录。我不明白如何在代码中指定它。我使用的方法是:https://cloud.google.com/ml/reference/rest/v1beta1/projects.jobs/create
这是输入字段描述:https://cloud.google.com/ml/reference/rest/v1beta1/projects.jobs
我看到的唯一可疑字段是"args": [string]
,用于TrainingInput
,但我不明白如何使用它。我尝试这样指定它们:
jobDict = { 'jobId': 'test_job_2', 'trainingInput': { 'scaleTier': 'BASIC', 'packageUris': [ 'gs://testtf-ml/cloudmldist/1479282298/trainer-0.0.0.tar.gz' ], 'pythonModule': 'trainer.task', 'args': [ 'train_dir="gs://testtf-ml/test_output"' ], 'region': 'us-central1' } }
但这样的目录并未创建。我可以用什么方式为训练任务指定输出文件夹?我使用了这个示例:cloudml-samples-master\mnist\trainable
回答:
输出目录的设置方式应与命令行参数相同:
jobDict = { 'jobId': 'test_job_2', 'trainingInput': { 'scaleTier': 'BASIC', 'packageUris': [ 'gs://testtf-ml/cloudmldist/1479282298/trainer-0.0.0.tar.gz' ], 'pythonModule': 'trainer.task', 'args': [ '--train_dir=gs://testtf-ml/test_output' ], 'region': 'us-central1' } }
路径不需要额外的引号,并且在开头添加--
。