Trenowanie modeli scikit-learn na dużą skalę przy użyciu usługi Azure Machine Learning (zestaw SDK w wersji 1)

DOTYCZY:Zestaw SDK języka Python w wersji 1

Z tego artykułu dowiesz się, jak uruchamiać skrypty szkoleniowe biblioteki scikit-learn za pomocą usługi Azure Machine Learning.

Przykładowe skrypty w tym artykule służą do klasyfikowania obrazów kwiatów irysów w celu utworzenia modelu uczenia maszynowego na podstawie zestawu danych iris scikit-learn.

Niezależnie od tego, czy trenujesz model scikit-learn uczenia maszynowego od podstaw, czy wprowadzasz istniejący model do chmury, możesz użyć usługi Azure Machine Learning, aby skalować zadania szkoleniowe typu open source przy użyciu elastycznych zasobów obliczeniowych w chmurze. Za pomocą usługi Azure Machine Learning można tworzyć, wdrażać, wersję i monitorować modele klasy produkcyjnej.

Wymagania wstępne

Ten kod można uruchomić w wystąpieniu obliczeniowym usługi Azure Machine Learning lub we własnym Jupyter Notebook:

  • Wystąpienie obliczeniowe usługi Azure Machine Learning

    • Ukończ przewodnik Szybki start: rozpoczynanie pracy z usługą Azure Machine Learning w celu utworzenia wystąpienia obliczeniowego. Każde wystąpienie obliczeniowe zawiera dedykowany serwer notesów wstępnie załadowany z zestawem SDK i repozytorium przykładów notesów.
    • Wybierz kartę notesu w Azure Machine Learning studio. W folderze szkoleniowym przykłady znajdź ukończony i rozwinięty notes, przechodząc do tego katalogu: how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn folder.
    • Aby ukończyć ten samouczek, możesz użyć wstępnie wypełnionego kodu w folderze trenowania przykładowego.
  • Utwórz serwer Jupyter Notebook i uruchom kod w poniższych sekcjach.

Konfigurowanie eksperymentu

Ta sekcja umożliwia skonfigurowanie eksperymentu szkoleniowego przez załadowanie wymaganych pakietów języka Python, zainicjowanie obszaru roboczego, zdefiniowanie środowiska szkoleniowego i przygotowanie skryptu trenowania.

Inicjowanie obszaru roboczego

Obszar roboczy usługi Azure Machine Learning jest zasobem najwyższego poziomu dla usługi. Zapewnia scentralizowane miejsce do pracy ze wszystkimi tworzonymi artefaktami. W zestawie SDK języka Python możesz uzyskać dostęp do artefaktów obszaru roboczego, tworząc workspace obiekt.

Utwórz obiekt obszaru roboczego na podstawie pliku utworzonego config.json w sekcji wymagań wstępnych.

from azureml.core import Workspace

ws = Workspace.from_config()

Przygotowywanie skryptów

W tym samouczku został już udostępniony skrypt szkoleniowy train_iris.py . W praktyce powinno być możliwe użycie dowolnego niestandardowego skryptu szkoleniowego i uruchomienie go za pomocą usługi Azure Machine Learning bez konieczności modyfikowania kodu.

Uwaga

  • Podany skrypt szkoleniowy pokazuje, jak zarejestrować niektóre metryki w uruchomieniu usługi Azure Machine Learning przy użyciu Run obiektu w skrycie.
  • Podany skrypt szkoleniowy używa przykładowych danych z iris = datasets.load_iris() funkcji . Aby korzystać z własnych danych i uzyskiwać do nich dostęp, zobacz , jak trenować przy użyciu zestawów danych , aby udostępniać dane podczas trenowania.

Definiowanie środowiska

Aby zdefiniować środowisko usługi Azure Machine Learning, które hermetyzuje zależności skryptu szkoleniowego, możesz zdefiniować środowisko niestandardowe lub użyć środowiska wyselekcjonowanego usługi Azure Machine Learning.

Korzystanie ze środowiska wyselekcjonowanych

Opcjonalnie usługa Azure Machine Learning udostępnia wstępnie utworzone, wyselekcjonowane środowiska , jeśli nie chcesz definiować własnego środowiska.

Jeśli chcesz użyć nadzorowanego środowiska, możesz zamiast tego uruchomić następujące polecenie:

from azureml.core import Environment

sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')

Tworzenie środowiska niestandardowego

Możesz również utworzyć własne środowisko niestandardowe. Zdefiniuj zależności conda w pliku YAML; w tym przykładzie plik ma nazwę conda_dependencies.yml.

dependencies:
  - python=3.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Utwórz środowisko usługi Azure Machine Learning na podstawie tej specyfikacji środowiska Conda. Środowisko zostanie spakowane w kontenerze platformy Docker w czasie wykonywania.

from azureml.core import Environment

sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')

Aby uzyskać więcej informacji na temat tworzenia i używania środowisk, zobacz Tworzenie i używanie środowisk oprogramowania w usłudze Azure Machine Learning.

Konfigurowanie i przesyłanie przebiegu trenowania

Tworzenie elementu ScriptRunConfig

Utwórz obiekt ScriptRunConfig, aby określić szczegóły konfiguracji zadania trenowania, w tym skrypt trenowania, środowisko do użycia i docelowy obiekt obliczeniowy do uruchomienia. Wszelkie argumenty skryptu szkoleniowego zostaną przekazane za pośrednictwem wiersza polecenia, jeśli określono go w parametrze arguments .

Poniższy kod skonfiguruje obiekt ScriptRunConfig do przesyłania zadania do wykonania na komputerze lokalnym.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      environment=sklearn_env)

Jeśli zamiast tego chcesz uruchomić zadanie w klastrze zdalnym, możesz określić żądany docelowy obiekt obliczeniowy do compute_target parametru ScriptRunConfig.

from azureml.core import ScriptRunConfig

compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      compute_target=compute_target,
                      environment=sklearn_env)

Przesyłanie przebiegu

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)

Ostrzeżenie

Usługa Azure Machine Learning uruchamia skrypty szkoleniowe, kopiując cały katalog źródłowy. Jeśli masz poufne dane, których nie chcesz przekazywać, użyj pliku .ignore lub nie dołącz go do katalogu źródłowego . Zamiast tego uzyskaj dostęp do danych przy użyciu zestawu danych usługi Azure Machine Learning.

Co się stanie podczas wykonywania przebiegu

Po wykonaniu przebiegu przechodzi on przez następujące etapy:

  • Przygotowywanie: obraz platformy Docker jest tworzony zgodnie ze zdefiniowanym środowiskiem. Obraz jest przekazywany do rejestru kontenerów obszaru roboczego i buforowany do późniejszego uruchomienia. Dzienniki są również przesyłane strumieniowo do historii uruchamiania i można je wyświetlić w celu monitorowania postępu. Jeśli zamiast tego zostanie określone wyselekcjonowane środowisko, zostanie użyty buforowany obraz obsługujący środowisko nadzorowane.

  • Skalowanie: klaster próbuje przeprowadzić skalowanie w górę, jeśli klaster usługi Batch AI wymaga więcej węzłów do wykonania przebiegu niż jest obecnie dostępne.

  • Uruchomione: wszystkie skrypty w folderze script są przekazywane do docelowego obiektu obliczeniowego, magazyny danych są instalowane lub kopiowane i script wykonywane. Dane wyjściowe ze strumienia stdout i folderu ./logs są przesyłane strumieniowo do historii uruchamiania i mogą służyć do monitorowania przebiegu.

  • Przetwarzanie końcowe: folder ./outputs przebiegu jest kopiowany do historii uruchamiania.

Zapisywanie i rejestrowanie modelu

Po wytrenowanym modelu możesz zapisać go i zarejestrować w obszarze roboczym. Rejestracja modelu umożliwia przechowywanie i przechowywanie wersji modeli w obszarze roboczym w celu uproszczenia zarządzania modelami i wdrażania.

Dodaj następujący kod do skryptu szkoleniowego train_iris.py, aby zapisać model.

import joblib

joblib.dump(svm_model_linear, 'model.joblib')

Zarejestruj model w obszarze roboczym przy użyciu następującego kodu. Określając parametry model_framework, model_framework_versioni resource_configuration, wdrożenie modelu bez kodu staje się dostępne. Wdrożenie modelu bez kodu umożliwia bezpośrednie wdrożenie modelu jako usługi internetowej z zarejestrowanego modelu, a ResourceConfiguration obiekt definiuje zasób obliczeniowy dla usługi internetowej.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='sklearn-iris', 
                           model_path='outputs/model.joblib',
                           model_framework=Model.Framework.SCIKITLEARN,
                           model_framework_version='0.19.1',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Wdrożenie

Właśnie zarejestrowany model można wdrożyć dokładnie tak samo jak każdy inny zarejestrowany model w usłudze Azure Machine Learning. Instrukcje dotyczące wdrażania zawierają sekcję dotyczącą rejestrowania modeli, ale możesz przejść bezpośrednio do sekcji [tworzenie docelowego obiektu obliczeniowegohow-to-deploy-and-where.md#choose-a-compute-target) do wdrożenia, ponieważ masz już zarejestrowany model.

(Wersja zapoznawcza) Wdrożenie modelu bez kodu

Ważne

Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone.

Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

Zamiast tradycyjnej trasy wdrażania można również użyć funkcji wdrażania bez kodu (wersja zapoznawcza) dla biblioteki scikit-learn. Wdrożenie modelu bez kodu jest obsługiwane dla wszystkich wbudowanych typów modeli scikit-learn. Rejestrując model, jak pokazano powyżej za model_frameworkpomocą parametrów , model_framework_versioni resource_configuration , możesz po prostu użyć funkcji statycznej deploy() do wdrożenia modelu.

web_service = Model.deploy(ws, "scikit-learn-service", [model])

Uwaga

Te zależności są uwzględniane we wstępnie utworzonym kontenerze wnioskowania biblioteki scikit-learn.

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

Pełne instrukcje dotyczące wdrażania w usłudze Azure Machine Learning są bardziej szczegółowe.

Następne kroki

W tym artykule wytrenujesz i zarejestrowano model scikit-learn oraz przedstawiono opcje wdrażania. Zobacz inne artykuły, aby dowiedzieć się więcej o usłudze Azure Machine Learning.