共用方式為


建立批次端點的作業和輸入資料

批次端點可讓您對大量資料執行長批次作業。 資料可以位於不同的位置,例如分散的區域。 某些類型的批次端點也可以接收常值參數作為輸入。

本文說明如何為批次端點指定參數輸入,以及如何建立部署作業。 此流程支援使用不同類型的資料。 如需一些範例,請參閱了解輸入和輸出

必要條件

若要成功叫用批次端點並建立作業,請確定您已完成下列必要條件:

  • 批次端點和部署。 如果您沒有這些資源,請參閱在批次端點中部署用於評分的模型 (英文) 以建立部署。

  • 執行批次端點部署的權限。 [AzureML 資料科學家]、[參與者] 和 [擁有者] 角色可用來執行部署。 如需自訂角色定義,請參閱批次端點上的授權 (英文),以檢閱所需的具體權限。

  • 有效的 Microsoft Entra ID 權杖,代表要叫用端點的安全性主體。 此主體可以是使用者主體或服務主體。 在您叫用端點後,Azure Machine Learning 會在與權杖相關聯的身分識別下建立批次部署作業。 您可以使用自己的認證進行叫用,如下列程序所述。

    使用 Azure CLI,以互動式裝置代碼驗證來進行登入:

    az login
    

    若要深入了解如何使用不同類型的認證來啟動批次部署作業,請參閱如何使用不同類型的認證來執行作業 (英文)。

  • 部署端點的計算叢集具有讀取輸入資料的存取權限。

    提示

    若您使用無認證資料存放區或外部 Azure 儲存體帳戶作為資料輸入,請確定您有設定用於資料存取的計算叢集 (英文)。 計算叢集的受控識別可用於掛接和設定資料存放區。 系統仍會使用作業 (invoker) 的身分識別來讀取基礎資料,這可讓您實現細微的存取控制。

建立作業基本概念

若要從批次端點建立作業,請叫用端點。 您可以使用 Azure CLI、適用於 Python 的 Azure Machine Learning 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,供取用者用於建立批次工作。 相同的介面可用於指定部署預期的輸入和輸出。 使用輸入傳遞端點執行作業所需的任何資訊。

此圖顯示批次端點中輸入和輸出的使用方式。

批次端點支援兩種類型的輸入:

  • 資料輸入:特定儲存位置或 Azure Machine Learning 資產的指標。
  • 常值輸入:您想要傳遞至作業的常值 (例如數字或字串)。

輸入和輸出的數目與類型取決於批次部署類型。 模型部署一律需要一個資料輸入,並產生一個資料輸出。 不支援常值輸入。 不過,管線元件部署提供更一般建構來建置端點,還可讓您指定任意數目的輸入 (資料和常值) 和輸出。

下表概述批次部署的輸入和輸出:

部署類型 輸入數目 支援的輸入類型 輸出數目 支援的輸出類型
模型部署 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) 的資料資產。

  1. 首先,建立資料資產。 此資料資產包含一個具有多個 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
    
  2. 建立輸入或要求:

    DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
    
  3. 執行端點:

    請使用 --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 工作區中的預設資料存放區,然後對這些資料執行批次部署。 請遵循下列步驟,使用儲存在資料存放區中的資料執行批次端點作業。

  1. 存取 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。 如果您已經知道工作區中預設資料存放區的資源識別碼,則可以略過此步驟。

  2. 將一些範例資料上傳至資料存放區。

    此範例假設您已將資料夾 sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data 中的存放庫所包含的範例資料上傳至 Blob 儲存體帳戶的資料夾 heart-disease-uci-unlabeled 中。 請務必先完成此步驟,再繼續進行。

  3. 建立輸入或要求:

    將檔案路徑放在 INPUT_PATH 變數中:

    DATA_PATH="heart-disease-uci-unlabeled"
    INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    請注意路徑 paths 的變數附加至資料存放區資源識別碼的方式。 這個格式表示後接的值是路徑。

    提示

    您也可以使用 azureml://datastores/<data-store>/paths/<data-path> 格式來指定輸入。

  4. 執行端點:

    請使用 --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 儲存體帳戶中的雲端位置讀取資料,公用和私人接可。 請使用下列步驟,透過儲存體帳戶所儲存的資料來執行批次端點作業。

若要深入了解用於從儲存體帳戶讀取資料的額外必要設定,請參閱設定用於資料存取的計算叢集 (英文)。

  1. 建立輸入或要求:

    設定 INPUT_DATA 變數:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    如果您的資料是檔案,請使用下列格式來設定變數:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. 執行端點:

    請使用 --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 的輸入。

  1. 使用 Azure Machine Learning 工作區中的預設資料存放區來儲存輸出。 您可以使用工作區中的任何其他資料存放區,只要其為 Blob 儲存體帳戶即可。

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    資料存放區識別碼看起來會像 /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>

  2. 建立資料輸出:

    設定 OUTPUT_PATH 變數:

    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 的變數附加至資料存放區資源識別碼的方式。 這個格式表示後接的值是路徑。

  3. 執行部署:

    請使用 --set 引數指定輸入:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.path=$INPUT_PATH \
        --set outputs.score.path=$OUTPUT_PATH