Udostępnij za pośrednictwem


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.

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 predictplatformy 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_datasł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:

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.