Taken en invoergegevens voor batcheindpunten maken
Wanneer u batch-eindpunten gebruikt in Azure Machine Learning, kunt u lange batchbewerkingen uitvoeren op grote hoeveelheden invoergegevens. De gegevens kunnen zich op verschillende plaatsen bevinden, zoals in verschillende regio's. Bepaalde typen batcheindpunten kunnen ook letterlijke parameters ontvangen als invoer.
In dit artikel wordt beschreven hoe u parameterinvoer voor batch-eindpunten opgeeft en implementatietaken maakt. Het proces ondersteunt het werken met gegevens uit verschillende bronnen, zoals gegevensassets, gegevensarchieven, opslagaccounts en lokale bestanden.
Vereisten
Een batch-eindpunt en -implementatie. Zie MLflow-modellen implementeren in batchimplementaties in Azure Machine Learning om deze resources te maken.
Machtigingen voor het uitvoeren van een batch-eindpuntimplementatie. U kunt de rollen AzureML Datawetenschapper, Inzender en Eigenaar gebruiken om een implementatie uit te voeren. Zie Autorisatie voor batcheindpunten om specifieke machtigingen te bekijken die vereist zijn voor aangepaste roldefinities.
Referenties voor het aanroepen van een eindpunt. Zie Verificatie tot stand brengen voor meer informatie.
Lees toegang tot de invoergegevens van het rekencluster waar het eindpunt is geïmplementeerd.
Tip
Voor bepaalde situaties is het gebruik van een gegevensarchief met minder referenties of een extern Azure Storage-account vereist als gegevensinvoer. In deze scenario's moet u rekenclusters configureren voor gegevenstoegang, omdat de beheerde identiteit van het rekencluster wordt gebruikt voor het koppelen van het opslagaccount. U hebt nog steeds gedetailleerd toegangsbeheer, omdat de identiteit van de taak (aanroeper) wordt gebruikt om de onderliggende gegevens te lezen.
Verificatie tot stand brengen
Als u een eindpunt wilt aanroepen, hebt u een geldig Microsoft Entra-token nodig. Wanneer u een eindpunt aanroept, maakt Azure Machine Learning een batchimplementatietaak onder de identiteit die is gekoppeld aan het token.
- Als u de Azure Machine Learning CLI (v2) of de Azure Machine Learning SDK voor Python (v2) gebruikt om eindpunten aan te roepen, hoeft u het Microsoft Entra-token niet handmatig op te halen. Tijdens het aanmelden verifieert het systeem uw gebruikersidentiteit. Ook wordt het token voor u opgehaald en doorgegeven.
- Als u de REST API gebruikt om eindpunten aan te roepen, moet u het token handmatig ophalen.
U kunt uw eigen referenties gebruiken voor de aanroep, zoals beschreven in de volgende procedures.
Gebruik de Azure CLI om u aan te melden met interactieve verificatie of apparaatcode:
az login
Zie Taken uitvoeren met verschillende typen referenties voor meer informatie over verschillende typen referenties.
Basistaken maken
Als u een taak wilt maken op basis van een batch-eindpunt, roept u het eindpunt aan. U kunt aanroepen doen met behulp van de Azure Machine Learning 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 Invoer en uitvoer begrijpen voor voorbeelden die betrekking hebben op verschillende invoer- en uitvoerwaarden.
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 volgende procedures gebruiken om de implementatie te wijzigen die u 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 bepaalde taakeigenschappen configureren tijdens het aanroepen.
Notitie
Momenteel kunt u taakeigenschappen alleen configureren in batch-eindpunten met pijplijnonderdeelimplementaties.
De naam van het experiment configureren
Gebruik de volgende procedures om de naam van uw experiment te 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
Inzicht in 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 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.
Batch-eindpunten ondersteunen twee typen invoer:
- Gegevensinvoer of pointers naar een specifieke opslaglocatie of Azure Machine Learning-asset
- Letterlijke invoer of letterlijke waarden, 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 in modelimplementaties. Implementaties van pijplijnonderdelen bieden daarentegen een algemenere constructie voor het bouwen van eindpunten. In een implementatie van een pijplijnonderdeel kunt u een willekeurig aantal gegevensinvoer, letterlijke invoer en uitvoer opgeven.
De volgende tabel bevat een overzicht van de invoer en uitvoer voor batchimplementaties:
Implementatietype | Aantal invoergegevens | Ondersteunde invoertypen | Aantal uitvoer | Ondersteunde uitvoertypen |
---|---|---|---|---|
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. Elke naam fungeert als sleutel voor het identificeren van de gegevens en het doorgeven van de waarde tijdens het aanroepen. Omdat modelimplementaties altijd één invoer en uitvoer vereisen, worden de namen genegeerd tijdens het aanroepen in modelimplementaties. U kunt de naam toewijzen die uw use case het beste beschrijft, zoals sales_estimation
.
Gegevensinvoer verkennen
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 het doelrekenexemplaren om de prestaties te verbeteren.
Batch-eindpunten kunnen bestanden lezen die zich in de volgende typen opslag bevinden:
-
Azure Machine Learning-gegevensassets, met inbegrip van de maptypen (
uri_folder
) en bestandstypenuri_file
. - Azure Machine Learning-gegevensarchieven, waaronder Azure Blob Storage, Azure Data Lake Storage Gen1 en Azure Data Lake Storage Gen2.
- Azure Storage-accounts, waaronder Blob Storage, Data Lake Storage Gen1 en Data Lake Storage Gen2.
- Lokale gegevensmappen en -bestanden wanneer u de Azure Machine Learning CLI of de Azure Machine Learning SDK voor Python gebruikt om eindpunten aan te roepen. Maar de lokale gegevens worden geüpload naar het standaardgegevensarchief van uw Azure Machine Learning-werkruimte.
Belangrijk
Afschaffingsmelding: Gegevensassets van het type FileDataset
(V1) worden afgeschaft en worden in de toekomst buiten gebruik gesteld. Bestaande batcheindpunten die afhankelijk zijn van deze functionaliteit, blijven werken. Er is echter geen ondersteuning voor V1-gegevenssets in batch-eindpunten die worden gemaakt met:
- Versies van de Azure Machine Learning CLI v2 die algemeen beschikbaar zijn (2.4.0 en hoger).
- Versies van de REST API die algemeen beschikbaar zijn (2022-05-01 en hoger).
Letterlijke invoer verkennen
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 om te zien hoe u letterlijke eindpunten opgeeft.
Gegevensuitvoer verkennen
Gegevensuitvoer verwijst naar de locatie waar de resultaten van een batchtaak worden geplaatst. Elke uitvoer heeft een identificeerbare naam en Azure Machine Learning wijst automatisch een uniek pad toe aan elke benoemde uitvoer. U kunt desgewenst een ander pad opgeven.
Belangrijk
Batch-eindpunten ondersteunen alleen schrijfuitvoer in Blob Storage-gegevensarchieven. Als u naar een opslagaccount wilt schrijven waarvoor hiërarchische naamruimten zijn ingeschakeld, zoals Data Lake Storage Gen2, kunt u de opslagservice registreren als een Blob Storage-gegevensarchief, omdat de services volledig compatibel zijn. Op deze manier kunt u uitvoer van batcheindpunten schrijven naar Data Lake Storage Gen2.
Taken maken met gegevensinvoer
In de volgende voorbeelden ziet u hoe u taken maakt terwijl u gegevensinvoer gebruikt van gegevensassets, gegevensarchieven en Azure Storage-accounts.
Invoergegevens van een gegevensasset gebruiken
Azure Machine Learning-gegevensassets (voorheen gegevenssets genoemd) worden ondersteund als invoer voor taken. Volg deze stappen om een batch-eindpunttaak uit te voeren die gebruikmaakt van invoergegevens die zijn opgeslagen in een geregistreerde gegevensasset in Azure Machine Learning.
Waarschuwing
Gegevensassets van het type tabel (MLTable
) worden momenteel niet ondersteund.
Maak de gegevensasset. In dit voorbeeld bestaat het uit een map die meerdere CSV-bestanden bevat. U gebruikt batch-eindpunten om de bestanden parallel te verwerken. U kunt deze stap overslaan als uw gegevens al zijn geregistreerd als gegevensasset.
Maak een definitie van een gegevensasset in een YAML-bestand met de naam heart-data.yml:
$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json name: heart-data description: An unlabeled data asset for heart classification. type: uri_folder path: data
Maak de gegevensasset:
az ml data create -f heart-data.yml
Stel de invoer in:
DATA_ASSET_ID=$(az ml data show -n heart-data --label latest | jq -r .id)
De id van de gegevensasset heeft de indeling
/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/data/<data-asset-name>/versions/<data-asset-version>
.Voer het eindpunt uit:
Gebruik het
--set
argument om de invoer op te geven. Vervang eerst eventuele afbreekstreepjes in de naam van de gegevensasset door onderstrepingstekens. Sleutels kunnen alleen alfanumerieke tekens en onderstrepingstekens bevatten.az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_data.type="uri_folder" inputs.heart_data.path=$DATA_ASSET_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 $DATA_ASSET_ID
Het argument
--set
produceert meestal lange opdrachten wanneer u meerdere invoerwaarden opgeeft. In dergelijke gevallen kunt u uw invoer in een bestand vermelden en vervolgens naar het bestand verwijzen wanneer u uw eindpunt aanroept. U kunt bijvoorbeeld een YAML-bestand maken met de naam inputs.yml met de volgende regels:inputs: heart_data: type: uri_folder path: /subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/data/heart-data/versions/1
Vervolgens kunt u de volgende opdracht uitvoeren, waarbij het
--file
argument wordt gebruikt om de invoer op te geven:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Invoergegevens uit een gegevensarchief gebruiken
Uw batchimplementatietaken kunnen rechtstreeks verwijzen naar gegevens in geregistreerde Azure Machine Learning-gegevensarchieven. In dit voorbeeld uploadt u eerst enkele gegevens naar een gegevensarchief in uw Azure Machine Learning-werkruimte. Vervolgens voert u een batchimplementatie uit op die gegevens.
In dit voorbeeld wordt het standaardgegevensarchief gebruikt, maar u kunt een ander gegevensarchief gebruiken. In elke Azure Machine Learning-werkruimte is de naam van het standaard-blobgegevensarchief workspaceblobstore. Als u in de volgende stappen een ander gegevensarchief wilt gebruiken, vervangt u deze door workspaceblobstore
de naam van uw voorkeursgegevensarchief.
Voorbeeldgegevens uploaden naar het gegevensarchief. De voorbeeldgegevens zijn beschikbaar in de opslagplaats azureml-examples . U vindt de gegevens in de sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/gegevensmap van die opslagplaats.
- Open in Azure Machine Learning-studio de pagina met gegevensassets voor uw standaard-blobgegevensarchief en zoek vervolgens de naam van de blobcontainer op.
- Gebruik een hulpprogramma zoals Azure Storage Explorer of AzCopy om de voorbeeldgegevens te uploaden naar een map met de naam heart-disease-uci-unlabeled in die container.
Stel de invoergegevens in:
Plaats het bestandspad in de
INPUT_PATH
variabele:DATA_PATH="heart-disease-uci-unlabeled" INPUT_PATH="azureml://datastores/workspaceblobstore/paths/$DATA_PATH"
U ziet hoe de
paths
map deel uitmaakt van het invoerpad. Deze indeling geeft aan dat de volgende waarde een pad is.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_data.type="uri_folder" inputs.heart_data.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 u meerdere invoerwaarden opgeeft. In dergelijke gevallen kunt u uw invoer in een bestand vermelden en vervolgens naar het bestand verwijzen wanneer u uw eindpunt aanroept. U kunt bijvoorbeeld een YAML-bestand maken met de naam inputs.yml met de volgende regels:inputs: heart_data: type: uri_folder path: azureml://datastores/workspaceblobstore/paths/<data-path>
Als uw gegevens zich in een bestand bevindt, gebruikt u in plaats daarvan het
uri_file
type voor de invoer.Vervolgens kunt u de volgende opdracht uitvoeren, waarbij het
--file
argument wordt gebruikt om de invoer op te geven:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Invoergegevens van een Azure Storage-account gebruiken
Azure Machine Learning-batcheindpunten kunnen gegevens lezen uit cloudlocaties in Azure Storage-accounts, zowel openbaar als privé. Gebruik de volgende stappen om een batch-eindpunttaak uit te voeren met gegevens in een opslagaccount.
Zie Rekenclusters configureren voor gegevenstoegang voor meer informatie over extra vereiste configuraties voor het lezen van gegevens uit opslagaccounts.
Stel de invoer in:
Stel de
INPUT_DATA
variabele in:INPUT_DATA="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
Als uw gegevens zich in een bestand bevinden, gebruikt u een indeling die vergelijkbaar is met de volgende indeling om het invoerpad te definiëren:
INPUT_DATA="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
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_data.type="uri_folder" inputs.heart_data.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
--set
argument produceert meestal lange opdrachten wanneer u meerdere invoerwaarden opgeeft. In dergelijke gevallen kunt u uw invoer in een bestand vermelden en vervolgens naar het bestand verwijzen wanneer u uw eindpunt aanroept. U kunt bijvoorbeeld een YAML-bestand maken met de naam inputs.yml met de volgende regels:inputs: heart_data: type: uri_folder path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Vervolgens kunt u de volgende opdracht uitvoeren, waarbij het
--file
argument wordt gebruikt om de invoer op te geven:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Als uw gegevens zich in een bestand bevindt, gebruikt u het
uri_file
type in het inputs.yml-bestand voor de gegevensinvoer.
Taken maken met letterlijke invoer
Implementaties van pijplijnonderdelen kunnen letterlijke invoer aannemen. Zie Pijplijnen met batcheindpunten implementeren voor een voorbeeld van een batchimplementatie die een basispijplijn bevat.
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, zoals een bestand met de naam inputs.yml:
inputs:
score_mode:
type: string
default: append
Voer de volgende opdracht uit, waarbij het --file
argument wordt gebruikt om de invoer op te geven.
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
U kunt ook het --set
argument gebruiken om het type en de standaardwaarde op te geven. Maar deze benadering produceert meestal lange opdrachten wanneer u meerdere invoergegevens opgeeft:
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 van een uitvoer met de naam score
wijzigt. Voor volledigheid configureert het voorbeeld ook een invoer met de naam heart_data
.
In dit voorbeeld wordt gebruikgemaakt van het standaardgegevensarchief, workspaceblobstore. U kunt echter elk ander gegevensarchief in uw werkruimte gebruiken zolang het een Blob Storage-account is. Als u een ander gegevensarchief wilt gebruiken, vervangt workspaceblobstore
u de volgende stappen door de naam van uw voorkeursgegevensarchief.
Haal de id van het gegevensarchief op.
DATA_STORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
De id van het gegevensarchief heeft de indeling
/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/datastores/workspaceblobstore
.Een gegevensuitvoer maken:
Definieer de invoer- en uitvoerwaarden in een bestand met de naam inputs-and-outputs.yml. Gebruik de id van het gegevensarchief in het uitvoerpad. Definieer voor volledigheid ook de gegevensinvoer.
inputs: heart_data: type: uri_folder path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data outputs: score: type: uri_file path: <data-store-ID>/paths/batch-jobs/my-unique-path
Notitie
U ziet hoe de
paths
map deel uitmaakt van het uitvoerpad. Deze indeling geeft aan dat de volgende waarde een pad is.Voer de implementatie uit:
Gebruik het
--file
argument om de invoer- en uitvoerwaarden op te geven:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs-and-outputs.yml