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.
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.
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
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ändaazureml:/<datasset_name>@latest
som ett sätt att ange indata.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 enYAML
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.
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.
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 mappenheart-disease-uci-unlabeled
i bloblagringskontot. Se till att du har gjort det innan du går vidare.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.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 enYAML
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.
Skapa indata eller begäran:
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 enYAML
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
.
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.
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.Kör distributionen: