Taken en invoergegevens voor batcheindpunten maken

Batch-eindpunten kunnen worden gebruikt om lange batchbewerkingen uit te voeren over grote hoeveelheden gegevens. Dergelijke gegevens kunnen op verschillende plaatsen worden geplaatst. Sommige typen batcheindpunten kunnen ook letterlijke parameters ontvangen als invoer. In deze zelfstudie wordt beschreven hoe u deze invoer kunt opgeven en welke verschillende typen of locaties worden ondersteund.

Voordat u een eindpunt aanroept

Als u een batch-eindpunt wilt aanroepen en taken wilt maken, moet u het volgende hebben:

  • U bent gemachtigd om een batch-eindpuntimplementatie uit te voeren. De rollen AzureML Datawetenschapper, Inzender en Eigenaar kunnen worden gebruikt om een implementatie uit te voeren. Lees autorisatie voor aangepaste rollendefinities voor batcheindpunten om te weten welke specifieke machtigingen nodig zijn.

  • U hebt een geldig Microsoft Entra ID-token dat een beveiligingsprincipal vertegenwoordigt om het eindpunt aan te roepen. Deze principal kan een gebruikers-principal of een service-principal zijn. Wanneer een eindpunt is aangeroepen, wordt er in elk geval een batchimplementatietaak gemaakt onder de identiteit die is gekoppeld aan het token. Voor testdoeleinden kunt u uw eigen referenties gebruiken voor de aanroep, zoals hieronder wordt vermeld.

    Gebruik de Azure CLI om u aan te melden met behulp van interactieve verificatie of verificatie van apparaatcode:

    az login
    

    Voor meer informatie over verificatie met meerdere typen referenties leest u Autorisatie op batch-eindpunten.

  • Het rekencluster waar het eindpunt is geïmplementeerd, heeft toegang om de invoergegevens te lezen.

    Tip

    Als u een gegevensarchief met minder referenties of een extern Azure Storage-account gebruikt als gegevensinvoer, moet u rekenclusters configureren voor gegevenstoegang. De beheerde identiteit van het rekencluster wordt gebruikt voor het koppelen van het opslagaccount. De identiteit van de taak (invoker) wordt nog steeds gebruikt om de onderliggende gegevens te lezen, zodat u gedetailleerd toegangsbeheer kunt bereiken.

Basisbeginselen van taken maken

Als u een taak wilt maken op basis van een batch-eindpunt, moet u deze aanroepen. U kunt aanroepen doen met behulp van de Azure CLI, de Azure Machine Learning SDK voor Python of een REST API-aanroep. In de volgende voorbeelden ziet u de basisbeginselen van aanroepen voor een batch-eindpunt dat één invoergegevensmap ontvangt voor verwerking. Zie Informatie over invoer en uitvoer voor voorbeelden met verschillende invoer en uitvoer.

Gebruik de invoke bewerking onder batch-eindpunten:

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

Een specifieke implementatie aanroepen

Batch-eindpunten kunnen meerdere implementaties hosten onder hetzelfde eindpunt. Het standaardeindpunt wordt gebruikt, tenzij de gebruiker anders opgeeft. U kunt de implementatie wijzigen die als volgt wordt gebruikt:

Gebruik het argument --deployment-name of -d geef de naam van de implementatie op:

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

Taakeigenschappen configureren

U kunt enkele eigenschappen in de gemaakte taak configureren tijdens het aanroepen.

Notitie

Het configureren van taakeigenschappen is momenteel alleen beschikbaar in batch-eindpunten met pijplijnonderdeelimplementaties.

Experimentnaam configureren

Gebruik het argument --experiment-name om de naam van het experiment op te geven:

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

Informatie over invoer en uitvoer

Batch-eindpunten bieden een duurzame API die consumenten kunnen gebruiken om batchtaken te maken. Dezelfde interface kan worden gebruikt om de invoer en de uitvoer op te geven die uw implementatie verwacht. Gebruik invoer om informatie door te geven die uw eindpunt nodig heeft om de taak uit te voeren.

Diagram waarin wordt getoond hoe invoer en uitvoer worden gebruikt in batch-eindpunten.

Batch-eindpunten ondersteunen twee typen invoer:

  • Gegevensinvoer, die verwijst naar een specifieke opslaglocatie of Azure Machine Learning-asset.
  • Letterlijke invoer, die letterlijke waarden zijn (zoals getallen of tekenreeksen) die u aan de taak wilt doorgeven.

Het aantal en het type invoer en uitvoer zijn afhankelijk van het type batchimplementatie. Modelimplementaties vereisen altijd één gegevensinvoer en produceren één gegevensuitvoer. Letterlijke invoer wordt niet ondersteund. Implementaties van pijplijnonderdelen bieden echter een algemenere constructie voor het bouwen van eindpunten en bieden u de mogelijkheid om een willekeurig aantal invoer (gegevens en letterlijke waarden) en uitvoer op te geven.

De volgende tabel bevat een overzicht van de invoer en uitvoer voor batchimplementaties:

Implementatietype Het nummer van de invoer Ondersteunde invoertypen Het nummer van de uitvoer Ondersteunde typen uitvoer
Modelimplementatie 1 Gegevensinvoer 1 Gegevensuitvoer
Implementatie van pijplijnonderdelen [0..N] Gegevensinvoer en letterlijke invoer [0..N] Gegevensuitvoer

Tip

Invoer en uitvoer hebben altijd de naam. Deze namen fungeren als sleutels om ze te identificeren en de werkelijke waarde door te geven tijdens het aanroepen. Voor modelimplementaties, omdat ze altijd één invoer en uitvoer vereisen, wordt de naam tijdens het aanroepen genegeerd. U kunt de naam toewijzen die uw use case het beste beschrijft, zoals 'sales_estimation'.

Gegevensinvoer

Gegevensinvoer verwijst naar invoer die verwijst naar een locatie waar gegevens worden geplaatst. Omdat batcheindpunten meestal grote hoeveelheden gegevens verbruiken, kunt u de invoergegevens niet doorgeven als onderdeel van de aanroepaanvraag. In plaats daarvan geeft u de locatie op waar het batch-eindpunt naar de gegevens moet zoeken. Invoergegevens worden gekoppeld en gestreamd op de doel-rekenkracht om de prestaties te verbeteren.

Batch-eindpunten ondersteunen het lezen van bestanden in de volgende opslagopties:

  • Azure Machine Learning-gegevensassets, waaronder map (uri_folder) en bestand (uri_file).
  • Azure Machine Learning-gegevensarchieven, waaronder Azure Blob Storage, Azure Data Lake Storage Gen1 en Azure Data Lake Storage Gen2.
  • Azure Storage-accounts, waaronder Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 en Azure Blob Storage.
  • Lokale gegevensmappen/bestanden (Azure Machine Learning CLI of Azure Machine Learning SDK voor Python). Deze bewerking resulteert echter in het uploaden van de lokale gegevens naar de standaard Azure Machine Learning-gegevensopslag van de werkruimte waaraan u werkt.

Belangrijk

Afschaffingsmelding: Gegevenssets van het type FileDataset (V1) zijn afgeschaft en worden in de toekomst buiten gebruik gesteld. Bestaande batcheindpunten die afhankelijk zijn van deze functionaliteit blijven werken, maar batcheindpunten die zijn gemaakt met GA CLIv2 (2.4.0 en hoger) of GA REST API (2022-05-01 en hoger) bieden geen ondersteuning voor V1-gegevensset.

Letterlijke invoer

Letterlijke invoer verwijst naar invoer die kan worden weergegeven en omgezet tijdens aanroeptijd, zoals tekenreeksen, getallen en booleaanse waarden. Doorgaans gebruikt u letterlijke invoer om parameters door te geven aan uw eindpunt als onderdeel van een implementatie van een pijplijnonderdeel. Batch-eindpunten ondersteunen de volgende letterlijke typen:

  • string
  • boolean
  • float
  • integer

Letterlijke invoer wordt alleen ondersteund in implementaties van pijplijnonderdelen. Zie Taken maken met letterlijke invoer voor meer informatie over het opgeven van taken.

Gegevensuitvoer

Gegevensuitvoer verwijst naar de locatie waar de resultaten van een batchtaak moeten worden geplaatst. Uitvoer wordt geïdentificeerd op naam en Azure Machine Learning wijst automatisch een uniek pad toe aan elke benoemde uitvoer. U kunt echter desgewenst een ander pad opgeven.

Belangrijk

Batch-eindpunten ondersteunen alleen schrijfuitvoer in Azure Blob Storage-gegevensarchieven. Als u naar een opslagaccount moet schrijven waarvoor hiërarchische naamruimten zijn ingeschakeld (ook wel Bekend als Azure Datalake Gen2 of ADLS Gen2), ziet u dat een dergelijke opslagservice kan worden geregistreerd als een Azure Blob Storage-gegevensarchief omdat de services volledig compatibel zijn. Op deze manier kunt u uitvoer van batcheindpunten schrijven naar ADLS Gen2.

Taken maken met gegevensinvoer

In de volgende voorbeelden ziet u hoe u taken maakt, gegevensinvoer neemt van gegevensassets, gegevensarchieven en Azure Storage-accounts.

Invoergegevens van een gegevensasset

Azure Machine Learning-gegevensassets (voorheen gegevenssets genoemd) worden ondersteund als invoer voor taken. Volg deze stappen om een batch-eindpunttaak uit te voeren met behulp van gegevens die zijn opgeslagen in een geregistreerde gegevensasset in Azure Machine Learning:

Waarschuwing

Gegevensassets van het type Tabel (MLTable) worden momenteel niet ondersteund.

  1. Maak eerst de gegevensasset. Deze gegevensasset bestaat uit een map met meerdere CSV-bestanden die u parallel gaat verwerken met behulp van batch-eindpunten. U kunt deze stap overslaan als uw gegevens al zijn geregistreerd als gegevensasset.

    Een gegevensassetdefinitie maken in 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
    

    Maak vervolgens de gegevensasset:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Maak de invoer of aanvraag:

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

    Notitie

    De id van gegevensassets ziet er als /subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>volgt uit. U kunt de invoer ook gebruiken azureml:/<datasset_name>@latest als een manier om de invoer op te geven.

  3. Voer het eindpunt uit:

    Gebruik het --set argument om de invoer op te geven:

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

    Voor een eindpunt dat een modelimplementatie dient, kunt u het --input argument gebruiken om de gegevensinvoer op te geven, omdat voor een modelimplementatie altijd slechts één gegevensinvoer is vereist.

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

    Het argument --set produceert meestal lange opdrachten wanneer meerdere invoerwaarden worden opgegeven. In dergelijke gevallen plaatst u uw invoer in een YAML bestand en gebruikt --file u deze om de invoer op te geven die u nodig hebt voor de aanroep van het eindpunt.

    inputs.yml

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

Invoergegevens uit gegevensarchieven

Gegevens uit geregistreerde Azure Machine Learning-gegevensarchieven kunnen rechtstreeks worden verwezen door batchimplementatietaken. In dit voorbeeld uploadt u eerst enkele gegevens naar het standaardgegevensarchief in de Azure Machine Learning-werkruimte en voert u er vervolgens een batchimplementatie op uit. Volg deze stappen om een batch-eindpunttaak uit te voeren met behulp van gegevens die zijn opgeslagen in een gegevensarchief.

  1. Open het standaardgegevensarchief in de Azure Machine Learning-werkruimte. Als uw gegevens zich in een ander archief bevinden, kunt u die opslag gebruiken. U hoeft het standaardgegevensarchief niet te gebruiken.

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

    Notitie

    De id van gegevensarchieven ziet er als volgt /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>uit.

    Tip

    Het standaard-blobgegevensarchief in een werkruimte wordt workspaceblobstore genoemd. U kunt deze stap overslaan als u de resource-id van het standaardgegevensarchief in uw werkruimte al kent.

  2. U moet enkele voorbeeldgegevens uploaden naar het gegevensarchief. In dit voorbeeld wordt ervan uitgegaan dat u de voorbeeldgegevens die zijn opgenomen in de opslagplaats in de map in de map sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/dataheart-disease-uci-unlabeled in het blobopslagaccount al hebt geüpload. Zorg ervoor dat u dat hebt gedaan voordat u verdergaat.

  3. Maak de invoer of aanvraag:

    Plaats het bestandspad in de volgende variabele:

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

    Notitie

    Bekijk hoe het pad paths wordt toegevoegd aan de resource-id van het gegevensarchief om aan te geven dat wat er volgt een pad in het pad is.

    Tip

    U kunt de invoer ook gebruiken azureml://datastores/<data-store>/paths/<data-path> als een manier om de invoer op te geven.

  4. Voer het eindpunt uit:

    Gebruik het --set argument om de invoer op te geven:

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

    Voor een eindpunt dat een modelimplementatie dient, kunt u het --input argument gebruiken om de gegevensinvoer op te geven, omdat voor een modelimplementatie altijd slechts één gegevensinvoer is vereist.

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

    Het argument --set produceert meestal lange opdrachten wanneer meerdere invoerwaarden worden opgegeven. In dergelijke gevallen plaatst u uw invoer in een YAML bestand en gebruikt --file u deze om de invoer op te geven die u nodig hebt voor de aanroep van het eindpunt.

    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
    

    Als uw gegevens een bestand zijn, gebruikt uri_file u in plaats daarvan als type.

Invoergegevens van Azure Storage-accounts

Azure Machine Learning-batcheindpunten kunnen gegevens lezen uit cloudlocaties in Azure Storage-accounts, zowel openbaar als privé. Voer de volgende stappen uit om een batch-eindpunttaak uit te voeren met behulp van gegevens die zijn opgeslagen in een opslagaccount:

Notitie

Raadpleeg de sectie Rekenclusters configureren voor gegevenstoegang voor meer informatie over aanvullende configuratie die is vereist voor het lezen van gegevens uit opslagtoenames.

  1. Maak de invoer of aanvraag:

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

    Als uw gegevens een bestand zijn:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. Voer het eindpunt uit:

    Gebruik het --set argument om de invoer op te geven:

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

    Voor een eindpunt dat een modelimplementatie dient, kunt u het --input argument gebruiken om de gegevensinvoer op te geven, omdat voor een modelimplementatie altijd slechts één gegevensinvoer is vereist.

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

    Het argument --set produceert meestal lange opdrachten wanneer meerdere invoerwaarden worden opgegeven. In dergelijke gevallen plaatst u uw invoer in een YAML bestand en gebruikt --file u deze om de invoer op te geven die u nodig hebt voor de aanroep van het eindpunt.

    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
    

    Als uw gegevens een bestand zijn, gebruikt uri_file u in plaats daarvan als type.

Taken maken met letterlijke invoer

Implementaties van pijplijnonderdelen kunnen letterlijke invoer aannemen. In het volgende voorbeeld ziet u hoe u een invoer met de naam score_mode, van het type string, met de waarde :append

Plaats uw invoer in een YAML bestand en gebruik --file deze om de invoer op te geven die u nodig hebt voor de aanroep van het eindpunt.

inputs.yml

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

U kunt ook het argument --set gebruiken om de waarde op te geven. Het produceert echter vaak lange opdrachten wanneer meerdere invoerwaarden zijn opgegeven:

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

Taken maken met gegevensuitvoer

In het volgende voorbeeld ziet u hoe u de locatie wijzigt waar een uitvoer met de naam score wordt geplaatst. Voor volledigheid configureren deze voorbeelden ook een invoer met de naam heart_dataset.

  1. Gebruik het standaardgegevensarchief in de Azure Machine Learning-werkruimte om de uitvoer op te slaan. U kunt elk ander gegevensarchief in uw werkruimte gebruiken zolang het een blob-opslagaccount is.

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

    Notitie

    De id van gegevensarchieven ziet er als volgt /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>uit.

  2. Een gegevensuitvoer maken:

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

    Maak voor volledigheid ook een gegevensinvoer:

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

    Notitie

    Bekijk hoe het pad paths wordt toegevoegd aan de resource-id van het gegevensarchief om aan te geven dat wat er volgt een pad in het pad is.

  3. Voer de implementatie uit:

    Gebruik het argument --set om de invoer op te geven:

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

Volgende stappen