我有一个在AppEngine上运行的web应用程序(react+node.js(
我想(从这个网络应用程序(开始一项需要GPU的机器学习工作(在AI平台上的容器中运行,或像本教程中那样使用GPU节点池在GKE上运行,但我们对其他解决方案持开放态度(
我正在考虑尝试本答案结尾所描述的内容,基本上是使用project.job.create API发出HTTP请求以启动作业。
ML作业的更多详细信息(如果有用的话(:它每秒生成一个输出,存储在云存储上,然后在web应用程序中读取。
我正在寻找如何设置的示例?作业配置将驻留在哪里?我应该如何设置API调用来启动该作业?还有其他方法可以达到同样的效果吗?
提前谢谢!
在Google Cloud上,一切都是API,您可以通过HTTP请求与所有产品进行交互。这样你就可以最终实现你想要的。
我个人没有一个例子,但你必须建立一个JSON作业描述,并将其发布到API。
不要忘记,当您与Google Cloud API交互时,您必须在Authorization: Bearer
头中添加访问令牌
你的工作配置描述应该在哪里?这取决于。。。
如果它与你的App Engine应用程序密切相关,你可以将其添加到App Engine代码中,并将其"硬编码";。该选项的缺点是,无论何时您必须更新配置,都必须重新部署新的应用程序引擎版本。但是,如果您的新版本不正确,那么回滚到以前的稳定版本是容易且一致的。
如果你喜欢以不同的方式更新你的配置文件和应用程序引擎代码,你可以将配置存储在应用程序引擎的代码之外,例如在云存储上。像这样,更新很简单:更新云存储上的配置以更改作业配置。但是,应用程序引擎版本和配置版本之间不再存在关系。而且回滚到稳定版本可能会更加困难。
您还可以将两者结合使用,在应用程序引擎代码中有一个默认作业配置,以及一个可能设置为指向包含新版本配置的云存储文件的环境变量。
我不知道它是否能回答你所有的问题。如果你想了解某些部分的更多细节,请随时发表评论
如上所述,您可以使用AI平台api通过post
创建作业。下面是一个使用Java脚本和请求触发作业的示例。一些有用的提示:
-
Jobs控制台手动创建作业,然后使用api列出此作业,然后您将获得如何触发它的完美
json
示例。 -
您可以使用
Try this API
工具来获取手动创建的作业的json输出。使用此路径获取作业:projects/<project name>/jobs/<job name>
。 -
出于测试目的,使用OAuth 2.0 Playground获取授权令牌(步骤2->访问令牌:(。查看文档以获得明确的方法。
并非json上需要所有参数,这只是我使用上述步骤创建并获得json的作业的一个示例。
JS示例:
var request = require('request');
request({
url: 'https://content-ml.googleapis.com/v1/projects/<project-name>/jobs?alt=json',
method: 'POST',
headers: {"authorization": "Bearer ya29.A0AR9999999999999999999999999"},
json: {
"jobId": "<job name>",
"trainingInput": {
"scaleTier": "CUSTOM",
"masterType": "standard",
"workerType": "cloud_tpu",
"workerCount": "1",
"args": [
"--training_data_path=gs://<bucket>/*.jpg",
"--validation_data_path=gs://<bucket>/*.jpg",
"--num_classes=2",
"--max_steps=2",
"--train_batch_size=64",
"--num_eval_images=10",
"--model_type=efficientnet-b0",
"--label_smoothing=0.1",
"--weight_decay=0.0001",
"--warmup_learning_rate=0.0001",
"--initial_learning_rate=0.0001",
"--learning_rate_decay_type=cosine",
"--optimizer_type=momentum",
"--optimizer_arguments=momentum=0.9"
],
"region": "us-central1",
"jobDir": "gs://<bucket>",
"masterConfig": {
"imageUri": "gcr.io/cloud-ml-algos/image_classification:latest"
}
},
"trainingOutput": {
"consumedMLUnits": 1.59,
"isBuiltInAlgorithmJob": true,
"builtInAlgorithmOutput": {
"framework": "TENSORFLOW",
"runtimeVersion": "1.15",
"pythonVersion": "3.7"
}
}
}
}, function(error, response, body){
console.log(body);
});
结果:
...
{
createTime: '2022-02-09T17:36:42Z',
state: 'QUEUED',
trainingOutput: {
isBuiltInAlgorithmJob: true,
builtInAlgorithmOutput: {
framework: 'TENSORFLOW',
runtimeVersion: '1.15',
pythonVersion: '3.7'
}
},
etag: '999999aaaac='
感谢大家的投入。这对帮助我解决问题很有用,但我也想分享我最终采取的方法:
我首先要确保我可以手动启动我的工作。我将本教程与一个config.yaml文件一起使用,该文件看起来如下:
workerPoolSpecs:
machineSpec:
machineType: n1-standard-4
acceleratorType: NVIDIA_TESLA_T4
acceleratorCount: 1
replicaCount: 1
containerSpec:
imageUri: <Replace this with your container image URI>
args: ["--some=argument"]
当我有一份可以手动启动的工作时,我转而使用Vertex AI Node.js API启动作业或取消作业。API存在于其他语言中。我知道我最初的问题是关于HTTP请求,但使用API语言对我来说要容易得多,特别是因为我不必担心身份验证。
我希望这是有用的,乐意提供模式细节,如果需要。