자습서: 클라우드 워크스테이션에서 모델 개발

Azure Machine Learning 클라우드 워크스테이션에서 Notebook을 사용하여 학습 스크립트를 개발하는 방법을 알아봅니다. 이 자습서에서는 시작하는 데 필요한 기본 사항을 다룹니다.

  • 클라우드 워크스테이션을 설정하고 구성합니다. 클라우드 워크스테이션은 다양한 모델 개발 요구 사항을 지원하는 환경으로 미리 구성된 Azure Machine Learning 컴퓨팅 인스턴스로 구동됩니다.
  • 클라우드 기반 개발 환경을 사용합니다.
  • MLflow를 사용하여 Notebook 내에서 모델 메트릭을 모두 추적합니다.

필수 조건

Azure Machine Learning을 사용하려면 먼저 작업 영역이 필요합니다. 작업 영역이 없으면 시작하는 데 필요한 리소스 만들기를 완료하여 작업 영역을 만들고 사용 방법에 대해 자세히 알아봅니다.

Notebooks로 시작

작업 영역의 Notebooks 섹션은 Azure Machine Learning 및 해당 기능에 대해 알아보기 시작하기에 좋은 위치입니다. 여기에서 컴퓨팅 리소스에 연결하고, 터미널로 작업하고, Jupyter Notebooks와 스크립트를 편집 및 실행할 수 있습니다.

  1. Azure Machine Learning Studio에 로그인합니다.

  2. 아직 열려 있지 않은 경우 작업 영역을 선택합니다.

  3. 왼쪽 탐색 영역에서 Notebooks을 선택합니다.

  4. 컴퓨팅 인스턴스가 없으면 화면 중앙에 컴퓨팅 만들기가 표시됩니다. 컴퓨팅 만들기를 선택하고 양식을 작성합니다. 모든 기본값을 사용할 수 있습니다. (컴퓨팅 인스턴스가 이미 있는 경우 대신 해당 위치에 터미널이 표시됩니다. 이 자습서의 뒷부분에서는 터미널을 사용하게 됩니다.)

    Screenshot shows how to create a compute instance.

프로토타입 제작을 위한 새 환경 설정(선택 사항)

스크립트를 실행하려면 코드에서 예상하는 종속성과 라이브러리로 구성된 환경에서 작업해야 합니다. 이 섹션에서는 코드에 맞는 환경을 만드는 데 도움이 됩니다. Notebook이 연결되는 새로운 Jupyter 커널을 만들려면 종속성을 정의하는 YAML 파일을 사용합니다.

  • 파일을 업로드합니다.

    업로드하는 파일은 Azure 파일 공유에 저장되며, 이러한 파일은 각 컴퓨팅 인스턴스에 탑재되고 작업 영역 내에서 공유됩니다.

    1. 오른쪽 상단에 있는 원시 파일 다운로드 단추를 사용하여 Conda 환경 파일인 workstation_env.yml을 컴퓨터에 다운로드합니다.
    1. 파일 추가를 선택한 다음 파일 업로드를 선택하여 작업 영역에 업로드합니다.

      Screenshot shows how to upload files to your workspace.

    2. 파일 찾아보기 및 선택을 선택합니다.

    3. 다운로드한 workstation_env.yml 파일을 선택합니다.

    4. 업로드를 선택합니다.

    파일 탭의 사용자 이름 폴더 아래에 workstation_env.yml 파일이 표시됩니다. 이 파일을 선택하여 미리 보고 어떤 종속성을 지정하는지 확인합니다. 다음과 같은 콘텐츠가 표시됩니다.

    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
    
  • 커널을 만듭니다.

    이제 Azure Machine Learning 터미널을 사용하여 workstation_env.yml 파일을 기반으로 새 Jupyter 커널을 만듭니다.

    1. 터미널을 선택하여 터미널 창을 엽니다. 왼쪽 명령 모음에서 터미널을 열 수도 있습니다.

      Screenshot shows open terminal tool in notebook toolbar.

    2. 컴퓨팅 인스턴스가 중지된 경우 컴퓨팅 시작을 선택하고 실행될 때까지 기다립니다.

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

    3. 컴퓨팅이 실행되면 터미널에 환영 메시지가 표시되고 명령 입력을 시작할 수 있습니다.

    4. 현재 Conda 환경을 확인합니다. 활성 환경에는 *가 표시됩니다.

      conda env list
      
    5. 이 자습서에 대한 하위 폴더를 만든 경우 지금 해당 폴더로 이동(cd)합니다.

    6. 제공된 conda 파일을 기반으로 환경을 만듭니다. 이 환경을 빌드하는 데 몇 분 정도 걸립니다.

      conda env create -f workstation_env.yml
      
      
    7. 새 환경을 활성화합니다.

       conda activate workstation_env
      
    8. 올바른 환경이 활성화되어 있는지 유효성을 검사하고 *로 표시된 환경을 다시 찾습니다.

      conda env list
      
    9. 활성 환경을 기반으로 새 Jupyter 커널을 만듭니다.

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    10. 터미널 창을 닫습니다.

이제 새로운 커널이 생겼습니다. 다음으로 Notebook을 열고 이 커널을 사용할 예정입니다.

Notebook 만들기

  1. 파일 추가를 선택하고 새 파일 만들기를 선택합니다.

    Screenshot: Create new file.

  2. 새 Notebook의 이름을 develop-tutorial.ipynb로 지정하거나 원하는 이름을 입력합니다.

  3. 컴퓨팅 인스턴스가 중지된 경우 컴퓨팅 시작을 선택하고 실행될 때까지 기다립니다.

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

  4. 오른쪽 상단에 Notebook이 기본 커널에 연결된 것을 볼 수 있습니다. 커널을 만든 경우 자습서 워크스테이션 환경 커널을 사용하도록 전환합니다.

학습 스크립트 개발

이 섹션에서는 UCI 데이터 세트에서 준비된 테스트 및 학습 데이터 세트를 사용하여 신용 카드 기본 결제를 예측하는 Python 학습 스크립트를 개발합니다.

이 코드는 학습에는 sklearn을 사용하고 메트릭 로깅에는 MLflow를 사용합니다.

  1. 학습 스크립트에서 사용할 패키지와 라이브러리를 가져오는 코드로 시작합니다.

    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. 다음으로 이 실험에 대한 데이터를 로드하고 처리합니다. 이 자습서에서는 인터넷에 있는 파일의 데이터를 읽습니다.

    # 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. 학습을 위해 데이터를 준비합니다.

    # 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. 메트릭과 결과를 추적할 수 있도록 MLflow를 사용하여 자동 로깅을 시작하는 코드를 추가합니다. 모델 개발의 반복적 특성을 통해 MLflow는 모델 매개 변수 및 결과를 기록하는 데 도움이 됩니다. 해당 실행을 다시 참조하여 모델 성능을 비교하고 이해합니다. 또한 로그는 Azure Machine Learning 내에서 워크플로의 개발 단계에서 학습 단계로 이동할 준비가 된 시기에 대한 컨텍스트를 제공합니다.

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. 모델을 학습합니다.

    # 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()

    참고 항목

    mlflow 경고는 무시할 수 있습니다. 추적해야 하는 모든 결과는 계속해서 가져올 수 있습니다.

Iterate

이제 모델 결과가 있으므로 무언가를 변경하고 다시 시도할 수 있습니다. 예를 들어, 다른 분류자 기술을 사용해 보세요.

# 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()

참고 항목

mlflow 경고는 무시할 수 있습니다. 추적해야 하는 모든 결과는 계속해서 가져올 수 있습니다.

결과 검사

두 가지 다른 모델을 시도했으므로 이제 MLFfow에서 추적한 결과를 사용하여 어떤 모델이 더 나은지 결정합니다. 정확도와 같은 메트릭이나 시나리오에 가장 중요한 기타 메트릭을 참조할 수 있습니다. MLflow에 의해 만들어진 일자리를 살펴보면 이러한 결과를 더 자세히 알아볼 수 있습니다.

  1. 왼쪽 탐색 영역에서 작업을 선택합니다.

    Screenshot shows how to select Jobs in the navigation.

  2. 클라우드 기반 개발 자습서 링크를 선택합니다.

  3. 시도한 각 모델에 대해 하나씩 두 가지 다른 작업이 표시됩니다. 이러한 이름은 자동 생성됩니다. 이름 위에 마우스를 가리키고 이름을 바꾸려면 이름 옆에 있는 연필 도구를 사용합니다.

  4. 첫 번째 작업에 대한 링크를 선택합니다. 이름이 상단에 나타납니다. 여기에서 연필 도구를 사용하여 이름을 바꿀 수도 있습니다.

  5. 이 페이지에는 속성, 출력, 태그, 매개 변수 등 작업의 세부 정보가 표시됩니다. 태그 아래에는 모델 형식을 설명하는 estimator_name이 표시됩니다.

  6. MLflow에서 기록한 메트릭을 보려면 메트릭 탭을 선택합니다. (학습 집합이 다르기 때문에 결과가 다를 수 있습니다.)

    Screenshot shows metrics for a job.

  7. MLflow에서 생성된 이미지를 보려면 이미지 탭을 선택합니다.

    Screenshot shows images for a job.

  8. 돌아가서 다른 모델의 메트릭과 이미지를 검토합니다.

Python 스크립트 만들기

이제 모델 학습을 위해 Notebook에서 Python 스크립트를 만듭니다.

  1. Notebook 도구 모음에서 메뉴를 선택합니다.

  2. Python으로 내보내기>를 선택합니다.

    Screenshot shows exporting a Python file from the notebook.

  3. 파일 이름을 train.py로 지정합니다.

  4. 이 파일을 살펴보고 학습 스크립트에서 원하지 않는 코드를 삭제합니다. 예를 들어, 사용하려는 모델의 코드는 유지하고, 원하지 않는 모델의 코드는 삭제합니다.

    • 자동 로깅을 시작하는 코드(mlflow.sklearn.autolog())를 유지합니다.
    • 자동 생성된 댓글을 삭제하고 고유의 댓글을 더 추가할 수도 있습니다.
    • Python 스크립트를 대화형으로(터미널 또는 Notebook에서) 실행할 때 실험 이름(mlflow.set_experiment("Develop on cloud tutorial"))을 정의하는 줄을 유지할 수 있습니다. 또는 작업 섹션에서 다른 항목으로 표시되도록 다른 이름을 지정할 수도 있습니다. 그러나 학습 작업을 위한 스크립트를 준비할 때 해당 줄은 작동하지 않으므로 생략해야 합니다. 작업 정의에는 실험 이름이 포함됩니다.
    • 단일 모델을 학습할 때 실행을 시작하고 종료하는 줄(mlflow.start_run()mlflow.end_run())도 필요하지 않지만(효과가 없음) 원하는 경우 그대로 둘 수 있습니다.
  5. 편집이 끝나면 파일을 저장합니다.

이제 기본 설정하는 모델을 학습하는 데 사용할 Python 스크립트가 생겼습니다.

Python 스크립트 실행

지금은 Azure Machine Learning 개발 환경인 컴퓨팅 인스턴스에서 이 코드를 실행하고 있습니다. 자습서: 모델 학습은 더 강력한 컴퓨팅 리소스에서 더 확장 가능한 방식으로 학습 스크립트를 실행하는 방법을 보여 줍니다.

  1. 왼쪽에서 터미널 열기를 선택하여 터미널 창을 엽니다.

    Screenshot shows how to open a terminal window.

  2. 현재 Conda 환경을 확인합니다. 활성 환경에는 *가 표시됩니다.

    conda env list
    
  3. 새 커널을 만들었다면 지금 활성화합니다.

    conda activate workstation_env
    
  4. 이 자습서에 대한 하위 폴더를 만든 경우 지금 해당 폴더로 이동(cd)합니다.

  5. 학습 스크립트를 실행합니다.

    python train.py
    

참고 항목

mlflow 경고는 무시할 수 있습니다. 자동 로깅을 통해 모든 메트릭과 이미지를 계속 가져올 수 있습니다.

스크립트 결과 검사

학습 스크립트 결과를 보려면 작업으로 돌아가세요. 학습 데이터는 분할할 때마다 변경되므로 실행 간에도 결과가 달라집니다.

리소스 정리

지금 다른 자습서를 계속 진행하려면 다음 단계로 건너뛰세요.

컴퓨팅 인스턴스 중지

지금 사용하지 않으려면 컴퓨팅 인스턴스를 중지합니다.

  1. 스튜디오의 왼쪽 탐색 영역에서 컴퓨팅을 선택합니다.
  2. 맨 위 탭에서 컴퓨팅 인스턴스를 선택합니다.
  3. 목록에서 컴퓨팅 인스턴스를 선택합니다.
  4. 맨 위의 도구 모음에서 중지를 선택합니다.

모든 리소스 삭제

Important

사용자가 만든 리소스는 다른 Azure Machine Learning 자습서 및 방법 문서의 필수 구성 요소로 사용할 수 있습니다.

사용자가 만든 리소스를 사용하지 않으려면 요금이 발생하지 않도록 해당 리소스를 삭제합니다.

  1. Azure Portal 맨 왼쪽에서 리소스 그룹을 선택합니다.

  2. 목록에서 만든 리소스 그룹을 선택합니다.

  3. 리소스 그룹 삭제를 선택합니다.

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

  4. 리소스 그룹 이름을 입력합니다. 그런 다음 삭제를 선택합니다.

다음 단계

자세히 알아보기:

이 자습서에서는 모델을 만들고 코드가 있는 동일한 컴퓨터에서 프로토타입을 작성하는 초기 단계를 보여 주었습니다. 프로덕션 학습의 경우 보다 강력한 원격 컴퓨팅 리소스에서 해당 학습 스크립트를 사용하는 방법을 알아봅니다.