Share via


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

批次端點可用於對大量資料執行長批次作業。 這類資料可能會放置在不同的位置。 某些類型的批次端點也可以接收常值參數作為輸入。 在本教學課程中,我們將討論如何指定這些輸入,以及支援的不同類型或位置。

叫用端點之前

若要成功叫用批次端點及建立作業,請確定您符合下列資格:

  • 您具備執行批次端點部署的權限。 AzureML 資料科學家參與者擁有者角色可用來執行部署。 若要讓自定義角色定義讀取 批次端點 上的授權,以瞭解所需的特定許可權。

  • 您具備有效的 Microsoft Entra ID 權杖,代表要叫用端點的安全性主體。 此主體可以是使用者主體或服務主體。 在任何案例中,一旦叫用端點,就會在與權杖相關聯的身分識別下建立批次部署作業。 為了進行測試,您可以使用自己的認證進行叫用,如下所述。

    使用 Azure CLI 使用互動式或裝置程式碼驗證來登入:

    az login
    

    若要深入了解如何使用多種類型的認證進行驗證,請參閱批次端點上的授權

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

    提示

    若您使用無認證資料存放區或外部 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,供取用者用於建立批次工作。 相同的介面可用於指定部署預期的輸入和輸出。 使用輸入傳遞端點執行作業所需的任何資訊。

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

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

  • 資料輸入,這是特定儲存位置或 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)
    

    注意

    資料資產識別碼看起來會像 /subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>。 您也可以使用 azureml:/<datasset_name>@latest 作為指定輸入的方法。

  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. 建立輸入或要求:

    將檔案路徑放在下列變數中:

    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 = "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. 建立資料輸出:

    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
    

下一步