

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# MLflow를 환경과 통합
<a name="mlflow-track-experiments"></a>

다음 페이지에서는 개발 환경 내에서 MLflow SDK 및 AWS MLflow 플러그인을 시작하는 방법을 설명합니다. 여기에는 Studio 또는 Studio Classic 내의 로컬 IDE 또는 Jupyter Notebook 환경이 포함될 수 있습니다.

Amazon SageMaker AI는 MLflow 플러그인을 사용하여 MLflow Python 클라이언트의 동작을 사용자 지정하고 AWS 도구를 통합합니다. AWS MLflow 플러그인은 [AWS 서명 버전 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)를 사용하여 MLflow로 수행된 API 호출을 인증합니다. AWS MLflow 플러그인을 사용하면 추적 서버 ARN을 사용하여 MLflow 추적 서버에 연결할 수 있습니다. 플러그인에 대한 자세한 내용은 [AWS MLflow 플러그인](https://pypi.org/project/sagemaker-mlflow/) 및 [MLflow 플러그인](https://mlflow.org/docs/latest/plugins.html)을 참조하세요.

**중요**  
개발 환경 내의 사용자 IAM 권한은 제공된 예제를 성공적으로 실행하려면 관련 MLflow API 작업에 액세스할 수 있어야 합니다. 자세한 내용은 [MLflow에 대한 IAM 권한을 설정합니다.](mlflow-create-tracking-server-iam.md) 섹션을 참조하세요.

MLflow SDK 사용에 대한 자세한 내용은 MLflow 설명서의 [Python API](https://mlflow.org/docs/2.13.2/python_api/index.html)를 참조하세요.

## MLflow 및 AWS MLflow 플러그인 설치
<a name="mlflow-track-experiments-install-plugin"></a>

개발 환경 내에 MLflow와 AWS MLflow 플러그인을 모두 설치합니다.

```
pip install sagemaker-mlflow
```

MLflow 클라이언트와 추적 서버 간의 호환성을 확보하려면 추적 서버 버전에 따라 해당 MLflow 버전을 사용합니다.
+ 서버 2.13.x를 추적하려면 `mlflow==2.13.2` 버전을 사용합니다.
+ 서버 2.16.x를 추적하려면 `mlflow==2.16.2` 버전을 사용합니다.
+ 서버 3.0.x를 추적하려면 `mlflow==3.0.0` 버전을 사용합니다.

SageMaker AI에서 사용할 수 있는 MLflow 버전을 확인하려면 [서버 버전 추적](mlflow.md#mlflow-create-tracking-server-versions) 섹션을 참조하세요.

## MLflow 추적 서버에 연결
<a name="mlflow-track-experiments-tracking-server-connect"></a>

`[mlflow.set\$1tracking\$1uri](https://mlflow.org/docs/2.13.2/python_api/mlflow.html#mlflow.set_tracking_uri)`를 사용하여 ARN으로 개발 환경에서 추적 서버에 연결합니다.

```
import mlflow

arn = "YOUR-TRACKING-SERVER-ARN"

mlflow.set_tracking_uri(arn)
```

# 훈련 중 지표, 파라미터 및 MLflow 모델 로깅
<a name="mlflow-track-experiments-log-metrics"></a>

MLflow 추적 서버에 연결한 후 MLflow SDK를 사용하여 지표, 파라미터 및 MLflow 모델을 로깅할 수 있습니다.

## 훈련 지표 로깅
<a name="mlflow-track-experiments-log-metrics-example"></a>

MLflow 훈련 실행 `mlflow.log_metric` 내에서 를 사용하여 지표를 추적합니다. MLflow로 지표를 기록하는 방법에 대한 자세한 내용은 `[mlflow.log\$1metric](https://mlflow.org/docs/2.13.2/python_api/mlflow.html#mlflow.log_metric)` 섹션을 참조하세요.

```
with mlflow.start_run():
    mlflow.log_metric("foo", 1)
    
print(mlflow.search_runs())
```

이 스크립트는 실험 실행을 생성하고 다음과 유사한 출력을 인쇄해야 합니다.

```
run_id experiment_id status artifact_uri ... tags.mlflow.source.name tags.mlflow.user tags.mlflow.source.type tags.mlflow.runName
0 607eb5c558c148dea176d8929bd44869 0 FINISHED s3://dddd/0/607eb5c558c148dea176d8929bd44869/a... ... file.py user-id LOCAL experiment-code-name
```

MLflow UI 내에서 이 예제는 다음과 비슷합니다.

![\[최상위 MLflow 실험 메뉴에 표시된 실험입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-ui-experiments.png)


실행 세부 정보를 보려면 **실행 이름**을 선택합니다.

![\[MLflow UI의 실험 실행 페이지에 표시되는 실험 파라미터입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-ui-foo.png)


## 로그 파라미터 및 모델
<a name="mlflow-track-experiments-log-params-models"></a>

**참고**  
다음 예제에서는 환경에 `s3:PutObject` 권한이 있어야 합니다. 이 권한은 MLflow SDK 사용자가 AWS 계정에 로그인하거나 연동할 때 수임하는 IAM 역할과 연결되어야 합니다. 자세한 내용은 [사용자 및 역할 정책 예제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html) 섹션을 참조하세요.

다음 예제에서는 SKLearn을 사용하여 기본 모델 훈련 워크플로를 안내하고 MLflow 실험 실행에서 해당 모델을 추적하는 방법을 보여줍니다. 이 예제에서는 파라미터, 지표 및 모델 아티팩트를 기록합니다.

```
import mlflow

from mlflow.models import infer_signature

import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# This is the ARN of the MLflow Tracking Server you created
mlflow.set_tracking_uri(your-tracking-server-arn)
mlflow.set_experiment("some-experiment")

# Load the Iris dataset
X, y = datasets.load_iris(return_X_y=True)

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Define the model hyperparameters
params = {"solver": "lbfgs", "max_iter": 1000, "multi_class": "auto", "random_state": 8888}

# Train the model
lr = LogisticRegression(**params)
lr.fit(X_train, y_train)

# Predict on the test set
y_pred = lr.predict(X_test)

# Calculate accuracy as a target loss metric
accuracy = accuracy_score(y_test, y_pred)

# Start an MLflow run and log parameters, metrics, and model artifacts
with mlflow.start_run():
    # Log the hyperparameters
    mlflow.log_params(params)

    # Log the loss metric
    mlflow.log_metric("accuracy", accuracy)

    # Set a tag that we can use to remind ourselves what this run was for
    mlflow.set_tag("Training Info", "Basic LR model for iris data")

    # Infer the model signature
    signature = infer_signature(X_train, lr.predict(X_train))

    # Log the model
    model_info = mlflow.sklearn.log_model(
        sk_model=lr,
        name="iris_model", # Changed from artifact_path to name for MLflow 3.0
        signature=signature,
        input_example=X_train,
        registered_model_name="tracking-quickstart",
    )
```

MLflow UI 내에서 왼쪽 탐색 창에서 실험 이름을 선택하여 연결된 모든 실행을 탐색합니다. 각 실행에 대한 자세한 내용을 보려면 **실행 이름**을 선택합니다. 이 예제에서는 이 실행에 대한 실험 실행 페이지가 다음과 비슷해야 합니다.

![\[MLflow UI에서 실험 실행에 대해 추적된 파라미터입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-ui-parameters.png)


이 예제에서는 로지스틱 회귀 모델을 기록합니다. MLflow UI 내에는 로깅된 모델 아티팩트도 표시됩니다.

![\[MLflow UI에서 실험 실행에 대해 추적된 모델 아티팩트입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-ui-model-artifacts.png)


# SageMaker AI 모델 레지스트리에 SageMaker AI 모델 자동 등록
<a name="mlflow-track-experiments-model-registration"></a>

MLflow 모델을 로깅하고 Python SDK를 사용하거나 MLflow UI를 통해 직접 SageMaker 모델 레지스트리에 자동으로 등록할 수 있습니다.

**참고**  
모델 이름에 공백을 사용하지 마세요. MLflow는 공백이 있는 모델 이름을 지원하지만 SageMaker AI 모델 패키지는 이를 지원하지 않습니다. 모델 이름에 공백을 사용하면 자동 등록 프로세스가 실패합니다.

## SageMaker Python SDK를 사용하여 모델 등록하기
<a name="mlflow-track-experiments-model-registration-sdk"></a>

MLflow 클라이언트 내에서 `create_registered_model`을 사용하여 선택한 기존 MLflow 모델에 해당하는 모델 패키지 그룹을 SageMaker AI에서 자동으로 만듭니다.

```
import mlflow 
from mlflow import MlflowClient

mlflow.set_tracking_uri(arn)

client = MlflowClient()

mlflow_model_name = 'AutoRegisteredModel'
client.create_registered_model(mlflow_model_name, tags={"key1": "value1"})
```

모델 훈련 중에 SageMaker 모델 레지스트리에 모델을 자동으로 등록하는 데 `mlflow.register_model()`를 사용합니다. MLflow 모델을 등록할 때 해당 모델 패키지 그룹 및 모델 패키지 버전이 SageMaker AI에 만들어집니다.

```
import mlflow.sklearn
from mlflow.models import infer_signature
from sklearn.datasets import make_regression
from sklearn.ensemble import RandomForestRegressor

mlflow.set_tracking_uri(arn)
params = {"n_estimators": 3, "random_state": 42}
X, y = make_regression(n_features=4, n_informative=2, random_state=0, shuffle=False)

# Log MLflow entities
with mlflow.start_run() as run:
    rfr = RandomForestRegressor(**params).fit(X, y)
    signature = infer_signature(X, rfr.predict(X))
    mlflow.log_params(params)
    mlflow.sklearn.log_model(rfr, artifact_path="sklearn-model", signature=signature)

model_uri = f"runs:/{run.info.run_id}/sklearn-model"
mv = mlflow.register_model(model_uri, "RandomForestRegressionModel")

print(f"Name: {mv.name}")
print(f"Version: {mv.version}")
```

## MLflow UI를 사용하여 모델 등록
<a name="mlflow-track-experiments-model-registration-ui"></a>

또는 MLflow UI에서 직접 SageMaker 모델 레지스트리에 모델을 등록할 수 있습니다. MLflow UI의 **모델** 메뉴에서 **모델 생성**을 선택합니다. 이러한 방식으로 새로 생성된 모든 모델은 SageMaker 모델 레지스트리에 추가됩니다.

![\[MLflow UI 내에서 모델 레지스트리 생성.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-ui-register-model.png)


실험 추적 중에 모델을 로깅한 후 MLflow UI의 실행 페이지로 이동합니다. **아티팩트** 창을 선택하고 오른쪽 상단 모서리에서 **모델 등록**을 선택하여 MLflow 및 SageMaker 모델 레지스트리 모두에 모델 버전을 등록합니다.

![\[MLflow UI 내에서 모델 레지스트리 생성.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-ui-register-model-2.png)


## Studio에서 등록된 모델 보기
<a name="mlflow-track-experiments-model-registration-ui-view"></a>

SageMaker Studio 랜딩 페이지에서 왼쪽 탐색 창의 **모델**을 선택하여 등록된 모델을 확인합니다. Studio를 시작하기에 대한 자세한 내용은 [Amazon SageMaker Studio 시작](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)을 참조하세요.

![\[Studio UI의 SageMaker 모델 레지스트리에 등록된 MLflow 모델입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/mlflow/mlflow-studio-model-registry.png)


# `ModelBuilder`를 사용하여 MLflow 모델 배포
<a name="mlflow-track-experiments-model-deployment"></a>

Amazon SageMaker AI 모델 빌더를 사용하여 MLflow 모델을 SageMaker 엔드포인트에 배포할 수 있습니다. Amazon SageMaker AI 모델 빌더에 대한 자세한 내용은 [Create a model in Amazon SageMaker AI with ModelBuilder](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-modelbuilder-creation.html)를 참조하세요.

`ModelBuilder`는 프레임워크 모델 또는 사용자 지정 추론 사양을 가져와 배포 가능한 모델로 변환하는 Python 클래스입니다. `ModelBuilder` 클래스에 대한 자세한 내용은 [ModelBuilder](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.builder.model_builder.ModelBuilder)를 참조하세요.

`ModelBuilder`를 사용하여 MLflow 모델을 배포하려면 `model_metadata["MLFLOW_MODEL_PATH"]` 속성에서 MLflow 아티팩트에 대한 경로를 제공합니다. 유효한 모델 경로 입력 형식에 대한 자세한 내용은 다음을 참조하세요.

**참고**  
MLflow 실행 ID 또는 MLflow 모델 레지스트리 경로 형식으로 모델 아티팩트 경로를 제공하는 경우 `model_metadata["MLFLOW_TRACKING_ARN"]` 속성을 통해 추적 서버 ARN도 지정해야 합니다.
+ [`model_metadata`에서 ARN이 필요한 모델 경로](#mlflow-track-experiments-model-deployment-with-arn)
+ [`model_metadata`에서 ARN이 필요하지 않은 모델 경로](#mlflow-track-experiments-model-deployment-without-arn)

## `model_metadata`에서 ARN이 필요한 모델 경로
<a name="mlflow-track-experiments-model-deployment-with-arn"></a>

다음 모델 경로에서는 배포를 위해 `model_metadata`에서 ARN을 지정해야 합니다.
+ MLflow [실행 ID:](https://mlflow.org/docs/latest/python_api/mlflow.entities.html?highlight=mlflow%20info#mlflow.entities.RunInfo.run_id) `runs:/aloy-run-id/run-relative/path/to/model`
+ MLflow [모델 레지스트리 경로](https://mlflow.org/docs/latest/model-registry.html#find-registered-models): `models:/model-name/model-version`

## `model_metadata`에서 ARN이 필요하지 않은 모델 경로
<a name="mlflow-track-experiments-model-deployment-without-arn"></a>

다음 모델 경로는 배포를 위해 `model_metadata`에서 ARN을 지정할 필요가 없습니다.
+ 로컬 모델 경로: `/Users/me/path/to/local/model`
+ Amazon S3 모델 경로: `s3://amzn-s3-demo-bucket/path/to/model`
+ 모델 패키지 ARN: `arn:aws:sagemaker:region:account-id:mlflow-tracking-server/tracking-server-name`

MLflow 모델 배포가 Amazon SageMaker AI에서 작동하는 방식에 대한 자세한 내용은 MLflow 설명서에 나와 있는 [Deploy MLflow Model to Amazon SageMaker AI](https://mlflow.org/docs/latest/deployment/deploy-model-to-sagemaker.html)를 참조하세요.

Amazon S3 경로를 사용하는 경우 다음 명령을 사용하여 등록된 모델의 경로를 찾을 수 있습니다.

```
registered_model = client.get_registered_model(name='AutoRegisteredModel')
source_path = registered_model.latest_versions[0].source
```

다음 샘플은 `ModelBuilder` 및 MLflow 모델 레지스트리 경로를 사용하여 MLflow 모델을 배포하는 방법에 대한 개요입니다. 이 샘플은 MLflow 모델 레지스트리 경로의 형태로 모델 아티팩트 경로를 제공하기 때문에 `ModelBuilder`에 대한 호출은 `model_metadata["MLFLOW_TRACKING_ARN"]` 속성을 통해 추적 서버 ARN도 지정해야 합니다.

**중요**  
`ModelBuilder`를 사용하려면 SageMaker Python SDK 버전 [2.224.0](https://pypi.org/project/sagemaker/2.224.0/) 이상을 사용해야 합니다.

**참고**  
다음 코드 예제를 참조하세요. 등록된 MLflow 모델을 배포하는 방법을 보여주는 엔드 투 엔드 예제는 [Jupyter 노트북 예제를 사용한 MLflow 자습서](mlflow-tutorials.md) 섹션을 참조하세요.

```
from sagemaker.serve import ModelBuilder
from sagemaker.serve.mode.function_pointers import Mode
from sagemaker.serve import SchemaBuilder

my_schema = SchemaBuilder(
    sample_input=sample_input, 
    sample_output=sample_output
)

model_builder = ModelBuilder(
    mode=Mode.SAGEMAKER_ENDPOINT,
    schema_builder=my_schema,
    role_arn="Your-service-role-ARN",
    model_metadata={
        # both model path and tracking server ARN are required if you use an mlflow run ID or mlflow model registry path as input
        "MLFLOW_MODEL_PATH": "models:/sklearn-model/1"
        "MLFLOW_TRACKING_ARN": "arn:aws:sagemaker:region:account-id:mlflow-tracking-server/tracking-server-name"
    }
)
model = model_builder.build()
predictor = model.deploy( initial_instance_count=1, instance_type="ml.c6i.xlarge" )
```

`ModelBuilder`를 사용하여 배포된 MLflow 모델에 대한 [계보 추적](https://docs.aws.amazon.com/sagemaker/latest/dg/lineage-tracking.html)을 유지하려면 다음 IAM 권한이 있어야합니다.
+ `sagemaker:CreateArtifact`
+ `sagemaker:ListArtifacts`
+ `sagemaker:AddAssociation`
+ `sagemaker:DescribeMLflowTrackingServer`

**중요**  
계보 추적은 선택 사항입니다. 계보 추적과 관련된 권한 없이 배포가 성공합니다. 구성된 권한이 없는 경우 `model.deploy()`를 호출할 때 계보 추적 권한 오류가 표시됩니다. 그러나 엔드포인트 배포는 여전히 성공하며 모델 엔드포인트와 직접 상호 작용할 수 있습니다. 위 권한이 구성된 경우 계보 추적 정보가 자동으로 생성되고 저장됩니다.

자세한 정보와 엔드 투 엔드 예는 [Jupyter 노트북 예제를 사용한 MLflow 자습서](mlflow-tutorials.md) 섹션을 참조하세요.