Wskazówki dotyczące wdrażania modeli MLflow
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)
W tym artykule dowiesz się więcej o wdrażaniu modeli MLflow w usłudze Azure Machine Learning na potrzeby wnioskowania w czasie rzeczywistym i wsadowego oraz o różnych narzędziach, których można użyć do zarządzania wdrożeniami.
Wdrażanie bez kodu
W przypadku wdrażania modeli MLflow w usłudze Azure Machine Learning, w przeciwieństwie do wdrażania modelu niestandardowego, nie musisz udostępniać skryptu oceniania ani środowiska. Usługa Azure Machine Learning automatycznie generuje skrypt oceniania i środowisko. Ta funkcja jest nazywana wdrożeniem bez kodu.
W przypadku wdrożenia bez kodu usługa Azure Machine Learning:
- Gwarantuje, że wszystkie zależności pakietów wskazane w modelu MLflow są spełnione.
- Udostępnia obraz podstawowy MLflow lub wyselekcjonowane środowisko zawierające następujące elementy:
- Pakiety wymagane przez usługę Azure Machine Learning do wnioskowania, w tym
mlflow-skinny
. - Skrypt oceniania do wykonania wnioskowania.
- Pakiety wymagane przez usługę Azure Machine Learning do wnioskowania, w tym
Napiwek
Obszary robocze bez dostępu do sieci publicznej: przed wdrożeniem modeli MLflow w punktach końcowych online bez łączności wychodzącej należy spakować modele (wersja zapoznawcza). Korzystając z tworzenia pakietów modeli, można uniknąć potrzeby połączenia internetowego, którego usługa Azure Machine Learning w przeciwnym razie wymagałaby dynamicznego instalowania niezbędnych pakietów języka Python dla modeli MLflow.
Pakiety i zależności
Usługa Azure Machine Learning automatycznie generuje środowiska do wnioskowania w modelach MLflow. Aby skompilować środowiska, usługa Azure Machine Learning odczytuje zależności conda określone w modelu MLflow i dodaje wszystkie pakiety wymagane do uruchomienia serwera wnioskowania. Te dodatkowe pakiety różnią się w zależności od typu wdrożenia.
Poniższy przykładowy plik conda.yaml przedstawia zależności conda określone w modelu MLflow.
channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
- mlflow==2.7.1
- cloudpickle==1.6.0
- dataclasses==0.6
- lz4==4.0.0
- numpy==1.23.5
- packaging==23.0
- psutil==5.9.0
- pyyaml==6.0
- scikit-learn==1.1.2
- scipy==1.10.1
- uuid==1.30
name: mlflow-env
Ważne
Narzędzie MLflow automatycznie wykrywa pakiety podczas rejestrowania modelu i przypina wersje pakietów w zależnościach conda modelu. To automatyczne wykrywanie pakietów może nie odzwierciedlać intencji ani wymagań. Modele można też rejestrować przy użyciu sygnatury niestandardowej, środowiska lub przykładów.
Modele z podpisami
Modele MLflow mogą zawierać podpis, który wskazuje oczekiwane dane wejściowe i ich typy. Po wdrożeniu takich modeli w punktach końcowych online lub wsadowych usługa Azure Machine Learning gwarantuje, że liczba i typy danych wejściowych są zgodne z podpisem. Jeśli nie można przeanalizować danych wejściowych zgodnie z oczekiwaniami, wywołanie modelu zakończy się niepowodzeniem.
Podpis modelu MLflow można sprawdzić, otwierając plik MLmodel. Aby uzyskać więcej informacji na temat sposobu działania podpisów w usłudze MLflow, zobacz Podpisy w usłudze MLflow.
Poniższy przykładowy plik MLmodel wyróżnia element signature
.
artifact_path: model
flavors:
python_function:
env:
conda: conda.yaml
virtualenv: python_env.yaml
loader_module: mlflow.sklearn
model_path: model.pkl
predict_fn: predict
python_version: 3.10.11
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
{"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
"s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
"double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
{"name": "s6", "type": "double"}]'
outputs: '[{"type": "double"}]'
Napiwek
Zalecane są podpisy w modelach MLflow, ponieważ zapewniają wygodny sposób wykrywania problemów ze zgodnością danych. Aby uzyskać więcej informacji na temat rejestrowania modeli przy użyciu podpisów, zobacz Rejestrowanie modeli z podpisem niestandardowym, środowiskiem lub przykładami.
Wdrażanie na wbudowanym serwerze MLflow a wdrożeniem na serwerze wnioskowania usługi Azure Machine Learning
Deweloperzy modeli mogą używać wbudowanych narzędzi wdrażania MLflow do testowania modeli lokalnie. Na przykład można uruchomić lokalne wystąpienie modelu zarejestrowanego w rejestrze serwerów MLflow za pomocą interfejsu mlflow models serve
wiersza polecenia platformy MLflow lub interfejsu wiersza polecenia mlflow models predict
platformy MLflow. Aby uzyskać więcej informacji na temat wbudowanych narzędzi wdrażania MLflow, zobacz Wbudowane narzędzia wdrażania w dokumentacji platformy MLflow.
Usługa Azure Machine Learning obsługuje również wdrażanie modeli zarówno w punktach końcowych online, jak i wsadowych. Te punkty końcowe uruchamiają różne technologie wnioskowania, które mogą mieć różne funkcje.
Punkty końcowe online usługi Azure Machine Learning, podobne do wbudowanego serwera MLflow, zapewniają skalowalny, synchroniczny i lekki sposób uruchamiania modeli na potrzeby wnioskowania.
Punkty końcowe wsadowe usługi Azure Machine Learning mogą uruchamiać wnioskowanie asynchroniczne w przypadku długotrwałych procesów wnioskowania, które mogą być skalowane do dużych ilości danych. Serwer MLflow nie ma tej możliwości, chociaż można osiągnąć podobną funkcję przy użyciu zadań platformy Spark. Aby dowiedzieć się więcej na temat punktów końcowych wsadowych i modeli MLflow, zobacz Używanie modeli MLflow we wdrożeniach wsadowych.
Formaty danych wejściowych
W poniższej tabeli przedstawiono typy danych wejściowych obsługiwane przez wbudowany serwer MLflow w porównaniu z punktami końcowymi online usługi Azure Machine Learning.
Input type | Wbudowany serwer MLflow | Punkt końcowy online usługi Azure Machine Learning |
---|---|---|
JSON serializowane ramki danych pandas w orientacji podzielonej | ✓ | ✓ |
JSON serializowane ramki danych pandas w orientacji rekordów | Przestarzałe | |
Ramki danych biblioteki pandas serializowane w formacie CSV | ✓ | Użyj wnioskowania wsadowego. Aby uzyskać więcej informacji, zobacz Wdrażanie modeli MLflow w punktach końcowych wsadowych. |
Dane wejściowe TensorFlow jako listy serializowane w formacie JSON (tensors) i słownik list (nazwanych tensorów) | ✓ | ✓ |
Dane wejściowe Biblioteki TensorFlow przy użyciu interfejsu API obsługującego bibliotekę TensorFlow | ✓ |
W poniższych sekcjach opisano modele MLflow wdrożone w punktach końcowych online usługi Azure Machine Learning.
Struktura danych wejściowych
Niezależnie od typu danych wejściowych usługa Azure Machine Learning wymaga podania danych wejściowych w ładunku JSON w kluczu input_data
słownika . Ten klucz nie jest wymagany, gdy używasz polecenia mlflow models serve
do obsługi modeli, więc ładunki nie mogą być używane zamiennie dla punktów końcowych online usługi Azure Machine Learning i wbudowanego serwera MLflow.
Ważne
Struktura ładunku została zmieniona w rozwiązaniu MLflow 2.0.
W poniższych przykładach ładunku przedstawiono różnice między modelem wdrożonym na wbudowanym serwerze MLflow a serwerem wnioskowania usługi Azure Machine Learning.
Ramka danych pandas serializowana w formacie JSON w orientacji podzielonej
{
"input_data": {
"columns": [
"age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
],
"index": [1],
"data": [
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
}
Dane wejściowe programu Tensor
{
"input_data": [
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
Nazwane wejście -tensor
{
"input_data": {
"tokens": [
[0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
],
"mask": [
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
}
}
Dostosowywanie wnioskowania dla modeli MLflow
Skrypty oceniania umożliwiają dostosowywanie sposobu wykonywania wnioskowania dla modeli niestandardowych. Jednak w przypadku wdrożenia modelu MLflow decyzja o sposobie wykonywania wnioskowania jest wykonywana przez konstruktora modelu, a nie przez inżyniera wdrażania. Każda struktura modelu może automatycznie stosować określone procedury wnioskowania.
Jeśli musisz zmienić sposób wykonywania wnioskowania dla modelu MLflow, możesz wykonać jedną z następujących czynności:
- Zmień sposób rejestrowania modelu w procedurze trenowania.
- Dostosowywanie wnioskowania za pomocą skryptu oceniania w czasie wdrażania.
Zmienianie sposobu rejestrowania modelu podczas trenowania
Podczas rejestrowania modelu przy użyciu metody mlflow.autolog
lub mlflow.<flavor>.log_model
, smak używany dla modelu określa sposób wykonywania wnioskowania i zwracanych wyników. Rozwiązanie MLflow nie wymusza żadnego konkretnego zachowania w zakresie generowania wyników przez predict()
funkcję.
W niektórych przypadkach możesz wykonać pewne wstępne przetwarzanie lub przetwarzanie po nim przed wykonaniem modelu i po nim. Możesz też zmienić zwrócone elementy; na przykład prawdopodobieństwa zamiast klas. Jednym z rozwiązań jest zaimplementowanie potoków uczenia maszynowego, które przechodzą bezpośrednio z danych wejściowych do danych wyjściowych.
Na przykład sklearn.pipeline.Pipeline
lub pyspark.ml.Pipeline
są popularnymi sposobami implementowania potoków i czasami są zalecane ze względu na wydajność. Możesz również dostosować sposób wnioskowania modelu, rejestrując modele niestandardowe.
Dostosowywanie wnioskowania za pomocą skryptu oceniania
Mimo że modele MLflow nie wymagają skryptu oceniania, nadal można podać go, aby dostosować wykonywanie wnioskowania dla modeli MLflow w razie potrzeby. Aby uzyskać więcej informacji na temat dostosowywania wnioskowania, zobacz Dostosowywanie wdrożeń modelu MLflow dla punktów końcowych online lub Dostosowywanie wdrożenia modelu za pomocą skryptu oceniania dla punktów końcowych wsadowych.
Ważne
Jeśli zdecydujesz się określić skrypt oceniania dla wdrożenia modelu MLflow, musisz również udostępnić środowisko wdrożenia.
Narzędzia wdrażania
Usługa Azure Machine Learning oferuje następujące narzędzia do wdrażania modeli MLflow w punktach końcowych online i wsadowych:
- MLflow SDK
- Interfejs wiersza polecenia usługi Azure Machine Learning w wersji 2
- Zestaw SDK usługi Azure Machine Learning dla języka Python
- Azure Machine Learning Studio
Każde narzędzie ma różne możliwości, szczególnie w przypadku tego typu zasobów obliczeniowych, które może być docelowe. W poniższej tabeli przedstawiono obsługę różnych scenariuszy wdrażania platformy MLflow.
Scenariusz | MLflow SDK | Interfejs wiersza polecenia usługi Azure Machine Learning/zestaw SDK lub studio |
---|---|---|
Wdrażanie w zarządzanych punktach końcowychonline 1 | Obsługiwane. Zobacz Progresywne wdrażanie modeli MLflow w punktach końcowych online | Obsługiwane. Zobacz Wdrażanie modeli MLflow w punktach końcowych online |
Wdrażanie w zarządzanych punktach końcowych online za pomocą skryptu oceniania | Nieobsługiwane3 | Obsługiwane. Zobacz Dostosowywanie wdrożeń modelu MLflow |
Wdrażanie w punktach końcowych wsadowych | Nieobsługiwane3 | Obsługiwane. Zobacz Używanie modeli MLflow we wdrożeniach wsadowych |
Wdrażanie w punktach końcowych wsadowych za pomocą skryptu oceniania | Nieobsługiwane3 | Obsługiwane. Zobacz Dostosowywanie wdrożenia modelu za pomocą skryptu oceniania |
Wdrażanie w usługach internetowych, takich jak Azure Container Instances lub Azure Kubernetes Service (AKS) | Starsza wersja pomocy technicznej2 | Nieobsługiwane2 |
Wdrażanie w usługach internetowych, takich jak Container Instances lub AKS, za pomocą skryptu oceniania | Nieobsługiwane3 | Starsza wersja pomocy technicznej2 |
1 Wdrożenie do punktów końcowych online, które znajdują się w obszarach roboczych z włączonym łączem prywatnym, wymaga spakowania modeli przed wdrożeniem (wersja zapoznawcza).
2 Jeśli to możliwe, przełącz się do zarządzanych punktów końcowych online.
3 Platforma MLflow typu open source nie ma pojęcia skryptu oceniania i nie obsługuje wykonywania wsadowego.
Wybieranie narzędzia wdrażania
Użyj zestawu MLflow SDK, jeśli:
- Znasz platformę MLflow i chcesz kontynuować korzystanie z tych samych metod i
- Używasz platformy takiej jak Azure Databricks, która natywnie obsługuje platformę MLflow.
Użyj interfejsu wiersza polecenia usługi Azure Machine Learning w wersji 2 lub zestawu SDK dla języka Python, jeśli:
- Znasz je lub
- Chcesz zautomatyzować wdrażanie przy użyciu potoków lub
- Chcesz zachować konfigurację wdrożenia w repozytorium Git.
Użyj interfejsu użytkownika usługi Azure Machine Learning Studio, jeśli chcesz szybko wdrażać i testować modele trenowane za pomocą platformy MLflow.