다음을 통해 공유


자습서 3: 되풀이 구체화 사용하도록 설정 및 일괄 유추 실행

이 자습서 시리즈는 프로토타입 제작, 학습, 운영화 등 기계 학습 수명 주기의 모든 단계를 기능이 원활하게 통합하는 방법을 보여 줍니다.

첫 번째 자습서에서는 사용자 지정 변환을 사용하여 기능 집합 사양을 만드는 방법을 보여 줍니다. 그런 다음, 해당 기능 집합을 사용하여 학습 데이터를 생성하고, 구체화를 사용하도록 설정하고, 백필을 수행하는 방법을 보여 주었습니다. 두 번째 자습서에서는 구체화를 사용하도록 설정하고 백필을 수행하는 방법을 보여 주었습니다. 또한 모델 성능을 개선시키는 방법으로 기능을 실험하는 방법을 보여 주었습니다.

이 자습서에서는 다음을 수행하는 방법을 설명합니다.

  • transactions 기능 집합에 대해 되풀이 구체화를 사용하도록 설정합니다.
  • 등록된 모델에 대해 일괄 처리 유추 파이프라인을 실행합니다.

필수 조건

이 자습서를 진행하기 전에 시리즈의 첫 번째 및 두 번째 자습서를 완료해야 합니다.

설정

  1. Azure Machine Learning Spark Notebook을 구성합니다.

    이 자습서를 실행하려면 새 Notebook을 만들고 지침을 단계별로 실행할 수 있습니다. 3. 되풀이 구체화 사용 및 일괄 처리 유추 실행이라는 기존 Notebook을 열고 실행할 수도 있습니다. 해당 Notebooks와 이 시리즈의 모든 Notebooks는 featurestore_sample/notebooks 디렉터리에서 찾을 수 있습니다. sdk_only 또는 sdk_and_cli를 선택할 수 있습니다. 이 자습서를 열어두고 설명서 링크와 추가 설명을 참조하세요.

    1. 위쪽 탐색의 컴퓨팅 드롭다운 목록에서 Azure Machine Learning Serverless Spark 아래의 서버리스 Spark 컴퓨팅을 선택합니다.

    2. 세션 구성:

      1. 상단 상태 표시줄에서 세션 구성을 선택합니다.
      2. Python 패키지 탭을 선택합니다.
      3. conda 파일 업로드를 선택합니다.
      4. 로컬 컴퓨터에서 azureml-examples/sdk/python/featurestore-sample/project/env/online.yml 파일을 선택합니다.
      5. 필요에 따라 세션 제한 시간(유휴 시간)을 늘려 필수 조건이 자주 다시 실행되지 않도록 합니다.
  2. Spark 세션을 시작합니다.

    # run this cell to start the spark session (any code block will start the session ). This can take around 10 mins.
    print("start spark session")
  3. 샘플의 루트 디렉터리를 설정합니다.

    import os
    
    # please update the dir to ./Users/<your_user_alias> (or any custom directory you uploaded the samples to).
    # You can find the name from the directory structure in the left nav
    root_dir = "./Users/<your_user_alias>/featurestore_sample"
    
    if os.path.isdir(root_dir):
        print("The folder exists.")
    else:
        print("The folder does not exist. Please create or fix the path")
  4. CLI를 설정합니다.

    해당 없음.


  1. 프로젝트 작업 영역 CRUD(만들기, 읽기, 업데이트 및 삭제) 클라이언트를 초기화합니다.

    자습서 Notebook은 이 현재 작업 영역에서 실행됩니다.

    ### Initialize the MLClient of this project workspace
    import os
    from azure.ai.ml import MLClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    project_ws_sub_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    project_ws_rg = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    project_ws_name = os.environ["AZUREML_ARM_WORKSPACE_NAME"]
    
    # connect to the project workspace
    ws_client = MLClient(
        AzureMLOnBehalfOfCredential(), project_ws_sub_id, project_ws_rg, project_ws_name
    )
  2. 기능 저장소 변수를 초기화합니다.

    첫 번째 자습서에서 만든 내용을 반영하려면 값을 업데이트 featurestore_name 해야 합니다.

    from azure.ai.ml import MLClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    # feature store
    featurestore_name = (
        "<FEATURESTORE_NAME>"  # use the same name from part #1 of the tutorial
    )
    featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    
    # feature store ml client
    fs_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        featurestore_subscription_id,
        featurestore_resource_group_name,
        featurestore_name,
    )
  3. 기능 저장소 SDK 클라이언트를 초기화합니다.

    # feature store client
    from azureml.featurestore import FeatureStoreClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    featurestore = FeatureStoreClient(
        credential=AzureMLOnBehalfOfCredential(),
        subscription_id=featurestore_subscription_id,
        resource_group_name=featurestore_resource_group_name,
        name=featurestore_name,
    )

트랜잭션 기능 집합에 대한 되풀이 구체화 사용

두 번째 자습서에서는 구체화를 사용하도록 설정하고 transactions 기능 집합에 대해 백필을 수행했습니다. 백필은 기능 값을 계산하고 구체화 저장소에 배치하는 주문형 일회성 작업입니다.

프로덕션에서 모델 유추를 처리하려면 되풀이 구체화 작업을 설정하여 구체화 저장소를 최신 상태로 유지해야 할 수 있습니다. 이러한 작업은 사용자가 정의한 일정에 따라 실행됩니다. 되풀이 작업 일정은 다음과 같이 작동합니다.

  • 간격 및 빈도 값은 창을 정의합니다. 예를 들어, 다음 값은 3시간 범위를 정의합니다.

    • interval = 3
    • frequency = Hour
  • 첫 번째 창은 RecurrenceTrigger에 정의된 start_time 값에서 시작합니다.

  • 첫 번째 되풀이 작업은 업데이트 시간 이후 다음 창이 시작될 때 제출됩니다.

  • 나중에 되풀이되는 작업은 첫 번째 작업 이후 모든 창에서 제출됩니다.

이전 자습서에서 설명한 대로 데이터가 구체화된 후(백필 또는 되풀이 구체화) 기능 검색에서는 기본적으로 구체화된 데이터를 사용합니다.

from datetime import datetime
from azure.ai.ml.entities import RecurrenceTrigger

transactions_fset_config = fs_client.feature_sets.get(name="transactions", version="1")

# create a schedule that runs the materialization job every 3 hours
transactions_fset_config.materialization_settings.schedule = RecurrenceTrigger(
    interval=3, frequency="Hour", start_time=datetime(2023, 4, 15, 0, 4, 10, 0)
)

fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)

print(fs_poller.result())

(선택 사항) 기능 집합 자산에 대한 YAML 파일을 저장합니다.

업데이트된 설정을 사용하여 YAML 파일을 저장합니다.

## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")

일괄 처리 유추 파이프라인 실행

일괄 처리 유추에는 다음 단계가 있습니다.

  1. 학습 파이프라인에서 사용한 것과 동일한 기본 제공 기능 검색 구성 요소를 기능 검색에 사용합니다(세 번째 자습서에서 설명). 파이프라인 학습의 경우 기능 검색 사양을 구성 요소 입력으로 제공했습니다. 일괄 처리 유추의 경우 등록된 모델을 입력으로 전달합니다. 구성 요소는 모델 아티팩트에서 기능 검색 사양을 찾습니다.

    또한 학습을 위해 관찰 데이터에는 대상 변수가 있었습니다. 그러나 일괄 처리유추 관찰 데이터에는 대상 변수가 없습니다. 기능 검색 단계에서는 관찰 데이터를 기능과 결합하고 일괄 처리 유추를 위한 데이터를 출력합니다.

  2. 파이프라인은 이전 단계의 일괄 처리 유추 입력 데이터를 사용하고, 모델에 대해 유추를 실행하고, 예측 값을 출력으로 추가합니다.

    참고 항목

    이 예에서는 일괄 처리 유추를 위해 작업을 사용합니다. Azure Machine Learning에서 일괄 처리 엔드포인트를 사용할 수도 있습니다.

    from azure.ai.ml import load_job  # will be used later
    
    # set the batch inference  pipeline path
    batch_inference_pipeline_path = (
        root_dir + "/project/fraud_model/pipelines/batch_inference_pipeline.yaml"
    )
    batch_inference_pipeline_definition = load_job(source=batch_inference_pipeline_path)
    
    # run the training pipeline
    batch_inference_pipeline_job = ws_client.jobs.create_or_update(
        batch_inference_pipeline_definition
    )
    
    # stream the run logs
    ws_client.jobs.stream(batch_inference_pipeline_job.name)

일괄 처리 유추를 위해 출력 데이터 검사

파이프라인 보기에서:

  1. outputs 카드에서 inference_step를 선택합니다.

  2. Data 필드 값을 복사합니다. azureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1과 같이 표시됩니다.

  3. 별도의 이름 및 버전 값을 사용하여 다음 셀에 Data 필드 값을 붙여넣습니다. 마지막 문자는 버전이며 앞에 콜론(:)이 옵니다.

  4. 일괄 처리 유추 파이프라인이 생성한 predict_is_fraud 열을 확인합니다.

    일괄 처리 유추 파이프라인(/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) 출력에서 시스템은 GUID를 이름 값 및 1 버전 값으로 사용하여 추적되지 않은 데이터 자산을 만들었습니다. 이 경우는 값을 제공하지 않았거나 값을 제공하지 name 않았기 때문에 발생합니다inference_step.outputs version 이 셀에서는 자산의 데이터 경로를 파생시킨 다음 표시합니다.

    inf_data_output = ws_client.data.get(
        name="azureml_1c106662-aa5e-4354-b5f9-57c1b0fdb3a7_output_data_data_with_prediction",
        version="1",
    )
    inf_output_df = spark.read.parquet(inf_data_output.path + "data/*.parquet")
    display(inf_output_df.head(5))

정리

시리즈의 다섯 번째 자습서에서는 리소스를 삭제하는 방법을 설명합니다.

다음 단계