建立批次端點的作業和輸入資料
批次端點可用於對大量資料執行長批次作業。 這類資料可能會放置在不同的位置。 某些類型的批次端點也可以接收常值參數作為輸入。 在本教學課程中,我們將討論如何指定這些輸入,以及支援的不同類型或位置。
叫用端點之前
若要成功叫用批次端點及建立作業,請確定您符合下列資格:
您具備執行批次端點部署的權限。 AzureML 資料科學家、參與者和擁有者角色可用來執行部署。 若要讓自定義角色定義讀取 批次端點 上的授權,以瞭解所需的特定許可權。
您具備有效的 Microsoft Entra ID 權杖,代表要叫用端點的安全性主體。 此主體可以是使用者主體或服務主體。 在任何案例中,一旦叫用端點,就會在與權杖相關聯的身分識別下建立批次部署作業。 為了進行測試,您可以使用自己的認證進行叫用,如下所述。
若要深入了解如何使用多種類型的認證進行驗證,請參閱批次端點上的授權。
部署端點的計算叢集具有讀取輸入資料的存取權限。
提示
若您使用無認證資料存放區或外部 Azure 儲存體帳戶作為資料輸入,請確保設定計算叢集以存取資料。 計算叢集的受控識別可用於掛接和設定資料存放區。 作業 (invoker) 的身分識別仍用於讀取基礎資料,從而讓您實現細微的存取控制。
建立作業基本概念
若要從批次端點建立作業,您必須叫用它。 您可以使用 Azure CLI、適用於 Python 的 Azure 機器學習 SDK 或 REST API 呼叫來完成調用。 下列範例顯示批次端點的調用基本概念,這些端點會接收單一輸入數據資料夾進行處理。 如需不同輸入和輸出的範例,請參閱 瞭解輸入和輸出 。
使用 invoke
批次端點底下的作業:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
叫用特定部署
批次端點可在相同端點下裝載多個部署。 除非使用者另有指定,否則會使用預設端點。 您可以變更目前使用的部署,如下所示:
使用引數 --deployment-name
或 -d
指定部署名稱:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--deployment-name $DEPLOYMENT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
設定作業屬性
您可以在叫用時,在建立的作業中設定部分屬性。
注意
目前,設定作業屬性僅適用於具有管線元件部署的批次端點。
設定實驗名稱
使用 自變數 --experiment-name
來指定實驗的名稱:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--experiment-name "my-batch-job-experiment" \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
了解輸入和輸出
批次端點提供持久的 API,供取用者用於建立批次工作。 相同的介面可用於指定部署預期的輸入和輸出。 使用輸入傳遞端點執行作業所需的任何資訊。
批次端點支援兩種類型的輸入:
輸入和輸出的數目與類型取決於批次部署類型。 模型部署一律需要一個資料輸入,並產生一個資料輸出。 不支援常值輸入。 不過,管線元件部署提供更一般建構來建置端點,還可讓您指定任意數目的輸入 (資料和常值) 和輸出。
下表概述批次部署的輸入和輸出:
部署類型 | 輸入數目 | 支援的輸入類型 | 輸出數目 | 支援的輸出類型 |
---|---|---|---|---|
模型部署 | 1 | 資料輸入 | 1 | 資料輸出 |
管線元件部署 | [0..N] | 資料輸入和常值輸入 | [0..N] | 資料輸出 |
提示
輸入和輸出一律會命名。 這些名稱可作為索引鍵來加以識別,並在叫用期間傳遞實際值。 針對模型部署,由於其一律需要一個輸入和輸出,因此在叫用期間會忽略名稱。 您可以指派最能描述使用案例的名稱,例如「sales_estimation」。
資料輸入
資料輸入亦即指向資料存放位置的輸入。 由於批次端點通常會耗用大量資料,因此您無法在叫用要求中傳遞輸入資料。 相反地,您可以指定批次端點應前往尋找資料的位置。 在目標計算上掛接及串流輸入資料,藉此改善效能。
批次端點支援讀取位於下列儲存體選項中的檔案:
- Azure Machine Learning 資料資產,包括資料夾 (
uri_folder
) 和檔案 (uri_file
)。 - Azure Machine Learning 資料存放區,包括 Azure Blob 儲存體、Azure Data Lake Storage Gen1 和 Azure Data Lake Storage Gen2。
- Azure 儲存體帳戶,包括 Azure Data Lake Storage Gen1、Azure Data Lake Storage Gen2 和 Azure Blob 儲存體。
- 本機資料資料夾/檔案 (Azure Machine Learning CLI 或適用於 Python 的 Azure Machine Learning SDK)。 不過,該作業會導致本機資料上傳至您所處理工作區的預設 Azure Machine Learning 資料存放區。
重要
取代注意事項:FileDataset
(V1) 型別的資料集已被取代,未來將會淘汰。 依賴這項功能的現有批次端點會繼續運作,但是使用 GA CLIv2 (2.4.0 和更新版本) 或 GA REST API (2022-05-01 和更新版本) 建立的批次端點不支援 V1 資料集。
常值輸入
常值輸入亦即可在叫用期間表示及解析的輸入,例如字串、數字和布林值。 您通常會使用常值輸入將參數傳遞至端點,作為管線元件部署的一部分。 批次端點支援下列常值類型:
string
boolean
float
integer
僅限於管線元件部署中支援常值輸入。 請參閱使用常值輸入建立作業,了解如何指定它們。
資料輸出
資料輸出亦即應該存放批次工作結果的位置。 輸出會依名稱識別,而 Azure Machine Learning 會自動為每個具名輸出指派唯一路徑。 不過,您可以視需要指定另一個路徑。
重要
批次端點僅支援在 Azure Blob 儲存體資料存放區中寫入輸出。 如果您需要寫入已啟用階層命名空間的記憶體帳戶(也稱為 Azure Datalake Gen2 或 ADLS Gen2),請注意,這類記憶體服務可以註冊為 Azure Blob 儲存體 數據存放區,因為服務完全相容。 如此一來,您就可以將批次端點的輸出寫入 ADLS Gen2。
使用資料輸入建立作業
下列範例展示如何建立作業、從資料資產、資料存放區及 Azure 儲存體帳戶中取得資料輸入。
從資料資產輸入資料
Azure Machine Learning 資料資產 (先前稱為資料集) 支援做為作業的輸入。 請遵循下列步驟,使用儲存於 Azure Machine Learning 中已註冊資料資產的資料來執行批次端點作業:
警告
目前不支援 Table 型別 (MLTable
) 的資料資產。
首先,建立資料資產。 此資料資產包含一個具有多個 CSV 檔案的資料夾,您可以使用批次端點進行平行處理。 若您的資料已註冊為資料資產,則可略過此步驟。
在
YAML
中建立資料資產定義:heart-dataset-unlabeled.yml
$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json name: heart-dataset-unlabeled description: An unlabeled dataset for heart classification. type: uri_folder path: heart-classifier-mlflow/data
然後,建立資料資產:
az ml data create -f heart-dataset-unlabeled.yml
建立輸入或要求:
DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
注意
資料資產識別碼看起來會像
/subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>
。 您也可以使用azureml:/<datasset_name>@latest
作為指定輸入的方法。執行端點:
請使用
--set
引數指定輸入:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
針對提供模型部署服務的端點,您可以使用
--input
引數來指定資料輸入,因為模型部署一律只需要一個資料輸入。az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
當指定多個輸入時,引數
--set
通常會產生長命令。 在這種情況下,請將輸入放在YAML
檔案中,並使用--file
指定端點叫用所需的輸入。inputs.yml
inputs: heart_dataset: azureml:/<datasset_name>@latest
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
從資料存放區輸入資料
批次部署作業可以直接參考來自 Azure Machine Learning 已註冊資料存放區的資料。 在此範例中,您可先將一些資料上傳至 Azure Machine Learning 工作區中的預設資料存放區,然後對這些資料執行批次部署。 請遵循下列步驟,使用儲存在資料存放區中的資料執行批次端點作業。
存取 Azure Machine Learning 工作區中的預設資料存放區。 如果您的資料位於不同的存放區,您可以改用該存放區。 您不必使用預設資料存放區。
DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
注意
資料存放區識別碼看起來會像
/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>
。提示
工作區中的預設 Blob 資料存放區稱為 workspaceblobstore。 如果您已經知道工作區中預設資料存放區的資源識別碼,則可以略過此步驟。
您必須將一些範例資料上傳至資料存放區。 此範例假設您已將資料夾
sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data
的存放庫中所包含的範例資料上傳至 Blob 儲存體帳戶的資料夾heart-disease-uci-unlabeled
中。 請確定您已完成,再繼續進行。建立輸入或要求:
將檔案路徑放在下列變數中:
DATA_PATH="heart-disease-uci-unlabeled" INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
注意
請了解路徑
paths
如何附加至資料存放區的資源識別碼,以表示其後接的是資料存放區內部的路徑。提示
您也可以使用
azureml://datastores/<data-store>/paths/<data-path>
作為指定輸入的方法。執行端點:
請使用
--set
引數指定輸入:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
針對提供模型部署服務的端點,您可以使用
--input
引數來指定資料輸入,因為模型部署一律只需要一個資料輸入。az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
當指定多個輸入時,引數
--set
通常會產生長命令。 在這種情況下,請將輸入放在YAML
檔案中,並使用--file
指定端點叫用所需的輸入。inputs.yml
inputs: heart_dataset: type: uri_folder path: azureml://datastores/<data-store>/paths/<data-path>
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
如果您的資料是檔案,請改用
uri_file
類型。
從 Azure 儲存體帳戶輸入資料
Azure Machine Learning 批次端點可以從 Azure 儲存體帳戶中的雲端位置讀取資料,公用和私人接可。 利用下列步驟以使用儲存體帳戶中儲存的資料執行批次端點作業:
注意
如需深入了解從儲存體帳戶成功讀取資料所需的其他設定,請參閱設定計算叢集以存取資料一節。
建立輸入或要求:
執行端點:
請使用
--set
引數指定輸入:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
針對提供模型部署服務的端點,您可以使用
--input
引數來指定資料輸入,因為模型部署一律只需要一個資料輸入。az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
當指定多個輸入時,引數
--set
通常會產生長命令。 在這種情況下,請將輸入放在YAML
檔案中,並使用--file
指定端點叫用所需的輸入。inputs.yml
inputs: heart_dataset: type: uri_folder path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
如果您的資料是檔案,請改用
uri_file
類型。
使用常值輸入建立作業
管線元件部署可接受常值輸入。 下列範例展示如何指定名為 score_mode
、類型為 string
且值為 append
的輸入:
請將輸入放在 YAML
檔案中,並使用 --file
指定端點叫用所需的輸入。
inputs.yml
inputs:
score_mode:
type: string
default: append
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
您也可以使用引數 --set
來指定值。 然而,在指定多個輸入時,引數通常會產生長命令:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--set inputs.score_mode.type="string" inputs.score_mode.default="append"
使用資料輸出建立作業
下列範例展示如何變更名為 score
輸出的存放位置。 為求完整性,這些範例也會設定名為 heart_dataset
的輸入。
使用 Azure Machine Learning 工作區中的預設資料存放區,儲存這些輸出。 只要是 Blob 儲存體帳戶,您就可以使用工作區中的任何其他資料存放區。
建立資料輸出:
DATA_PATH="batch-jobs/my-unique-path" OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
為求完整性,也請建立資料輸入:
INPUT_PATH="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
注意
請了解路徑
paths
如何附加至資料存放區的資源識別碼,以表示其後接的是資料存放區內部的路徑。執行部署: