Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY:
Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)
W tym artykule przedstawiono sposób wdrażania modelu MLflow w punkcie końcowym online na potrzeby wnioskowania w czasie rzeczywistym. Podczas wdrażania modelu MLflow w punkcie końcowym online nie trzeba określać skryptu oceniania ani środowiska — ta funkcja jest znana jako wdrożenie bez kodu.
W przypadku wdrożenia bez kodu usługa Azure Machine Learning:
- Dynamicznie instaluje pakiety języka Python, które wymieniasz w pliku conda.yaml. W związku z tym zależności są instalowane podczas wykonywania kontenera.
- Udostępnia obraz podstawowy MLflow lub wyselekcjonowane środowisko zawierające następujące elementy:
- Pakiet
azureml-inference-server-http - Pakiet
mlflow-skinny - Skrypt oceniania na potrzeby wnioskowania
- Pakiet
Prerequisites
Subskrypcja platformy Azure. Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz darmowe konto.
Konto użytkownika, które ma co najmniej jedną z następujących ról kontroli dostępu na podstawie ról (RBAC) platformy Azure:
- Rola właściciela obszaru roboczego usługi Azure Machine Learning
- Rola Współautor dla obszaru roboczego usługi Azure Machine Learning
- Rola niestandardowa, która ma
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*uprawnienia
Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszarów roboczych usługi Azure Machine Learning.
Dostęp do usługi Azure Machine Learning:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Zainstaluj interfejs wiersza polecenia platformy Azure i
mlrozszerzenie do interfejsu wiersza polecenia platformy Azure. Aby uzyskać instrukcje instalacji, zobacz Instalowanie i konfigurowanie interfejsu wiersza polecenia (wersja 2).
Informacje o przykładzie
W przykładzie w tym artykule pokazano, jak wdrożyć model MLflow w punkcie końcowym online w celu wykonania przewidywań. W przykładzie użyto modelu MLflow opartego na zestawie danych Diabetes. Ten zestaw danych zawiera 10 zmiennych bazowych: wiek, płeć, wskaźnik masy ciała, średnie ciśnienie krwi i 6 pomiarów krwi uzyskanych od 442 pacjentów z cukrzycą. Zawiera również odpowiedź na zainteresowanie, ilościową miarę progresji choroby jeden rok po dacie danych odniesienia.
Model został wytrenowany przy użyciu scikit-learn regresora. Wszystkie wymagane kroki wstępnego przetwarzania są pakowane jako potok, więc ten model jest kompleksowym potokiem, przechodząc od nieprzetworzonych danych do przewidywań.
Informacje przedstawione w tym artykule są oparte na przykładach kodu z repozytorium azureml-examples . Jeśli sklonujesz repozytorium, możesz uruchomić polecenia w tym artykule lokalnie bez konieczności kopiowania lub wklejania plików YAML i innych plików. Użyj następujących poleceń, aby sklonować repozytorium i przejść do folderu dla języka kodowania:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Śledź w Jupyter Notebook.
Aby wykonać kroki opisane w tym artykule, zobacz notatnik Wdrażanie modelu MLflow do punktów końcowych online w repozytorium przykładów.
Połącz się z Twoim obszarem roboczym
Połącz się z obszarem roboczym usługi Azure Machine Learning:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
az account set --subscription <subscription-ID>
az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location>
Rejestrowanie modelu
Zarejestrowane modele można wdrażać tylko w punktach końcowych online. W krokach opisanych w tym artykule użyto modelu, który został wytrenowany dla zestawu danych Diabetes. W takim przypadku masz już lokalną kopię modelu w sklonowanym repozytorium, więc wystarczy opublikować model w rejestrze w obszarze roboczym. Ten krok można pominąć, jeśli model, który chcesz wdrożyć, jest już zarejestrowany.
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
MODEL_NAME='sklearn-diabetes'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "endpoints/online/ncd/sklearn-diabetes/model"
Co zrobić, jeśli model został zarejestrowany w trakcie przebiegu?
Jeśli model został zapisany wewnątrz sesji, możesz zarejestrować go bezpośrednio.
Aby zarejestrować model, musisz znać jego lokalizację przechowywania:
- Jeśli używasz funkcji MLflow
autolog, ścieżka do modelu zależy od typu modelu i struktury. Sprawdź dane wyjściowe zadania, aby zidentyfikować nazwę folderu modelu. Ten folder zawiera plik o nazwie MLModel. - Jeśli używasz metody
log_modeldo ręcznego rejestrowania modeli, należy przekazać ścieżkę do modelu jako argument tej metody. Na przykład, jeśli używaszmlflow.sklearn.log_model(my_model, "classifier")do rejestrowania modelu,classifierto ścieżka, na której przechowuje się model.
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Interfejs wiersza polecenia (CLI) usługi Azure Machine Learning w wersji 2 pozwala utworzyć model z wyników zadania treningowego. Poniższy kod używa artefaktów zadania o identyfikatorze $RUN_ID w celu zarejestrowania modelu o nazwie $MODEL_NAME.
$MODEL_PATH to ścieżka używana przez zadanie do przechowywania modelu.
az ml model create --name $MODEL_NAME --path azureml://jobs/$RUN_ID/outputs/artifacts/$MODEL_PATH
Wdrażanie modelu MLflow do punktu końcowego online
Użyj następującego kodu, aby skonfigurować nazwę i tryb uwierzytelniania punktu końcowego, w którym chcesz wdrożyć model:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Ustaw nazwę punktu końcowego, uruchamiając następujące polecenie. Najpierw zastąp
YOUR_ENDPOINT_NAMEunikatową nazwą.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Aby skonfigurować punkt końcowy, utwórz plik YAML o nazwie create-endpoint.yaml zawierający następujące wiersze:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: keyUtwórz punkt końcowy:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yamlSkonfiguruj wdrożenie. Wdrożenie to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie.
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Utwórz plik YAML o nazwie sklearn-deployment.yaml zawierający następujące wiersze:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: sklearn-deployment endpoint_name: my-endpoint model: name: mir-sample-sklearn-ncd-model version: 2 path: sklearn-diabetes/model type: mlflow_model instance_type: Standard_DS3_v2 instance_count: 1Note
Automatyczne generowanie elementów
scoring_scriptienvironmentjest obsługiwane tylko dla odmianyPyFuncmodelu. Aby użyć innego wariantu modelu, zobacz Dostosowywanie wdrożeń modelu MLflow.Utwórz wdrożenie:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
az ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficaz ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficPrzypisz cały ruch sieciowy do wdrożenia. Do tej pory punkt końcowy ma jedno wdrożenie, ale żaden z jego ruchu nie jest przypisany do niego.
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Ten krok nie jest wymagany w interfejsie wiersza polecenia platformy Azure, jeśli używasz flagi
--all-trafficpodczas tworzenia. Jeśli musisz zmienić ruch, możesz użyćaz ml online-endpoint update --trafficpolecenia . Aby uzyskać więcej informacji na temat aktualizowania ruchu, zobacz Postępowe aktualizowanie ruchu.Zaktualizuj konfigurację punktu końcowego:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Ten krok nie jest wymagany w interfejsie wiersza polecenia platformy Azure, jeśli używasz flagi
--all-trafficpodczas tworzenia. Jeśli musisz zmienić ruch, możesz użyćaz ml online-endpoint update --trafficpolecenia . Aby uzyskać więcej informacji na temat aktualizowania ruchu, zobacz Postępowe aktualizowanie ruchu.
Wywołaj punkt końcowy
Gdy wdrożenie jest gotowe, możesz użyć go do obsługi żądań. Jednym ze sposobów testowania wdrożenia jest użycie wbudowanej funkcji wywołania w kliencie wdrażania. W repozytorium przykładów plik sample-request-sklearn.json zawiera następujący kod JSON. Można go użyć jako przykładowego pliku żądania dla wdrożenia.
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Note
Ten plik używa input_data klucza zamiast inputs, którego używa usługa MLflow. Usługa Azure Machine Learning wymaga innego formatu danych wejściowych, aby umożliwić automatyczne generowanie kontraktów struktury Swagger dla punktów końcowych. Aby uzyskać więcej informacji na temat oczekiwanych formatów wejściowych, zobacz Wdrażanie we wbudowanym serwerze MLflow a wdrożeniem na serwerze wnioskowania usługi Azure Machine Learning.
Prześlij żądanie do punktu końcowego:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
Odpowiedź powinna być podobna do następującego tekstu:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
[
11633.100167144921,
8522.117402884991
]
Important
W przypadku wdrożenia bez kodu platformy MLflow testowanie za pośrednictwem lokalnych punktów końcowych nie jest obecnie obsługiwane.
Dostosowywanie wdrożeń modelu MLflow
Nie musisz określać skryptu oceny w definicji procesu wdrożenia modelu MLflow do punktu końcowego online. Można jednak określić skrypt oceniania, jeśli chcesz dostosować proces wnioskowania.
Zazwyczaj chcesz dostosować wdrożenie modelu MLflow w następujących przypadkach:
- Model nie ma
PyFuncsmaku. - Musisz dostosować sposób uruchamiania modelu. Na przykład należy użyć
mlflow.<flavor>.load_model(), aby załadować model z określonym wariantem. - Należy wykonać wstępne przetwarzanie lub przetwarzanie końcowe w procedurze oceniania, ponieważ model nie wykonuje tego przetwarzania.
- Dane wyjściowe modelu nie mogą być ładnie reprezentowane w danych tabelarycznych. Na przykład dane wyjściowe to tensor reprezentujący obraz.
Important
Jeśli określisz skrypt oceniania dla wdrożenia modelu MLflow, musisz również określić środowisko, w którym działa wdrożenie.
Wdrażanie niestandardowego skryptu oceniania
Aby wdrożyć model MLflow, który używa niestandardowego skryptu oceniania, wykonaj kroki opisane w poniższych sekcjach.
Identyfikowanie folderu modelu
Zidentyfikuj folder zawierający model MLflow, wykonując następujące czynności:
Przejdź do usługi Azure Machine Learning Studio.
Przejdź do sekcji Modele .
Wybierz model, który chcesz wdrożyć, i przejdź do karty Artefakty .
Zanotuj wyświetlony folder. Podczas rejestrowania modelu należy określić ten folder.
Tworzenie skryptu oceniania
Poniższy skrypt oceniania, score.py, zawiera przykład sposobu wnioskowania z modelem MLflow. Ten skrypt można dostosować do swoich potrzeb lub zmienić dowolny z jego części, aby odzwierciedlał twój scenariusz. Zwróć uwagę, że nazwa folderu, który został wcześniej zidentyfikowany, modeljest uwzględniona w init() funkcji .
import logging
import os
import json
import mlflow
from io import StringIO
from mlflow.pyfunc.scoring_server import infer_and_parse_json_input, predictions_to_json
def init():
global model
global input_schema
# "model" is the path of the mlflow artifacts when the model was registered. For automl
# models, this is generally "mlflow-model".
model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model")
model = mlflow.pyfunc.load_model(model_path)
input_schema = model.metadata.get_input_schema()
def run(raw_data):
json_data = json.loads(raw_data)
if "input_data" not in json_data.keys():
raise Exception("Request must contain a top level key named 'input_data'")
serving_input = json.dumps(json_data["input_data"])
data = infer_and_parse_json_input(serving_input, input_schema)
predictions = model.predict(data)
result = StringIO()
predictions_to_json(predictions, result)
return result.getvalue()
Warning
Poradnik MLflow 2.0: Przykładowy skrypt oceniania działa z MLflow 1.X i MLflow 2.X. Jednak oczekiwane formaty danych wejściowych i wyjściowych w tych wersjach mogą się różnić. Sprawdź definicję środowiska, aby zobaczyć używaną wersję platformy MLflow. Platforma MLflow 2.0 jest obsługiwana tylko w języku Python 3.8 i nowszych wersjach.
Tworzenie środowiska
Następnym krokiem jest utworzenie środowiska, w którym można uruchomić skrypt oceniania. Ponieważ model jest modelem MLflow, wymagania conda są również określone w pakiecie modelu. Aby uzyskać więcej informacji na temat plików zawartych w modelu MLflow, zobacz Format modelu MLmodel. Środowisko jest kompilowane przy użyciu zależności conda z pliku. Należy również uwzględnić pakiet azureml-inference-server-http, który jest wymagany do wdrożeń online w Azure Machine Learning.
Możesz utworzyć plik definicji conda o nazwie conda.yaml zawierający następujące wiersze:
channels:
- conda-forge
dependencies:
- python=3.12
- pip
- pip:
- mlflow
- scikit-learn==1.7.0
- cloudpickle==3.1.1
- psutil==7.0.0
- pandas==2.3.0
- azureml-inference-server-http
name: mlflow-env
Note
Sekcja dependencies tego pliku conda zawiera azureml-inference-server-http pakiet.
Użyj tego pliku zależności conda, aby utworzyć środowisko:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
Środowisko jest tworzone bezpośrednio w konfiguracji wdrożenia.
Utwórz wdrożenie
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
W folderze endpoints/online/ncd utwórz plik konfiguracji wdrożenia deployment.yml zawierający następujące wiersze:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: sklearn-diabetes-custom
endpoint_name: my-endpoint
model: azureml:sklearn-diabetes@latest
environment:
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: sklearn-diabetes/environment/conda.yaml
code_configuration:
code: sklearn-diabetes/src
scoring_script: score.py
instance_type: Standard_F2s_v2
instance_count: 1
Utwórz wdrożenie:
az ml online-deployment create -f endpoints/online/ncd/deployment.yml
Obsługa żądań
Po zakończeniu wdrażania można przystąpić do obsługi żądań. Jednym ze sposobów testowania wdrożenia jest użycie invoke metody z przykładowym plikiem żądania, takim jak następujący plik, sample-request-sklearn.json:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Prześlij żądanie do punktu końcowego:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
Odpowiedź powinna być podobna do następującego tekstu:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
{
"predictions": [
1095.2797413413252,
1134.585328803727
]
}
Warning
Porady dotyczące platformy MLflow 2.0: W rozwiązaniu predictions MLflow 1.X odpowiedź nie zawiera klucza.
Czyszczenie zasobów
Jeśli punkt końcowy nie jest już potrzebny, usuń skojarzone z nim zasoby:
- Interfejs wiersza polecenia (CLI) platformy Azure
- Python (Zestaw SDK usługi Azure Machine Learning)
- Python (biblioteka MLflow SDK)
- Studio
az ml online-endpoint delete --name $ENDPOINT_NAME --yes