Share via


Skapa jobb och indata för batchslutpunkter

Batchslutpunkter kan användas för att utföra långa batchåtgärder över stora mängder data. Sådana data kan placeras på olika platser. Vissa typer av batchslutpunkter kan också ta emot literalparametrar som indata. I den här självstudien går vi igenom hur du kan ange dessa indata och vilka typer eller platser som stöds.

Innan du anropar en slutpunkt

Om du vill anropa en batchslutpunkt och skapa jobb kontrollerar du att du har följande:

  • Du har behörighet att köra en batchslutpunktsdistribution. AzureML-Dataforskare-, deltagar- och ägarroller kan användas för att köra en distribution. För anpassade rolldefinitioner läser du Auktorisering på batchslutpunkter för att känna till de specifika behörigheter som behövs.

  • Du har en giltig Microsoft Entra-ID-token som representerar ett säkerhetsobjekt för att anropa slutpunkten. Det här huvudkontot kan vara användarens huvudnamn eller tjänstens huvudnamn. När en slutpunkt anropas skapas i vilket fall som helst ett batchdistributionsjobb under den identitet som är associerad med token. I testsyfte kan du använda dina egna autentiseringsuppgifter för anropet enligt nedan.

    Använd Azure CLI för att logga in med antingen interaktiv autentisering eller enhetskodautentisering:

    az login
    

    Mer information om hur du autentiserar med flera typer av autentiseringsuppgifter finns i Auktorisering på batchslutpunkter.

  • Beräkningsklustret där slutpunkten distribueras har åtkomst till att läsa indata.

    Dricks

    Om du använder ett datalager utan autentiseringsuppgifter eller ett externt Azure Storage-konto som indata kontrollerar du att du konfigurerar beräkningskluster för dataåtkomst. Den hanterade identiteten för beräkningsklustret används för att montera lagringskontot. Jobbets identitet (anroparen) används fortfarande för att läsa underliggande data så att du kan uppnå detaljerad åtkomstkontroll.

Skapa grunderna för jobb

Om du vill skapa ett jobb från en batchslutpunkt måste du anropa det. Anrop kan göras med hjälp av Azure CLI, Azure Machine Learning SDK för Python eller ett REST API-anrop. I följande exempel visas grunderna för anrop för en batchslutpunkt som tar emot en enda indatamapp för bearbetning. Se Förstå indata och utdata för exempel med olika indata och utdata.

Använd åtgärden invoke under batchslutpunkter:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Anropa en specifik distribution

Batch-slutpunkter kan vara värdar för flera distributioner under samma slutpunkt. Standardslutpunkten används om inte användaren anger något annat. Du kan ändra den distribution som används på följande sätt:

Använd argumentet --deployment-name eller -d för att ange namnet på distributionen:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --deployment-name $DEPLOYMENT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Konfigurera jobbegenskaper

Du kan konfigurera några av egenskaperna i det skapade jobbet vid anropstillfället.

Kommentar

Konfigurering av jobbegenskaper är bara tillgängligt i batchslutpunkter med pipelinekomponentdistributioner för tillfället.

Konfigurera experimentnamnet

Använd argumentet --experiment-name för att ange namnet på experimentet:

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

Förstå indata och utdata

Batch-slutpunkter tillhandahåller ett beständiga API som konsumenterna kan använda för att skapa batchjobb. Samma gränssnitt kan användas för att ange indata och utdata som distributionen förväntar sig. Använd indata för att skicka all information som slutpunkten behöver för att utföra jobbet.

Diagram som visar hur indata och utdata används i batchslutpunkter.

Batch-slutpunkter stöder två typer av indata:

  • Dataindata, som pekar på en specifik lagringsplats eller Azure Machine Learning-tillgång.
  • Literala indata, som är literalvärden (t.ex. tal eller strängar) som du vill skicka till jobbet.

Antalet och typen av indata och utdata beror på typen av batchdistribution. Modelldistributioner kräver alltid en datainmatning och skapar ett datautdata. Literala indata stöds inte. Distributioner av pipelinekomponenter ger dock en mer allmän konstruktion för att skapa slutpunkter och gör att du kan ange valfritt antal indata (data och literal) och utdata.

I följande tabell sammanfattas indata och utdata för batchdistributioner:

Distributionstyp Indatanummer Indatatyper som stöds Utdatanummer Utdatatyper som stöds
Modelldistribution 1 Dataindata 1 Datautdata
Distribution av pipelinekomponenter [0..N] Indata och literala indata [0..N] Datautdata

Dricks

Indata och utdata namnges alltid. Dessa namn fungerar som nycklar för att identifiera dem och skicka det faktiska värdet under anropet. För modelldistributioner, eftersom de alltid kräver en indata och utdata, ignoreras namnet under anropet. Du kan tilldela det namn som bäst beskriver ditt användningsfall, till exempel "sales_estimation".

Dataindata

Dataindata refererar till indata som pekar på en plats där data placeras. Eftersom batchslutpunkter vanligtvis förbrukar stora mängder data kan du inte skicka indata som en del av begäran om anrop. I stället anger du den plats där batchslutpunkten ska gå för att leta efter data. Indata monteras och strömmas på målberäkningen för att förbättra prestandan.

Batch-slutpunkter stöder läsning av filer som finns i följande lagringsalternativ:

  • Azure Machine Learning-datatillgångar, inklusive mapp (uri_folder) och fil (uri_file).
  • Azure Machine Learning Data Stores, inklusive Azure Blob Storage, Azure Data Lake Storage Gen1 och Azure Data Lake Storage Gen2.
  • Azure Storage-konton, inklusive Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 och Azure Blob Storage.
  • Lokala datamappar/filer (Azure Machine Learning CLI eller Azure Machine Learning SDK för Python). Den åtgärden resulterar dock i att lokala data laddas upp till standarddatalagret för Azure Machine Learning för arbetsytan som du arbetar med.

Viktigt!

Utfasningsmeddelande: Datauppsättningar av typen FileDataset (V1) är inaktuella och kommer att dras tillbaka i framtiden. Befintliga batchslutpunkter som förlitar sig på den här funktionen fortsätter att fungera, men batchslutpunkter som skapats med GA CLIv2 (2.4.0 och senare) eller GA REST API (2022-05-01 och senare) stöder inte V1-datauppsättning.

Literala indata

Literala indata refererar till indata som kan representeras och matchas vid anrop, till exempel strängar, tal och booleska värden. Du använder vanligtvis literala indata för att skicka parametrar till slutpunkten som en del av en pipelinekomponentdistribution. Batch-slutpunkter stöder följande literaltyper:

  • string
  • boolean
  • float
  • integer

Literala indata stöds endast i pipelinekomponentdistributioner. Se Skapa jobb med literala indata för att lära dig hur du anger dem.

Datautdata

Datautdata refererar till den plats där resultatet av ett batchjobb ska placeras. Utdata identifieras med namn och Azure Machine Learning tilldelar automatiskt en unik sökväg till varje namngiven utdata. Du kan dock ange en annan sökväg om det behövs.

Viktigt!

Batch-slutpunkter har endast stöd för att skriva utdata i Azure Blob Storage-datalager. Om du behöver skriva till ett lagringskonto med hierarkiska namnområden aktiverade (kallas även Azure Datalake Gen2 eller ADLS Gen2) kan du observera att lagringstjänsten kan registreras som ett Azure Blob Storage-datalager eftersom tjänsterna är helt kompatibla. På så sätt kan du skriva utdata från batchslutpunkter till ADLS Gen2.

Skapa jobb med dataindata

I följande exempel visas hur du skapar jobb, tar dataindata från datatillgångar, datalager och Azure Storage-konton.

Indata från en datatillgång

Azure Machine Learning-datatillgångar (tidigare kallade datauppsättningar) stöds som indata för jobb. Följ dessa steg för att köra ett batchslutpunktsjobb med data som lagras i en registrerad datatillgång i Azure Machine Learning:

Varning

Datatillgångar av typen Tabell (MLTable) stöds för närvarande inte.

  1. Skapa först datatillgången. Den här datatillgången består av en mapp med flera CSV-filer som du ska bearbeta parallellt med batchslutpunkter. Du kan hoppa över det här steget om dina data redan är registrerade som en datatillgång.

    Skapa en datatillgångsdefinition i 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
    

    Skapa sedan datatillgången:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Skapa indata eller begäran:

    DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
    

    Kommentar

    ID för datatillgångar skulle se ut som /subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>. Du kan också använda azureml:/<datasset_name>@latest som ett sätt att ange indata.

  3. Kör slutpunkten:

    --set Använd argumentet för att ange indata:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
    

    För en slutpunkt som hanterar en modelldistribution kan du använda --input argumentet för att ange indata, eftersom en modelldistribution alltid bara kräver en datainmatning.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
    

    Argumentet --set tenderar att generera långa kommandon när flera indata anges. I sådana fall placerar du dina indata i en YAML fil och använder --file för att ange de indata som du behöver för slutpunktsanropet.

    inputs.yml

    inputs:
      heart_dataset: azureml:/<datasset_name>@latest
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

Indata från datalager

Data från Azure Machine Learning-registrerade datalager kan refereras direkt till batchdistributionsjobb. I det här exemplet laddar du först upp vissa data till standarddatalagret på Azure Machine Learning-arbetsytan och kör sedan en batchdistribution på den. Följ de här stegen för att köra ett batchslutpunktsjobb med data som lagras i ett datalager.

  1. Få åtkomst till standarddatalagret på Azure Machine Learning-arbetsytan. Om dina data finns i ett annat lager kan du använda det arkivet i stället. Du behöver inte använda standarddatalagret.

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

    Kommentar

    Datalager-ID skulle se ut som /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>.

    Dricks

    Standardlagringen av blobdata i en arbetsyta kallas för workspaceblobstore. Du kan hoppa över det här steget om du redan känner till resurs-ID:t för standarddatalagret på din arbetsyta.

  2. Du måste ladda upp exempeldata till datalagret. Det här exemplet förutsätter att du redan har laddat upp exempeldata som ingår i lagringsplatsen i mappen sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data i mappen heart-disease-uci-unlabeled i bloblagringskontot. Se till att du har gjort det innan du går vidare.

  3. Skapa indata eller begäran:

    Placera filsökvägen i följande variabel:

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

    Kommentar

    Se hur sökvägen paths läggs till i resurs-ID:t för datalagret för att ange att det som följer är en sökväg inuti den.

    Dricks

    Du kan också använda azureml://datastores/<data-store>/paths/<data-path> som ett sätt att ange indata.

  4. Kör slutpunkten:

    --set Använd argumentet för att ange indata:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
    

    För en slutpunkt som hanterar en modelldistribution kan du använda --input argumentet för att ange indata, eftersom en modelldistribution alltid bara kräver en datainmatning.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
    

    Argumentet --set tenderar att generera långa kommandon när flera indata anges. I sådana fall placerar du dina indata i en YAML fil och använder --file för att ange de indata som du behöver för slutpunktsanropet.

    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
    

    Om dina data är en fil använder du uri_file som typ i stället.

Indata från Azure Storage-konton

Azure Machine Learning-batchslutpunkter kan läsa data från molnplatser i Azure Storage-konton, både offentliga och privata. Använd följande steg för att köra ett batchslutpunktsjobb med data som lagras i ett lagringskonto:

Kommentar

Läs avsnittet konfigurera beräkningskluster för dataåtkomst för att lära dig mer om ytterligare konfiguration som krävs för att läsa data från lagringsacoutner.

  1. Skapa indata eller begäran:

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

    Om dina data är en fil:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. Kör slutpunkten:

    --set Använd argumentet för att ange indata:

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
    

    För en slutpunkt som hanterar en modelldistribution kan du använda --input argumentet för att ange indata, eftersom en modelldistribution alltid bara kräver en datainmatning.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
    

    Argumentet --set tenderar att generera långa kommandon när flera indata anges. I sådana fall placerar du dina indata i en YAML fil och använder --file för att ange de indata som du behöver för slutpunktsanropet.

    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
    

    Om dina data är en fil använder du uri_file som typ i stället.

Skapa jobb med literala indata

Distributioner av pipelinekomponenter kan ta literala indata. I följande exempel visas hur du anger en indata med namnet score_mode, av typen string, med värdet append:

Placera dina indata i en YAML fil och använd --file för att ange de indata som du behöver för slutpunktsanropet.

inputs.yml

inputs:
  score_mode:
    type: string
    default: append
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml

Du kan också använda argumentet --set för att ange värdet. Det tenderar dock att generera långa kommandon när flera indata anges:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
    --set inputs.score_mode.type="string" inputs.score_mode.default="append"

Skapa jobb med datautdata

I följande exempel visas hur du ändrar platsen där utdata med namnet score placeras. För fullständighet konfigurerar de här exemplen även indata med namnet heart_dataset.

  1. Använd standarddatalagret på Azure Machine Learning-arbetsytan för att spara utdata. Du kan använda alla andra datalager på din arbetsyta så länge det är ett bloblagringskonto.

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

    Kommentar

    Datalager-ID skulle se ut som /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>.

  2. Skapa ett datautdata:

    DATA_PATH="batch-jobs/my-unique-path"
    OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    Skapa även dataindata för fullständighet:

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

    Kommentar

    Se hur sökvägen paths läggs till i resurs-ID:t för datalagret för att ange att det som följer är en sökväg inuti den.

  3. Kör distributionen:

    Använd argumentet --set för att ange indata:

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

Nästa steg