[英]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.