DOTYCZY:
Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)
Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)
Usługa Azure Machine Learning oferuje wiele sposobów przesyłania zadań trenowania uczenia maszynowego. Z tego artykułu dowiesz się, jak przesyłać zadania przy użyciu następujących metod:
- Rozszerzenie interfejsu wiersza polecenia platformy Azure do uczenia maszynowego:
ml rozszerzenie nazywane również interfejsem wiersza polecenia w wersji 2.
- Zestaw PYTHON SDK w wersji 2 dla usługi Azure Machine Learning.
- Interfejs API REST: interfejs API, na który jest oparty interfejs wiersza polecenia i zestaw SDK.
Wymagania wstępne
Aby korzystać z informacji o interfejsie API REST, potrzebne są następujące elementy:
Jednostka usługi w obszarze roboczym. Użyj uwierzytelniania jednostki usługi dla administracyjnych żądań REST.
Token uwierzytelniania jednostki usługi. Wykonaj kroki opisane w temacie Pobieranie tokenu uwierzytelniania jednostki usługi , aby uzyskać ten token.
Narzędzie curl . Program curl jest dostępny w Podsystem Windows dla systemu Linux lub dowolnej dystrybucji systemu UNIX.
Napiwek
W programie PowerShell curl jest aliasem dla programu Invoke-WebRequest. Polecenie curl -d "key=val" -X POST uri staje się Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Chociaż istnieje możliwość wywołania interfejsu API REST za pomocą programu PowerShell, przykłady w tym artykule zakładają, że używasz Bash.
Narzędzie jq do przetwarzania kodu JSON. Użyj tego narzędzia, aby wyodrębnić wartości z dokumentów JSON wywoływanych przez interfejs API REST.
Klonowanie repozytorium przykładów
Fragmenty kodu w tym artykule są oparte na przykładach w repozytorium GitHub przykładów usługi Azure Machine Learning. Aby sklonować repozytorium do środowiska deweloperskiego, użyj następującego polecenia:
git clone --depth 1 https://github.com/Azure/azureml-examples
Napiwek
Użyj --depth 1, aby sklonować tylko najnowszy commit do repozytorium, co skraca czas na ukończenie operacji.
Przykładowe zadanie
W przykładach w tym artykule użyto zestawu danych irysów kwiat do wytrenowania modelu MLFlow.
Szkolenie w chmurze
Podczas trenowania w chmurze musisz nawiązać połączenie z obszarem roboczym usługi Azure Machine Learning i wybrać zasób obliczeniowy, aby uruchomić zadanie trenowania.
1. Nawiązywanie połączenia z obszarem roboczym
Napiwek
Użyj poniższych kart, aby wybrać metodę, której chcesz użyć do wytrenowania modelu. Wybranie karty powoduje automatyczne przełączenie wszystkich kart w tym artykule na tę samą kartę. W dowolnym momencie możesz wybrać inną kartę.
Aby nawiązać połączenie z obszarem roboczym, potrzebujesz parametrów identyfikatora — subskrypcji, grupy zasobów i nazwy obszaru roboczego. Użyj tych szczegółów z MLClient przestrzeni nazw azure.ai.ml, aby uzyskać dostęp do wymaganego obszaru roboczego usługi Azure Machine Learning. Aby przeprowadzić uwierzytelnianie, użyj domyślnego uwierzytelniania platformy Azure. Aby uzyskać więcej informacji na temat konfigurowania poświadczeń i nawiązywania połączenia z obszarem roboczym, zobacz ten przykład.
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'
#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
W przypadku korzystania z interfejsu wiersza polecenia platformy Azure potrzebne są parametry identyfikatora — subskrypcja, grupa zasobów i nazwa obszaru roboczego. Chociaż można określić te parametry dla każdego polecenia, można również ustawić wartości domyślne, których używają wszystkie polecenia. Użyj następujących poleceń, aby ustawić wartości domyślne. Zastąp <subscription ID>wartości , <Azure Machine Learning workspace name>i <resource group> wartościami konfiguracji:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Przykłady interfejsu API REST w tym artykule używają $SUBSCRIPTION_IDsymboli zastępczych , $RESOURCE_GROUP, $LOCATIONi $WORKSPACE . Zastąp symbole zastępcze własnymi wartościami w następujący sposób:
-
$SUBSCRIPTION_ID: Identyfikator subskrypcji platformy Azure.
-
$RESOURCE_GROUP: grupa zasobów platformy Azure zawierająca obszar roboczy.
-
$LOCATION: region świadczenia usługi Azure, w którym znajduje się obszar roboczy.
-
$WORKSPACE: nazwa obszaru roboczego usługi Azure Machine Learning.
-
$COMPUTE_NAME: nazwa klastra obliczeniowego usługi Azure Machine Learning.
Administracja REST żąda tokenu uwierzytelniania jednostki usługi. Token można pobrać za pomocą następującego polecenia. Token jest przechowywany w zmiennej środowiskowej $TOKEN :
TOKEN=$(az account get-access-token --query accessToken -o tsv)
Dostawca usług używa argumentu api-version w celu zapewnienia zgodności. Argument api-version różni się od usługi do usługi. Ustaw wersję interfejsu API jako zmienną, aby uwzględnić przyszłe wersje:
API_VERSION="2022-05-01"
Podczas trenowania za pomocą interfejsu API REST musisz przesłać dane i skrypty szkoleniowe do konta magazynowego, do którego dostęp ma obszar roboczy. Poniższy przykład pobiera informacje o magazynie dla twojego obszaru roboczego i zapisuje je w zmiennych, aby można było je wykorzystać później.
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
2. Tworzenie zasobu obliczeniowego na potrzeby trenowania
Klaster obliczeniowy usługi Azure Machine Learning to w pełni zarządzany zasób obliczeniowy, którego można użyć do uruchomienia zadania trenowania. W poniższych przykładach utworzysz klaster obliczeniowy o nazwie cpu-cluster.
from azure.ai.ml.entities import AmlCompute
# specify aml compute name.
cpu_compute_target = "cpu-cluster"
try:
ml_client.compute.get(cpu_compute_target)
except Exception:
print("Creating a new cpu compute target...")
compute = AmlCompute(
name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
)
ml_client.compute.begin_create_or_update(compute).result()
az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 4
curl -X PUT \
"https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME?api-version=$API_VERSION" \
-H "Authorization:Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location": "'$LOCATION'",
"properties": {
"computeType": "AmlCompute",
"properties": {
"vmSize": "Standard_D2_V2",
"vmPriority": "Dedicated",
"scaleSettings": {
"maxNodeCount": 4,
"minNodeCount": 0,
"nodeIdleTimeBeforeScaleDown": "PT30M"
}
}
}
}'
Napiwek
Chociaż operacja zwraca odpowiedź po kilku sekundach, ta odpowiedź wskazuje tylko, że żądanie utworzenia jest akceptowane. Ukończenie tworzenia klastra może potrwać kilka minut.
3. Prześlij zadanie szkoleniowe
Aby uruchomić ten skrypt, użyj skryptu command , który wykonuje skrypt main.py Python znajdujący się w obszarze ./sdk/python/jobs/single-step/lightgbm/iris/src/. Polecenie należy przesłać jako element job do usługi Azure Machine Learning.
from azure.ai.ml import command, Input
# define the command
command_job = command(
code="./src",
command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
inputs={
"iris_csv": Input(
type="uri_file",
path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
),
"learning_rate": 0.9,
"boosting": "gbdt",
},
compute="cpu-cluster",
)
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url
W poprzednich przykładach skonfigurowano:
-
code — ścieżka, w której znajduje się kod do uruchomienia polecenia.
-
command - polecenie, które musi zostać uruchomione.
-
environment — środowisko potrzebne do uruchomienia skryptu szkoleniowego. W tym przykładzie użyj nadzorowanego lub gotowego środowiska dostarczonego przez usługę Azure Machine Learning o nazwie AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Aby użyć najnowszej wersji tego środowiska, skorzystaj z dyrektywy @latest. Możesz również użyć środowisk niestandardowych, określając podstawowy obraz platformy Docker i określając na nim plik yaml conda.
-
inputs - słownik danych wejściowych używających par wartości nazw do polecenia . Klucz jest nazwą danych wejściowych w kontekście zadania, a wartość jest wartością wejściową. Odniesienie do danych wejściowych w command przy użyciu wyrażenia ${{inputs.<input_name>}}. Aby użyć plików lub folderów jako danych wejściowych, użyj Input klasy . Aby uzyskać więcej informacji, zobacz Zestaw SDK i wyrażenia interfejsu wiersza polecenia w wersji 2.
Aby uzyskać więcej informacji, zobacz dokumentację referencyjną.
Po przesłaniu zadania usługa zwraca adres URL do stanu zadania w usłudze Azure Machine Learning Studio. Użyj interfejsu użytkownika programu Studio, aby wyświetlić postęp zadania. Możesz również użyć returned_job.status polecenia , aby sprawdzić bieżący stan zadania.
Polecenie az ml job create w tym przykładzie wymaga pliku definicji zadania YAML. Plik używany w tym przykładzie zawiera następującą zawartość:
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
python main.py
--iris-csv ${{inputs.iris_csv}}
inputs:
iris_csv:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
environment: azureml:AzureML-lightgbm-3.3@latest
compute: azureml:cpu-cluster
display_name: lightgbm-iris-example
experiment_name: lightgbm-iris-example
description: Train a LightGBM model on the Iris dataset.
W powyższym pliku YAML, skonfigurowałeś:
-
code — ścieżka, w której znajduje się kod do uruchomienia polecenia.
-
command - polecenie, które należy uruchomić.
-
inputs - słownik danych wejściowych używających par wartości nazw do polecenia . Klucz jest nazwą danych wejściowych w kontekście zadania, a wartość jest wartością wejściową. Dane wejściowe są przywoływane w elemencie command przy użyciu wyrażenia ${{inputs.<input_name>}}. Aby uzyskać więcej informacji, zobacz Zestaw SDK i wyrażenia interfejsu wiersza polecenia w wersji 2.
-
environment — środowisko potrzebne do uruchomienia skryptu szkoleniowego. W tym przykładzie użyj nadzorowanego lub gotowego środowiska dostarczonego przez usługę Azure Machine Learning o nazwie AzureML-lightgbm-3.3. Użyj najnowszej wersji tego środowiska, korzystając z dyrektywy @latest. Możesz również użyć środowisk niestandardowych, określając podstawowy obraz platformy Docker i określając na nim plik yaml conda.
Aby przesłać zadanie, użyj następującego polecenia. Identyfikator przebiegu (nazwa) zadania trenowania jest przechowywany w zmiennej $run_id :
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Użyj przechowywanego identyfikatora uruchomienia, aby zwrócić informacje o zadaniu. Parametr --web otwiera internetowy interfejs użytkownika usługi Azure Machine Learning Studio, w którym można przejść do szczegółów zadania:
az ml job show -n $run_id --web
Po przesłaniu zadania należy przekazać skrypty szkoleniowe i dane do lokalizacji przechowywania w chmurze, do której ma dostęp workspace usługi Azure Machine Learning.
Użyj następującego polecenia interfejsu wiersza polecenia platformy Azure, aby przekazać skrypt szkoleniowy. Polecenie określa katalog zawierający pliki wymagane do trenowania, a nie pojedynczy plik. Jeśli zamiast tego chcesz użyć interfejsu REST do przekazania danych, zapoznaj się z dokumentacją Put Blob :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Utwórz odwołanie do wersji danych szkoleniowych. W tym przykładzie dane znajdują się już w chmurze i znajdują się w https://azuremlexamples.blob.core.windows.net/datasets/iris.csvlokalizacji . Aby uzyskać więcej informacji na temat odwoływania się do danych, zobacz Dane w usłudze Azure Machine Learning:
DATA_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/data/iris-data/versions/$DATA_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"description\": \"Iris dataset\",
\"dataType\": \"uri_file\",
\"dataUri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
}
}"
Zarejestruj w wersji odwołanie do skryptu szkoleniowego do użycia z zadaniem. W tym przykładzie lokalizacja skryptu jest domyślnym kontem magazynu i kontenerem przekazanym w kroku 1. Identyfikator wersji kodu szkoleniowego jest zwracany i przechowywany w zmiennej $TRAIN_CODE :
TRAIN_CODE=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/train-lightgbm/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"description\": \"Train code\",
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/testjob\"
}
}" | jq -r '.id')
Utwórz środowisko używane przez klaster do uruchomienia skryptu trenowania. W tym przykładzie użyj nadzorowanego lub gotowego środowiska dostarczonego przez usługę Azure Machine Learning o nazwie AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Następujące polecenie pobiera listę wersji środowiska, a najnowsze znajdują się w górnej części kolekcji.
jq Służy do pobierania identyfikatora najnowszej wersji ([0]), która jest następnie przechowywana w zmiennej $ENVIRONMENT .
ENVIRONMENT=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu?api-version=$API_VERSION" --header "Authorization: Bearer $TOKEN" | jq -r .id)
Na koniec prześlij zadanie. W poniższym przykładzie pokazano, jak przesłać zadanie, odwołać się do identyfikatora kodu trenowania, identyfikatora środowiska, adresu URL danych wejściowych i identyfikatora klastra obliczeniowego. Lokalizacja wyjściowa zadania jest przechowywana w zmiennej $JOB_OUTPUT :
Napiwek
Nazwa zadania musi być unikatowa. W tym przykładzie uuidgen jest używany do generowania unikatowej wartości nazwy.
run_id=$(uuidgen)
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/jobs/$run_id?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"jobType\": \"Command\",
\"codeId\": \"$TRAIN_CODE\",
\"command\": \"python main.py --iris-csv \$AZURE_ML_INPUT_iris\",
\"environmentId\": \"$ENVIRONMENT\",
\"inputs\": {
\"iris\": {
\"jobInputType\": \"uri_file\",
\"uri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
}
},
\"experimentName\": \"lightgbm-iris\",
\"computeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME\"
}
}"
Rejestrowanie wytrenowanego modelu
W poniższych przykładach pokazano, jak zarejestrować model w obszarze roboczym usługi Azure Machine Learning.
Napiwek
Proces trenowania zwraca właściwość name. Użyj nazwy tej jako części ścieżki prowadzącej do modelu.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=AssetTypes.MLFLOW_MODEL
)
ml_client.models.create_or_update(run_model)
Napiwek
Użyj nazwy przechowywanej w zmiennej $run_id w ramach ścieżki do modelu.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Napiwek
Użyj nazwy przechowywanej w zmiennej $run_id w ramach ścieżki do modelu.
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelType\": \"mlflow_model\",
\"modelUri\":\"runs:/$run_id/model\"
}
}"
Następne kroki
Teraz, gdy masz wytrenowany model, dowiedz się , jak wdrożyć go przy użyciu punktu końcowego online.
Aby uzyskać więcej przykładów, zobacz repozytorium GitHub przykłady usługi Azure Machine Learning.
Aby uzyskać więcej informacji na temat poleceń interfejsu wiersza polecenia platformy Azure, klas zestawu SDK języka Python lub interfejsów API REST używanych w tym artykule, zobacz następującą dokumentację referencyjną: