Usługa Azure Machine Learning oferuje wiele sposobów przesyłania zadań trenowania uczenia maszynowego. W tym artykule 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
Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning.
W programie PowerShell curl jest aliasem dla Invoke-WebRequest elementu i 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 z poziomu programu PowerShell, przykłady w tym artykule zakładają, że używasz powłoki Bash.
Narzędzie jq do przetwarzania kodu JSON. To narzędzie służy do wyodrębniania wartości z dokumentów JSON zwracanych z wywołań interfejsu 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:
Użyj --depth 1 polecenia , aby sklonować tylko najnowsze zatwierdzenie 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, który będzie używany do uruchamiania zadania szkoleniowego.
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 spowoduje 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. Te szczegóły będą używane w przestrzeni nazw, MLClientazure.ai.ml aby uzyskać dojście do wymaganego obszaru roboczego usługi Azure Machine Learning. Do uwierzytelniania należy użyć domyślnego uwierzytelniania platformy Azure. Zapoznaj się z tym przykładem , aby uzyskać więcej informacji na temat konfigurowania poświadczeń i nawiązywania połączenia z obszarem roboczym.
#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óre będą używane dla wszystkich poleceń. 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:
$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 :
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 przy użyciu interfejsu API REST skrypty danych i trenowania muszą być przekazywane do konta magazynu, do którego można uzyskać dostęp do obszaru roboczego. Poniższy przykład pobiera informacje o magazynie dla obszaru roboczego i zapisuje je w zmiennych, abyśmy mogli ich użyć później:
Klaster obliczeniowy usługi Azure Machine Learning to w pełni zarządzany zasób obliczeniowy, który może służyć do uruchamiania zadania trenowania. W poniższych przykładach tworzony jest klaster obliczeniowy o nazwie cpu-compute .
Chociaż odpowiedź jest zwracana po kilku sekundach, oznacza to tylko, że żądanie utworzenia zostało zaakceptowane. Ukończenie tworzenia klastra może potrwać kilka minut.
Aby uruchomić ten skrypt, użyjesz skryptu wykonującego command main.py skryptu języka Python znajdującego się w folderze ./sdk/python/jobs/single-step/lightgbm/iris/src/. Polecenie zostanie uruchomione przez przesłanie go jako elementu job do usługi Azure Machine Learning.
# 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 powyższych przykładach skonfigurowano:
code — ścieżka, w której znajduje się kod do uruchomienia polecenia
command - polecenie, które należy uruchomić
environment — środowisko potrzebne do uruchomienia skryptu szkoleniowego. W tym przykładzie używamy nadzorowanego lub gotowego środowiska udostępnionego przez usługę Azure Machine Learning o nazwie AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Używamy najnowszej wersji tego środowiska przy użyciu @latest dyrektywy . 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ą. Dane wejściowe są przywoływane przy command użyciu ${{inputs.<input_name>}} wyrażenia . Aby użyć plików lub folderów jako danych wejściowych, możesz użyć 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 adres URL jest zwracany 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 użyte w tym przykładzie wymaga pliku definicji zadania YAML. Zawartość pliku użytego w tym przykładzie to:
$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ższych konfiguracjach:
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 przy command użyciu ${{inputs.<input_name>}} wyrażenia . 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żywamy nadzorowanego lub gotowego środowiska udostępnionego przez usługę Azure Machine Learning o nazwie AzureML-lightgbm-3.3. Używamy najnowszej wersji tego środowiska przy użyciu @latest dyrektywy . 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)
Możesz użyć przechowywanego identyfikatora przebiegu, 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
W ramach przesyłania zadania skrypty szkoleniowe i dane muszą zostać przekazane do lokalizacji magazynu w chmurze, do którego może uzyskiwać dostęp obszar roboczy 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:
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 :
Utwórz środowisko, za pomocą którego klaster będzie uruchamiał skrypt trenowania. W tym przykładzie używamy nadzorowanego lub gotowego środowiska udostępnionego 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 .
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 będzie 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.
Właściwość name zwrócona przez zadanie trenowania jest używana jako część ścieżki 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
Nazwa (przechowywana w zmiennej $run_id ) jest używana jako część ścieżki do modelu.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Napiwek
Nazwa (przechowywana w zmiennej $run_id ) jest używana jako część ścieżki do modelu.
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ą: