Samouczek: tworzenie modeli na stacji roboczej w chmurze

Dowiedz się, jak opracować skrypt szkoleniowy przy użyciu notesu na stacji roboczej w chmurze Edukacja azure Machine. W tym samouczku omówiono podstawowe informacje potrzebne do rozpoczęcia pracy:

  • Konfigurowanie i konfigurowanie stacji roboczej w chmurze. Twoja stacja robocza w chmurze jest obsługiwana przez wystąpienie obliczeniowe usługi Azure Machine Edukacja, które jest wstępnie skonfigurowane ze środowiskami do obsługi różnych potrzeb związanych z tworzeniem modeli.
  • Używaj środowisk deweloperskich opartych na chmurze.
  • Użyj biblioteki MLflow, aby śledzić metryki modelu — wszystko z poziomu notesu.

Wymagania wstępne

Aby korzystać z usługi Azure Machine Edukacja, najpierw potrzebujesz obszaru roboczego. Jeśli go nie masz, ukończ tworzenie zasobów, aby rozpocząć tworzenie obszaru roboczego i dowiedz się więcej na temat korzystania z niego.

Rozpoczynanie pracy z notesami

Sekcja Notesy w obszarze roboczym to dobre miejsce do rozpoczęcia nauki o usłudze Azure Machine Edukacja i jego możliwościach. W tym miejscu możesz nawiązać połączenie z zasobami obliczeniowymi, pracować z terminalem oraz edytować i uruchamiać notesy Jupyter Notebook oraz skrypty.

  1. Zaloguj się do usługi Azure Machine Edukacja Studio.

  2. Wybierz obszar roboczy, jeśli nie został jeszcze otwarty.

  3. W obszarze nawigacji po lewej stronie wybierz pozycję Notesy.

  4. Jeśli nie masz wystąpienia obliczeniowego, zobaczysz pozycję Tworzenie zasobów obliczeniowych na środku ekranu. Wybierz pozycję Utwórz obliczenia i wypełnij formularz. Możesz użyć wszystkich wartości domyślnych. (Jeśli masz już wystąpienie obliczeniowe, zobaczysz zamiast tegoTerminal w tym miejscu. W dalszej części tego samouczka użyjesz terminala ).

    Screenshot shows how to create a compute instance.

Konfigurowanie nowego środowiska do tworzenia prototypów (opcjonalnie)

Aby skrypt został uruchomiony, należy pracować w środowisku skonfigurowanym z zależnościami i bibliotekami oczekiwanymi przez kod. Ta sekcja ułatwia tworzenie środowiska dostosowanego do kodu. Aby utworzyć nowe jądro Jupyter, z którym nawiązuje połączenie notes, użyjesz pliku YAML definiującego zależności.

  • Przekaż plik.

    Przekazane pliki są przechowywane w udziale plików platformy Azure, a te pliki są instalowane w każdym wystąpieniu obliczeniowym i udostępniane w obszarze roboczym.

    1. Pobierz ten plik środowiska conda, workstation_env.yml na komputer, używając przycisku Pobierz nieprzetworzonego pliku w prawym górnym rogu.
    1. Wybierz pozycję Dodaj pliki, a następnie wybierz pozycję Przekaż pliki, aby przekazać je do obszaru roboczego.

      Screenshot shows how to upload files to your workspace.

    2. Wybierz pozycję Przeglądaj i wybierz pliki.

    3. Wybierz pobrany plik workstation_env.yml .

    4. Wybierz opcję Prześlij.

    Zobaczysz plik workstation_env.yml w folderze nazwy użytkownika na karcie Pliki . Wybierz ten plik, aby wyświetlić podgląd i zobaczyć, jakie zależności określa. Zobaczysz zawartość podobną do następującej:

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • Utwórz jądro.

    Teraz użyj terminalu usługi Azure Machine Edukacja, aby utworzyć nowe jądro Jupyter na podstawie pliku workstation_env.yml.

    1. Wybierz pozycję Terminal , aby otworzyć okno terminalu. Możesz również otworzyć terminal na pasku poleceń po lewej stronie:

      Screenshot shows open terminal tool in notebook toolbar.

    2. Jeśli wystąpienie obliczeniowe zostanie zatrzymane, wybierz pozycję Uruchom obliczenia i zaczekaj na jego uruchomienie.

      Screenshot shows how to start compute if it's stopped.

    3. Po uruchomieniu obliczeń w terminalu zostanie wyświetlony komunikat powitalny i możesz rozpocząć wpisywanie poleceń.

    4. Wyświetl bieżące środowiska conda. Aktywne środowisko jest oznaczone znakiem *.

      conda env list
      
    5. Jeśli na potrzeby tego samouczka utworzono podfolder, cd przejdź teraz do tego folderu.

    6. Utwórz środowisko na podstawie dostarczonego pliku conda. Skompilowanie tego środowiska zajmuje kilka minut.

      conda env create -f workstation_env.yml
      
      
    7. Aktywuj nowe środowisko.

       conda activate workstation_env
      
    8. Sprawdź, czy prawidłowe środowisko jest aktywne, ponownie wyszukując środowisko oznaczone znakiem *.

      conda env list
      
    9. Utwórz nowe jądro Jupyter na podstawie aktywnego środowiska.

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. Zamknij okno terminalu.

Masz teraz nowe jądro. Następnie otworzysz notes i użyjesz tego jądra.

Tworzenie notesu

  1. Wybierz pozycję Dodaj pliki i wybierz pozycję Utwórz nowy plik.

    Screenshot: Create new file.

  2. Nadaj nowemu notesowi nazwę develop-tutorial.ipynb (lub wprowadź preferowaną nazwę).

  3. Jeśli wystąpienie obliczeniowe zostanie zatrzymane, wybierz pozycję Uruchom obliczenia i zaczekaj na jego uruchomienie.

    Screenshot shows how to start compute if it's stopped.

  4. Zobaczysz, że notes jest połączony z domyślnym jądrem w prawym górnym rogu. Przejdź do korzystania z jądra Tutorial Workstation Env , jeśli utworzono jądro.

Opracowywanie skryptu szkoleniowego

W tej sekcji utworzysz skrypt szkoleniowy języka Python, który przewiduje domyślne płatności kart kredytowych przy użyciu przygotowanych zestawów danych testowych i szkoleniowych z zestawu danych UCI.

Ten kod służy sklearn do trenowania i biblioteki MLflow do rejestrowania metryk.

  1. Zacznij od kodu, który importuje pakiety i biblioteki, których będziesz używać w skry skrycie szkoleniowym.

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. Następnie załaduj i przetwórz dane dla tego eksperymentu. W tym samouczku odczytujesz dane z pliku w Internecie.

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. Przygotuj dane do szkolenia:

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. Dodaj kod, aby rozpocząć automatyczne rejestrowanie za pomocą MLflowpolecenia , aby można było śledzić metryki i wyniki. Dzięki iteracyjnej charakterowi opracowywania MLflow modelu pomaga rejestrować parametry i wyniki modelu. Wróć do tych przebiegów, aby porównać i zrozumieć, jak działa model. Dzienniki zapewniają również kontekst, gdy wszystko będzie gotowe do przejścia z fazy programowania do fazy trenowania przepływów pracy w usłudze Azure Machine Edukacja.

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. Trenowanie modelu.

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

    Uwaga

    Możesz zignorować ostrzeżenia mlflow. Nadal będziesz otrzymywać wszystkie wyniki, które są śledzone.

Powtarzanie

Teraz, gdy masz wyniki modelu, możesz zmienić coś i spróbować ponownie. Na przykład wypróbuj inną technikę klasyfikatora:

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

Uwaga

Możesz zignorować ostrzeżenia mlflow. Nadal będziesz otrzymywać wszystkie wyniki, które są śledzone.

Sprawdzanie wyników

Po wypróbowaniu dwóch różnych modeli użyj wyników śledzonych przez MLFfow usługę , aby zdecydować, który model jest lepszy. Możesz odwoływać się do metryk, takich jak dokładność lub inne wskaźniki, które mają największe znaczenie dla Twoich scenariuszy. Więcej szczegółowych informacji na temat tych wyników można uzyskać, przeglądając zadania utworzone przez MLflowprogram .

  1. W obszarze nawigacji po lewej stronie wybierz pozycję Zadania.

    Screenshot shows how to select Jobs in the navigation.

  2. Wybierz link do samouczka Dotyczącego tworzenia aplikacji w chmurze.

  3. Istnieją dwa różne zadania, po jednym dla każdego z modeli, które próbowano wykonać. Te nazwy są generowane automatycznie. Po umieszczeniu wskaźnika myszy na nazwie użyj narzędzia ołówka obok nazwy, jeśli chcesz zmienić jego nazwę.

  4. Wybierz link dla pierwszego zadania. Nazwa jest wyświetlana u góry. Możesz również zmienić jego nazwę w tym miejscu za pomocą narzędzia ołówka.

  5. Na stronie przedstawiono szczegóły zadania, takie jak właściwości, dane wyjściowe, tagi i parametry. W obszarze Tagi zobaczysz estimator_name, która opisuje typ modelu.

  6. Wybierz kartę Metryki , aby wyświetlić metryki zarejestrowane przez MLflowusługę . (Oczekujesz, że wyniki będą się różnić, ponieważ masz inny zestaw treningowy).

    Screenshot shows metrics for a job.

  7. Wybierz kartę Obrazy, aby wyświetlić obrazy wygenerowane przez MLflowprogram .

    Screenshot shows images for a job.

  8. Wróć i przejrzyj metryki i obrazy dla innego modelu.

Tworzenie skryptu w języku Python

Teraz utwórz skrypt języka Python na podstawie notesu na potrzeby trenowania modelu.

  1. Na pasku narzędzi notesu wybierz menu.

  2. Wybierz pozycję Eksportuj jako> Python.

    Screenshot shows exporting a Python file from the notebook.

  3. Nadaj plikowi nazwę train.py.

  4. Przejrzyj ten plik i usuń kod, którego nie chcesz użyć w skryfcie szkoleniowym. Na przykład zachowaj kod dla modelu, którego chcesz użyć, i usuń kod dla modelu, którego nie chcesz.

    • Upewnij się, że zachowasz kod, który uruchamia automatyczne rejestrowanie (mlflow.sklearn.autolog()).
    • Możesz usunąć automatycznie wygenerowane komentarze i dodać więcej komentarzy.
    • Po interaktywnym uruchomieniu skryptu języka Python (w terminalu lub notesie) można zachować wiersz definiujący nazwę eksperymentu (mlflow.set_experiment("Develop on cloud tutorial")). Możesz nawet podać inną nazwę, aby zobaczyć ją jako inny wpis w sekcji Zadania . Jednak gdy przygotujesz skrypt do zadania szkoleniowego, ten wiersz nie będzie działać i powinien zostać pominięty — definicja zadania zawiera nazwę eksperymentu.
    • Podczas trenowania pojedynczego modelu wiersze do uruchamiania i kończenia przebiegu (mlflow.start_run() i mlflow.end_run()) również nie są konieczne (nie będą miały żadnego efektu), ale mogą pozostać w lewo, jeśli chcesz.
  5. Po zakończeniu edycji zapisz plik.

Masz teraz skrypt języka Python do użycia na potrzeby trenowania preferowanego modelu.

Uruchamianie skryptu języka Python

Na razie uruchamiasz ten kod w wystąpieniu obliczeniowym, czyli środowisku deweloperskim usługi Azure Machine Edukacja. Samouczek: trenowanie modelu pokazuje, jak uruchomić skrypt szkoleniowy w bardziej skalowalny sposób na bardziej zaawansowane zasoby obliczeniowe.

  1. Po lewej stronie wybierz pozycję Otwórz terminal , aby otworzyć okno terminalu.

    Screenshot shows how to open a terminal window.

  2. Wyświetl bieżące środowiska conda. Aktywne środowisko jest oznaczone znakiem *.

    conda env list
    
  3. Jeśli utworzono nowe jądro, aktywuj je teraz:

    conda activate workstation_env
    
  4. Jeśli na potrzeby tego samouczka utworzono podfolder, cd przejdź teraz do tego folderu.

  5. Uruchom skrypt szkoleniowy.

    python train.py
    

Uwaga

Możesz zignorować ostrzeżenia mlflow. Nadal będziesz pobierać wszystkie metryki i obrazy z automatycznego rejestrowania.

Sprawdzanie wyników skryptu

Wróć do obszaru Zadania , aby wyświetlić wyniki skryptu szkoleniowego. Należy pamiętać, że dane treningowe zmieniają się wraz z każdym podziałem, więc wyniki różnią się również między przebiegami.

Czyszczenie zasobów

Jeśli planujesz kontynuować korzystanie z innych samouczków, przejdź do sekcji Następne kroki.

Zatrzymywanie wystąpienia obliczeniowego

Jeśli nie zamierzasz go teraz używać, zatrzymaj wystąpienie obliczeniowe:

  1. W programie Studio w obszarze nawigacji po lewej stronie wybierz pozycję Obliczenia.
  2. Na pierwszych kartach wybierz pozycję Wystąpienia obliczeniowe
  3. Wybierz wystąpienie obliczeniowe na liście.
  4. Na górnym pasku narzędzi wybierz pozycję Zatrzymaj.

Usuwanie wszystkich zasobów

Ważne

Utworzone zasoby mogą być używane jako wymagania wstępne w innych samouczkach usługi Azure Machine Edukacja i artykułach z instrukcjami.

Jeśli nie planujesz korzystać z żadnych utworzonych zasobów, usuń je, aby nie ponosić żadnych opłat:

  1. W witrynie Azure Portal na końcu z lewej strony wybierz pozycję Grupy zasobów.

  2. Z listy wybierz utworzoną grupę zasobów.

  3. Wybierz pozycję Usuń grupę zasobów.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Wpisz nazwę grupy zasobów. Następnie wybierz Usuń.

Następne kroki

Dowiedz się więcej na następujące tematy:

W tym samouczku przedstawiono wczesne kroki tworzenia modelu, tworzenia prototypów na tej samej maszynie, na której znajduje się kod. Na potrzeby szkolenia produkcyjnego dowiedz się, jak używać tego skryptu szkoleniowego na bardziej zaawansowanych zasobach obliczeniowych zdalnych: