我正在尝试使用来自Googles github的Census示例项目通过REST API请求启动培训工作。我能够提交一份工作,但它总是失败,因为我无法说明培训和评估(测试)文件的保存位置,而且文档真的缺乏 - 只是说明args[]
。当我检查Google ML中的日志时,会出现以下错误:
task.py: error: the following arguments are required: --train-files, --eval-files
The replica master 0 exited with a non-zero status of 2.
这是我制定的REST请求:
{
"jobId": "training_12",
"trainingInput": {
"scaleTier": "BASIC",
"packageUris": ["gs://MY_BUCKET/census.tar.gz"],
"pythonModule": "trainer.task",
"args": ["--train_files gs://MY_BUCKET/adult.data.csv", "--eval_files gs://MY_BUCKET/adult.test.csv"],
"region": "europe-west1",
"jobDir": "gs://MY_BUCKET/",
"runtimeVersion": "1.4",
"pythonVersion": "3.5"
}
}
在args
下我尝试了许多不同方式来说明火车和评估文件的位置,但我无法让它工作。为了澄清,我必须为此用例使用REST API - 而不是CLI。
由于
- 更新 -
我试图将args设为--train-files
和--eval-files
,但这仍然不起作用。
- 更新2 - 我已经能够通过将args配置为:
来解决这个问题"args": [
"--train-files",
"gs://MY_BUCKET/adult.data.csv",
"--eval-files",
"gs://MY_BUCKET/adult.test.csv",
"--train-steps",
"100",
"--eval-steps",
"10"],
现在,我收到一个新错误,日志似乎没有提供更多信息:"The replica master 0 exited with a non-zero status of 1."
日志实际上已经进行了一些培训,我怀疑这是与保存工作有关的事情,但我不确定。
答案 0 :(得分:2)
我发现在Google Cloud ML Engine中提交培训作业时,您已经找到了args
问题的解决方案。但是,让我与您分享一些文档页面,您可以在其中找到有关此主题的所有必需信息。
在关于formatting configuration parameters的第一页(在 Python 标签下),您可以看到'args': ['--arg1', 'value1', '--arg2', 'value2'],
字段的填充方式如下:
args
因此,定义['--my_first_arg', 'first_arg_value', '--my_second_arg', 'second_arg_value']
的正确方法是将它们作为键值对写为独立字符串。
此外,包含general information about Training jobs的其他页面解释说,培训服务接受参数作为字符串列表,格式为:
"args": [
"--train-files",
"gs://BUCKET/FILE",
"--eval-files",
"gs://BUCKET/FILE_2",
"--train-steps",
"100",
"--eval-steps",
"10"]
这就是为什么你共享的最后一个格式(下面)是正确的格式:
import { camelCase } from 'lodash';
const camelizeKeys = (obj) => {
if (Array.isArray(obj)) {
return obj.map(v => camelizeKeys(v));
} else if (obj !== null && obj.constructor === Object) {
return Object.keys(obj).reduce(
(result, key) => ({
...result,
[camelCase(key)]: camelizeKeys(obj[key]),
}),
{},
);
}
return obj;
};