簡體   English   中英

你能從 HTTP 請求開始 AI 平台作業嗎?

[英]Can you start AI platform jobs from HTTP requests?

我有一個在 App Engine 上運行的 web 應用程序(react + node.js)。
我想開始(從這個 web 應用程序)需要 GPU 的機器學習工作( 在 AI 平台上的容器中運行,或者像本教程中那樣使用 GPU 節點池在 GKE 上運行,但我們對其他解決方案持開放態度) .
我正在考慮嘗試這個答案末尾描述的內容,基本上是發出 HTTP 請求以使用project.job.create API開始作業。

有關 ML 作業的更多詳細信息,以防它有用:它每秒生成一個 output 存儲在 Cloud Storage 上,然后在 web 應用程序中讀取。

我正在尋找有關如何設置的示例? 作業配置在哪里,我應該如何設置 API 調用來啟動該作業? 還有其他方法可以達到相同的結果嗎?

先感謝您!

在谷歌雲上,all 是 API,你可以通過 HTTP 請求與所有產品進行交互。 所以你可以明確地實現你想要的。

我個人沒有示例,但您必須構建JSON 職位描述並將其發布到 API。

不要忘記,當你與谷歌雲 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 腳本和請求觸發作業的示例。 一些有用的提示:


  • 作業控制台手動創建一個作業,然后使用 api 列出這個作業然后你將有一個完美的json示例如何觸發它。

  • 您可以使用Try this API工具獲取手動創建的作業的 json output。 使用此路徑獲取作業: projects/<project name>/jobs/<job name>

  • 使用OAuth 2.0 Playground獲取授權令牌以進行測試(步驟 2 -> 訪問令牌:)。 檢查文檔以獲得明確的方法。


並非 json 需要所有參數,這只是我使用上述步驟創建並獲得 json 的作業的一個示例

例子:

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 對我來說要容易得多,特別是因為我不必擔心身份驗證。

我希望這有用,如果需要,我很樂意提供模式詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM