可以从 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 对我来说要容易得多,特别是因为我不必担心身份验证。

希望对您有所帮助,如果需要,我很乐意提供模式详细信息。