다음을 통해 공유


MLflow 로깅된 모델을 사용하여 모델 추적 및 비교

MLflow 기록 모델은 수명 주기 동안 모델의 진행률을 추적하는 데 도움이 됩니다. 모델을 학습할 때 mlflow.<model-flavor>.log_model()를 사용하여 고유 ID를 통해 모든 중요한 정보를 묶는 LoggedModel를 만듭니다. 이 기능을 LoggedModels활용하려면 MLflow 3을 시작합니다.

GenAI 애플리케이션의 LoggedModels 경우 git 커밋 또는 매개 변수 집합을 추적 및 메트릭에 연결할 수 있는 전용 개체로 캡처하도록 만들 수 있습니다. 딥 러닝과 고전적인 머신러닝에서는 MLflow 실행 결과로 LoggedModels를 생성합니다. 이러한 MLflow 실행은 모델 코드를 실행하는 작업으로 간주할 수 있는 MLflow의 기존 개념입니다. 학습 실행은 모델을 출력으로 생성하고, 평가 실행은 기존 모델을 입력으로 사용하여 모델의 성능을 평가하는 데 사용할 수 있는 메트릭 및 기타 정보를 생성합니다.

개체는 LoggedModel 모델의 수명 주기 내내 다양한 환경에서 유지되며 메타데이터, 메트릭, 매개 변수 및 모델을 생성하는 데 사용되는 코드와 같은 아티팩트에 대한 링크를 포함합니다. 기록된 모델 추적을 사용하면 서로 모델을 비교하고, 가장 성능이 좋은 모델을 찾고, 디버깅 중에 정보를 추적할 수 있습니다.

또한 기록된 모델을 Unity 카탈로그 모델 레지스트리에 등록하여 모든 MLflow 실험 및 작업 영역의 모델에 대한 정보를 단일 위치에서 사용할 수 있습니다. 자세한 내용은 MLflow 3의 모델 레지스트리 개선 사항을 참조하세요.

Gen AI, 딥 러닝 및 기존 ML에 대한 모델 추적 흐름입니다.

Gen AI 및 딥 러닝 모델에 대한 추적 개선

생성 AI 및 딥 러닝 워크플로는 특히 로깅된 모델이 제공하는 세분화된 추적을 활용합니다.

Gen AI - 통합 평가 및 추적 데이터:

  • Gen AI 모델은 평가 및 배포 중에 검토자 피드백 데이터 및 추적과 같은 추가 메트릭을 생성합니다.
  • LoggedModel 엔터티를 사용하면 단일 인터페이스를 사용하여 모델에서 생성된 모든 정보를 쿼리할 수 있습니다.

딥 러닝 - 효율적인 검사점 관리:

  • 딥 러닝 학습은 학습 중 특정 지점에서 모델 상태의 스냅샷인 여러 검사점을 만듭니다.
  • MLflow는 모델의 메트릭 및 성능 데이터를 포함하는 각 검사점마다 별도의 LoggedModel 항목을 만듭니다. 이렇게 하면 검사점을 비교하고 평가하여 가장 성능이 뛰어난 모델을 효율적으로 식별할 수 있습니다.

기록된 모델 만들기

로깅된 모델을 만들려면 기존 MLflow 워크로드와 동일한 log_model() API를 사용합니다. 다음 코드 조각에서는 Gen AI, 딥 러닝 및 기존 ML 워크플로에 대해 기록된 모델을 만드는 방법을 보여 줍니다.

실행 가능한 전체 Notebook 예제는 예제 Notebook을 참조하세요.

Gen AI

다음 코드 조각은 LangChain 에이전트를 기록하는 방법을 보여줍니다. 각기 다른 유형의 에이전트를 위해서는 log_model() 방법을 사용하세요.

# Log the chain with MLflow, specifying its parameters
# As a new feature, the LoggedModel entity is linked to its name and params
model_info = mlflow.langchain.log_model(
  lc_model=chain,
  name="basic_chain",
  params={
    "temperature": 0.1,
    "max_tokens": 2000,
    "prompt_template": str(prompt)
  },
  model_type="agent",
  input_example={"messages": "What is MLflow?"},
)

# Inspect the LoggedModel and its properties
logged_model = mlflow.get_logged_model(model_info.model_id)
print(logged_model.model_id, logged_model.params)

평가 작업을 시작하고 model_id에 대한 고유 LoggedModel를 제공하여 메트릭을 기록된 모델에 연결합니다.

# Start a run to represent the evaluation job
with mlflow.start_run() as evaluation_run:
  eval_dataset: mlflow.entities.Dataset = mlflow.data.from_pandas(
    df=eval_df,
    name="eval_dataset",
  )
  # Run the agent evaluation
  result = mlflow.evaluate(
    model=f"models:/{logged_model.model_id}",
    data=eval_dataset,
    model_type="databricks-agent"
  )
  # Log evaluation metrics and associate with agent
  mlflow.log_metrics(
    metrics=result.metrics,
    dataset=eval_dataset,
    # Specify the ID of the agent logged above
    model_id=logged_model.model_id
  )

딥 러닝

다음 코드 조각은 딥 러닝 학습 중에 기록된 모델을 만드는 방법을 보여 줍니다. MLflow 모델의 특정 버전에 log_model() 메서드를 사용하세요.

# Start a run to represent the training job
with mlflow.start_run():
  # Load the training dataset with MLflow. We will link training metrics to this dataset.
  train_dataset: Dataset = mlflow.data.from_pandas(train_df, name="train")
  X_train, y_train = prepare_data(train_dataset.df)

  criterion = nn.CrossEntropyLoss()
  optimizer = torch.optim.Adam(scripted_model.parameters(), lr=0.01)

  for epoch in range(101):
      X_train, y_train = X_train.to(device), y_train.to(device)
      out = scripted_model(X_train)
      loss = criterion(out, y_train)
      optimizer.zero_grad()
      loss.backward()
      optimizer.step()

      # Obtain input and output examples for MLflow Model signature creation
      with torch.no_grad():
          input_example = X_train[:1]
          output_example = scripted_model(input_example)

      # Log a checkpoint with metrics every 10 epochs
      if epoch % 10 == 0:
          # Each newly created LoggedModel checkpoint is linked with its
          # name, params, and step
          model_info = mlflow.pytorch.log_model(
              pytorch_model=scripted_model,
              name=f"torch-iris-{epoch}",
              params={
                  "n_layers": 3,
                  "activation": "ReLU",
                  "criterion": "CrossEntropyLoss",
                  "optimizer": "Adam"
              },
              step=epoch,
              signature=mlflow.models.infer_signature(
                  model_input=input_example.cpu().numpy(),
                  model_output=output_example.cpu().numpy(),
              ),
              input_example=X_train.cpu().numpy(),
          )
          # Log metric on training dataset at step and link to LoggedModel
          mlflow.log_metric(
              key="accuracy",
              value=compute_accuracy(scripted_model, X_train, y_train),
              step=epoch,
              model_id=model_info.model_id,
              dataset=train_dataset
          )

기존 ML

다음 코드 조각은 sklearn 모델을 로그로 작성하고 메트릭을 Logged Model에 연결하는 방법을 보여 줍니다. MLflow 모델의 특정 버전에 log_model() 메서드를 사용하세요.

## Log the model
model_info = mlflow.sklearn.log_model(
  sk_model=lr,
  name="elasticnet",
  params={
    "alpha": 0.5,
    "l1_ratio": 0.5,
  },
  input_example = train_x
)

# Inspect the LoggedModel and its properties
logged_model = mlflow.get_logged_model(model_info.model_id)
print(logged_model.model_id, logged_model.params)

# Evaluate the model on the training dataset and log metrics
# These metrics are now linked to the LoggedModel entity
predictions = lr.predict(train_x)
(rmse, mae, r2) = compute_metrics(train_y, predictions)
mlflow.log_metrics(
  metrics={
    "rmse": rmse,
    "r2": r2,
    "mae": mae,
  },
  model_id=logged_model.model_id,
  dataset=train_dataset
)

예제 노트북

LoggedModels 사용 방법을 보여주는 예제 노트북을 보려면 다음 페이지를 참조하세요.

모델 보기 및 진행률 추적

작업 영역 UI에서 기록된 모델을 볼 수 있습니다.

  1. 작업 영역의 실험 탭으로 이동합니다.
  2. 실험을 선택합니다. 그런 다음 모델 탭을 선택합니다.

이 페이지에는 해당 메트릭, 매개 변수 및 아티팩트와 함께 실험과 연결된 모든 기록된 모델이 포함되어 있습니다.

모델 추적 UI.

차트를 생성하여 실행 간에 메트릭을 추적할 수 있습니다.

모델 추적 UI 메트릭 차트.

기록된 모델 검색 및 필터링

모델 탭에서 특성, 매개 변수, 태그 및 메트릭에 따라 기록된 모델을 검색하고 필터링할 수 있습니다.

모델 추적 UI에서 기록된 모델을 검색합니다.

데이터 세트별 성능에 따라 메트릭을 필터링할 수 있으며 지정된 데이터 세트에서 일치하는 메트릭 값이 있는 모델만 반환됩니다. 메트릭 필터 없이 데이터 세트 필터를 제공하는 경우 해당 데이터 세트에 대한 메트릭 이 있는 모델이 반환됩니다.

다음 특성에 따라 필터링할 수 있습니다.

  • model_id
  • model_name
  • status
  • artifact_uri
  • creation_time (숫자)
  • last_updated_time (숫자)

다음 연산자를 사용하여 문자열과 유사한 특성, 매개 변수 및 태그를 검색하고 필터링합니다.

  • =, !=, INNOT IN

다음 비교 연산자를 사용하여 숫자 특성 및 메트릭을 검색하고 필터링합니다.

  • =, !=, >, <, >=<=

프로그래밍 방식으로 기록된 모델 검색

MLflow API를 사용하여 기록된 모델을 검색할 수 있습니다.

## Get a Logged Model using a model_id
mlflow.get_logged_model(model_id = <my-model-id>)

## Get all Logged Models that you have access to
mlflow.search_logged_models()

## Get all Logged Models with a specific name
mlflow.search_logged_models(
  filter_string = "model_name = <my-model-name>"
)

## Get all Logged Models created within a certain time range
mlflow.search_logged_models(
  filter_string = "creation_time >= <creation_time_start> AND creation_time <= <creation_time_end>"
)

## Get all Logged Models with a specific param value
mlflow.search_logged_models(
  filter_string = "params.<param_name> = <param_value_1>"
)

## Get all Logged Models with specific tag values
mlflow.search_logged_models(
  filter_string = "tags.<tag_name> IN (<tag_value_1>, <tag_value_2>)"
)

## Get all Logged Models greater than a specific metric value on a dataset, then order by that metric value
mlflow.search_logged_models(
  filter_string = "metrics.<metric_name> >= <metric_value>",
  datasets = [
    {"dataset_name": <dataset_name>, "dataset_digest": <dataset_digest>}
  ],
  order_by = [
    {"field_name": metrics.<metric_name>, "dataset_name": <dataset_name>,"dataset_digest": <dataset_digest>}
  ]
)

자세한 내용 및 추가 검색 매개 변수는 MLflow 3 API 설명서를 참조하세요.

모델 입력 및 출력으로 실행 검색

모델 ID별로 실행을 검색하여 로그된 모델이 입력 또는 출력으로 있는 모든 실행을 반환할 수 있습니다. 필터 문자열 구문에 대한 자세한 내용은 실행에 대한 필터링을 참조하세요.

모델 추적 UI 검색 모델 ID별 로깅된 모델

MLflow API를 사용하여 실행을 검색할 수 있습니다.

## Get all Runs with a particular model as an input or output by model id
mlflow.search_runs(filter_string = "models.model_id = <my-model-id>")

다음 단계

MLflow 3의 다른 새로운 기능에 대한 자세한 내용은 다음 문서를 참조하세요.