可以从 HTTP 请求启动 AI 平台作业吗?
Can you start AI platform jobs from HTTP requests?
我在 App Engine 上有一个网络应用程序 (react + node.js) 运行。
我想(从这个网络应用程序)开始一项需要 GPU 的机器学习工作(运行 in a container on AI platform or running on GKE using a GPU node pool like in this tutorial,但我们对其他解决方案持开放态度)。
我正在考虑尝试 , basically making an HTTP request to start the job using project.job.create API.
末尾描述的内容
有关 ML 作业的更多详细信息,以防它有用:它每秒生成一个输出,存储在 Cloud Storage 上,然后在 Web 应用程序中读取。
我正在寻找有关如何设置的示例?作业配置在哪里,我应该如何设置 API 调用来启动该作业?还有其他方法可以达到同样的效果吗?
提前致谢!
在Google云上,一切都是API,您可以通过HTTP请求与所有产品进行交互。所以你可以最终实现你想要的。
我个人没有示例,但您必须构建一个 JSON job description 和 post 到 API。
不要忘记,当您与 Google Cloud API 交互时,您必须在 Authorization: Bearer
header 中添加访问令牌
你的工作配置描述应该在哪里?这取决于...
如果它与您的 App Engine 应用密切相关,您可以将其添加到 App Engine 代码中并对其进行“硬编码”。该选项的缺点是任何时候您必须更新配置,您必须重新部署新的 App Engine 版本。但是,如果您的新版本不正确,则可以轻松且一致地回滚到以前的稳定版本。
如果您希望以不同方式更新您的配置文件和 App Engine 代码,您可以将配置存储在 App Engine 代码之外,例如在 Cloud Storage 上。这样,更新简单易行:更新 Cloud Storage 上的配置以更改作业配置。但是,App Engine 版本和配置版本之间不再存在关系。并且回滚到稳定版本可能会更加困难。
您也可以将两者结合起来,在您的 App Engine 代码中有一个默认作业配置,一个环境变量可能设置为指向包含新版本配置的云存储文件。
不知道是否解答了大家的疑问。如果您想了解某些部分的更多详细信息,请随时发表评论。
如前所述,您可以使用 AI 平台 api 通过 post
创建工作。
以下是使用 Java 脚本和请求触发作业的示例。
一些有用的提示:
Jobs console手动创建一个工作,然后使用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='
谢谢大家的意见。这对帮助我解决问题很有用,但我也想分享我最终采用的方法:
我首先确保可以手动开始我的工作。
我将此 tutorial 与 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 to start the job or cancel吧。 API 存在于其他语言中。
我知道我最初的问题是关于 HTTP 请求的,但是使用该语言的 API 对我来说要容易得多,特别是因为我不必担心身份验证。
希望对您有所帮助,如果需要,我很乐意提供模式详细信息。
我在 App Engine 上有一个网络应用程序 (react + node.js) 运行。
我想(从这个网络应用程序)开始一项需要 GPU 的机器学习工作(运行 in a container on AI platform or running on GKE using a GPU node pool like in this tutorial,但我们对其他解决方案持开放态度)。
我正在考虑尝试
有关 ML 作业的更多详细信息,以防它有用:它每秒生成一个输出,存储在 Cloud Storage 上,然后在 Web 应用程序中读取。
我正在寻找有关如何设置的示例?作业配置在哪里,我应该如何设置 API 调用来启动该作业?还有其他方法可以达到同样的效果吗?
提前致谢!
在Google云上,一切都是API,您可以通过HTTP请求与所有产品进行交互。所以你可以最终实现你想要的。
我个人没有示例,但您必须构建一个 JSON job description 和 post 到 API。
不要忘记,当您与 Google Cloud API 交互时,您必须在 Authorization: Bearer
header 中添加访问令牌
你的工作配置描述应该在哪里?这取决于...
如果它与您的 App Engine 应用密切相关,您可以将其添加到 App Engine 代码中并对其进行“硬编码”。该选项的缺点是任何时候您必须更新配置,您必须重新部署新的 App Engine 版本。但是,如果您的新版本不正确,则可以轻松且一致地回滚到以前的稳定版本。
如果您希望以不同方式更新您的配置文件和 App Engine 代码,您可以将配置存储在 App Engine 代码之外,例如在 Cloud Storage 上。这样,更新简单易行:更新 Cloud Storage 上的配置以更改作业配置。但是,App Engine 版本和配置版本之间不再存在关系。并且回滚到稳定版本可能会更加困难。
您也可以将两者结合起来,在您的 App Engine 代码中有一个默认作业配置,一个环境变量可能设置为指向包含新版本配置的云存储文件。
不知道是否解答了大家的疑问。如果您想了解某些部分的更多详细信息,请随时发表评论。
如前所述,您可以使用 AI 平台 api 通过 post
创建工作。
以下是使用 Java 脚本和请求触发作业的示例。
一些有用的提示:
Jobs console手动创建一个工作,然后使用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='
谢谢大家的意见。这对帮助我解决问题很有用,但我也想分享我最终采用的方法:
我首先确保可以手动开始我的工作。 我将此 tutorial 与 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 to start the job or cancel吧。 API 存在于其他语言中。 我知道我最初的问题是关于 HTTP 请求的,但是使用该语言的 API 对我来说要容易得多,特别是因为我不必担心身份验证。
希望对您有所帮助,如果需要,我很乐意提供模式详细信息。