Share via


MLflow 실행을 사용하여 학습 코드 관리

이 문서에서는 기계 학습 학습을 관리하기 위한 MLflow 실행에 대해 설명합니다. 또한 실험에서 실행을 관리하고 비교하는 방법에 대한 지침도 포함되어 있습니다.

MLflow 실행은 모델 코드의 단일 실행에 해당합니다. 각 실행은 다음 정보를 기록합니다.

  • 원본: 실행을 시작한 Notebook의 이름 또는 실행을 위한 프로젝트 이름 및 진입점입니다.
    • 버전: Notebook이 Databricks Git 폴더저장되거나 MLflow 프로젝트에서 실행되는 경우 Git 커밋 해시입니다. 그렇지 않으면 Notebook 수정 버전입니다.
    • 시작 및 종료 시간: 실행의 시작 및 종료 시간입니다.
    • 매개 변수: 키-값 쌍으로 저장된 모델 매개 변수입니다. 키와 값은 모두 문자열입니다.
    • 메트릭: 키-값 쌍으로 저장된 모델 평가 메트릭입니다. 값은 숫자입니다. 각 메트릭은 실행 과정 동안 업데이트될 수 있으며(예: 모델의 손실 함수가 수렴되는 방식을 추적하기 위해) MLflow는 메트릭의 기록을 기록하고 시각화할 수 있습니다.
    • 태그: 키-값 쌍으로 저장된 메타데이터를 실행합니다. 실행 중 및 완료 후에 태그를 업데이트할 수 있습니다. 키와 값은 모두 문자열입니다.
    • 아티팩트: 모든 형식의 파일을 출력합니다. 예를 들어 이미지, 모델(예: pickle 형식의 scikit-learn 모델) 및 데이터 파일(예: Parquet 파일)을 아티팩트로 기록할 수 있습니다.

모든 MLflow 실행은 활성 실험에 기록됩니다. 실험을 활성 실험으로 명시적으로 설정하지 않은 경우 실행이 Notebook 실험에 기록됩니다.

실행 보기

부모 실험 페이지 또는 실행을 만든 Notebook에서 직접 실행에 액세스할 수 있습니다.

실험 페이지의 실행 표에서 실행 시작 시간을 클릭합니다.

Notebook에서 실험 실행 사이드바에서 실행 날짜 및 시간 옆을 클릭합니다 외부 링크 .

실행 화면에는 실행에 사용된 매개 변수, 실행으로 인한 메트릭, 모든 태그 또는 메모가 표시됩니다. 이 실행에 대한 메모, 매개 변수, 메트릭 또는 태그를 표시하려면 레이블 왼쪽을 클릭합니다오른쪽 화살표.

또한 이 화면에서 실행에서 저장된 아티팩트에 액세스할 수 있습니다.

실행 보기

예측을 위한 코드 조각

실행에서 모델을 기록하면 이 페이지의 아티팩트 섹션에 모델이 표시됩니다. 모델을 로드하고 사용하여 Spark 및 pandas DataFrames에서 예측하는 방법을 보여 주는 코드 조각을 표시하려면 모델 이름을 클릭합니다.

코드 조각 예측

실행에 사용된 Notebook 또는 Git 프로젝트 보기

실행을 만든 Notebook 버전을 보려면 다음 단계를 따릅니다.

  • 실험 페이지에서 원본 열의 링크를 클릭합니다.
  • 실행 페이지에서 원본 옆에 있는 링크를 클릭합니다.
  • Notebook의 실험 실행 사이드바에서 해당 실험 실행에 대한 상자에서 전자 필기장 아이콘 전자 필기장 버전 아이콘 을 클릭합니다.

실행과 관련된 Notebook 버전이 실행 날짜와 시간을 표시하는 강조 표시줄과 함께 주 창에 나타납니다.

실행이 Git 프로젝트에서 원격으로 시작된 경우 Git Commit 필드의 링크를 클릭하여 실행에 사용된 프로젝트의 특정 버전을 엽니다. 원본 필드의 링크는 실행에 사용된 Git 프로젝트의 기본 분기를 엽니다.

실행에 태그 추가

태그는 나중에 실행을 검색하기 위해 만들고 사용할 수 있는 키-값 쌍입니다.

  1. 실행 페이지에서 아직 열려 있지 않은 경우 클릭합니다태그 아이콘. 태그 테이블이 나타납니다.

    태그 테이블

  2. 이름 필드를 클릭하고 태그의 키와 값을 입력합니다.

  3. 추가를 클릭합니다.

    태그 추가

실행에 대한 태그 편집 또는 삭제

기존 태그를 편집하거나 삭제하려면 작업 열에 있는 아이콘을 사용합니다.

태그 작업

실행의 소프트웨어 환경을 재현

실행 재현을 클릭하여 실행에 대한 정확한 소프트웨어 환경을 재현할 수 있습니다. 다음 대화 상자가 나타납니다.

실행 재현 대화 상자

기본 설정에서 확인을 클릭하면:

  • Notebook이 대화 상자에 표시된 위치에 복제됩니다.
  • 원래 클러스터가 여전히 존재하는 경우 복제된 Notebook이 원래 클러스터에 연결되고 클러스터가 시작됩니다.
  • 원래 클러스터가 더 이상 존재하지 않으면 설치된 라이브러리를 포함하여 동일한 구성의 새 클러스터가 만들어지고 시작됩니다. Notebook이 새 클러스터에 연결됩니다.

복제된 Notebook에 대해 다른 위치를 선택하고 클러스터 구성 및 설치된 라이브러리를 검사할 수 있습니다.

  • 복제된 Notebook을 저장할 다른 폴더를 선택하려면 폴더 편집을 클릭합니다.
  • 클러스터 사양을 보려면 사양 보기를 클릭합니다. 클러스터가 아닌 Notebook만 복제하려면 이 옵션을 선택 취소합니다.
  • 원래 클러스터에 설치된 라이브러리를 보려면 라이브러리 보기를 클릭합니다. 원래 클러스터와 동일한 라이브러리를 설치하는 데 신경 쓰지 않는다면 이 옵션을 선택 취소합니다.

실행 관리

실행 이름 바꾸기

실행 이름을 바꾸려면 실행 페이지의 오른쪽 위 모서리를 클릭하고 세 개의 단추 아이콘 이름 바꾸기를 선택합니다.

필터 실행

매개 변수 또는 메트릭 값을 기반으로 실행을 검색할 수 있습니다. 태그로 실행을 검색할 수도 있습니다.

  • 매개 변수 및 메트릭 값이 포함된 표현식과 일치하는 실행을 쿼리하려면 쿼리 필드에 쿼리를 입력하고 검색을 클릭합니다. 몇 가지 쿼리 구문 예는 다음과 같습니다.

    metrics.r2 > 0.3

    params.elasticNetParam = 0.5

    params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3

  • 태그로 실행을 검색하려면 tags.<key>="<value>" 형식으로 태그를 입력합니다. 문자열 값은 표시된 대로 따옴표로 묶어야 합니다.

    tags.estimator_name="RandomForestRegressor"

    tags.color="blue" AND tags.size=5

    키와 값 모두 공백을 포함할 수 있습니다. 키에 공백이 포함된 경우 그림과 같이 백틱으로 묶어야 합니다.

    tags.`my custom tag` = "my value"
    

또한 상태(활성 또는 삭제됨) 및 모델 버전이 실행과 연결되었는지 여부에 따라 실행을 필터링할 수 있습니다. 이렇게 하려면 상태시간 생성 드롭다운 메뉴에서 각각 선택합니다.

필터 실행

다운로드 실행

  1. 하나 이상의 실행을 선택합니다.

  2. CSV 다운로드를 클릭합니다. 다음 필드가 포함된 CSV 파일이 다운로드됩니다.

    Run ID,Name,Source Type,Source Name,User,Status,<parameter1>,<parameter2>,...,<metric1>,<metric2>,...
    

실행 삭제

다음 단계에 따라 Databricks Machine Learning UI를 사용하여 실행을 삭제할 수 있습니다.

  1. 실험에서 실행 왼쪽에 있는 확인란을 클릭하여 하나 이상의 실행을 선택합니다.
  2. 삭제를 클릭합니다.
  3. 실행이 부모 실행인 경우 하위 실행도 삭제할지 여부를 결정합니다. 이 옵션은 기본적으로 선택되어 있습니다.
  4. 삭제를 클릭하여 확인합니다. 삭제된 실행은 30일 동안 저장됩니다. 삭제된 실행을 표시하려면 상태 필드에서 삭제됨을 선택합니다.

생성 시간에 따라 대량 삭제 실행

Python을 사용하여 UNIX 타임스탬프 이전에 또는 UNIX 타임스탬프에서 만든 실험의 실행을 대량 삭제할 수 있습니다. Databricks Runtime 14.1 이상을 사용하여 API를 mlflow.delete_runs 호출하여 실행을 삭제하고 삭제된 실행 수를 반환할 수 있습니다.

매개 변수는 mlflow.delete_runs 다음과 같습니다.

  • experiment_id: 삭제할 실행을 포함하는 실험의 ID입니다.
  • max_timestamp_millis: 삭제를 위한 UNIX Epoch 이후의 최대 생성 타임스탬프(밀리초)입니다. 이 타임스탬프 이전 또는 시간에 만든 실행만 삭제됩니다.
  • max_runs:선택적. 삭제할 최대 실행 수를 나타내는 양의 정수입니다. max_runs 허용되는 최대값은 10000입니다. 지정 max_runs 하지 않으면 기본값은 10000입니다.
import mlflow

# Replace <experiment_id>, <max_timestamp_ms>, and <max_runs> with your values.
runs_deleted = mlflow.delete_runs(
  experiment_id=<experiment_id>,
  max_timestamp_millis=<max_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_deleted = mlflow.delete_runs(
  experiment_id="4183847697906956",
  max_timestamp_millis=1711990504000,
  max_runs=10
)

Databricks Runtime 13.3 LTS 이하를 사용하여 Azure Databricks Notebook에서 다음 클라이언트 코드를 실행할 수 있습니다.

from typing import Optional

def delete_runs(experiment_id: str,
                max_timestamp_millis: int,
                max_runs: Optional[int] = None) -> int:
    """
    Bulk delete runs in an experiment that were created prior to or at the specified timestamp.
    Deletes at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to delete.
    :param max_timestamp_millis: The maximum creation timestamp in milliseconds
                                 since the UNIX epoch for deleting runs. Only runs
                                 created prior to or at this timestamp are deleted.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to delete. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs deleted.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request

    json_body = {"experiment_id": experiment_id, "max_timestamp_millis": max_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/delete-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_deleted"]

생성 시간에 따라 실행을 삭제하기 위한 매개 변수 및 반환 값 사양은 Azure Databricks 실험 API 설명서를 참조하세요.

복원 실행

Databricks Machine Learning UI를 사용하여 이전에 삭제된 실행을 복원할 수 있습니다.

  1. 실험 페이지에서 상태 필드에서 삭제됨선택하여 삭제된 실행을 표시합니다.
  2. 실행 왼쪽의 검사 상자를 클릭하여 하나 이상의 실행을 선택합니다.
  3. 복원을 클릭합니다.
  4. 복원을 클릭하여 확인합니다. 복원된 실행을 표시하려면 상태 필드에서 활성을 선택합니다.

삭제 시간에 따라 대량 복원 실행

Python을 사용하여 UNIX 타임스탬프 또는 그 이후에 삭제된 실험의 실행을 대량 복원할 수도 있습니다. Databricks Runtime 14.1 이상을 사용하여 API를 mlflow.restore_runs 호출하여 실행을 복원하고 복원된 실행 수를 반환할 수 있습니다.

매개 변수는 mlflow.restore_runs 다음과 같습니다.

  • experiment_id: 복원할 실행을 포함하는 실험의 ID입니다.
  • min_timestamp_millis: 실행 복원을 위한 UNIX Epoch 이후 최소 삭제 타임스탬프(밀리초)입니다. 이 타임스탬프가 복원된 후 삭제된 실행만 있습니다.
  • max_runs:선택적. 복원할 최대 실행 수를 나타내는 양의 정수입니다. max_runs 허용되는 최대값은 10000입니다. 지정하지 않으면 max_runs 기본값은 10000입니다.
import mlflow

# Replace <experiment_id>, <min_timestamp_ms>, and <max_runs> with your values.
runs_restored = mlflow.restore_runs(
  experiment_id=<experiment_id>,
  min_timestamp_millis=<min_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_restored = mlflow.restore_runs(
  experiment_id="4183847697906956",
  min_timestamp_millis=1711990504000,
  max_runs=10
)

Databricks Runtime 13.3 LTS 이하를 사용하여 Azure Databricks Notebook에서 다음 클라이언트 코드를 실행할 수 있습니다.

from typing import Optional

def restore_runs(experiment_id: str,
                 min_timestamp_millis: int,
                 max_runs: Optional[int] = None) -> int:
    """
    Bulk restore runs in an experiment that were deleted at or after the specified timestamp.
    Restores at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to restore.
    :param min_timestamp_millis: The minimum deletion timestamp in milliseconds
                                 since the UNIX epoch for restoring runs. Only runs
                                 deleted at or after this timestamp are restored.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to restore. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs restored.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request
    json_body = {"experiment_id": experiment_id, "min_timestamp_millis": min_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/restore-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_restored"]

삭제 시간에 따라 실행을 복원하기 위한 매개 변수 및 반환 값 사양은 Azure Databricks 실험 API 설명서를 참조하세요.

실행 비교

단일 실험 또는 여러 실험에서 실행을 비교할 수 있습니다. 실행 비교 페이지에는 선택한 실행에 대한 정보가 그래픽 및 테이블 형식으로 표시됩니다. 실행 결과 및 실행 정보 테이블, 실행 매개 변수 및 메트릭의 시각화를 만들 수도 있습니다.

시각화를 만들려면:

  1. 플롯 형식(병렬 좌표 플롯, 산점도 또는 윤곽선 그림)을 선택합니다.
    1. 병렬 좌표 플롯의 경우 그릴 매개 변수 및 메트릭을 선택합니다. 여기에서 선택한 매개 변수와 메트릭 간의 관계를 식별할 수 있으므로 모델의 하이퍼 매개 변수 튜닝 공간을 더 잘 정의할 수 있습니다.

      실행 페이지 시각화 비교

    2. 산점도 또는 윤곽선 그림의 경우 각 축에 표시할 매개 변수 또는 메트릭을 선택합니다.

매개 변수메트릭 테이블에는 선택한 모든 실행의 실행 매개 변수 및 메트릭이 표시됩니다. 이러한 테이블의 열은 바로 위의 실행 세부 정보 테이블에 의해 식별됩니다. 간단히 하기 위해 토글 차이만 표시 단추하여 선택한 모든 실행에서 동일한 매개 변수 및 메트릭을 숨길 수 있습니다.

실행 페이지 테이블 비교

단일 실험에서 실행 비교

  1. 실험 페이지에서 실행 왼쪽의 확인란을 클릭하여 두 개 이상의 실행을 선택하거나 열 맨 위에 있는 확인란을 선택하여 모든 실행을 선택합니다.
  2. 비교를 클릭합니다. 실행 비교 <N> 화면이 나타납니다.

여러 실험에서 실행 비교

  1. 실험 페이지에서 실험 이름 왼쪽에 있는 상자를 클릭하여 비교할 실험을 선택합니다.
  2. 비교(n)를 클릭합니다(n은 선택한 실험 수). 선택한 실험의 모든 실행을 보여 주는 화면이 나타납니다.
  3. 실행 왼쪽의 확인란을 클릭하여 두 개 이상의 실행을 선택하거나 열 맨 위에 있는 확인란을 선택하여 모든 실행을 선택합니다.
  4. 비교를 클릭합니다. 실행 비교 <N> 화면이 나타납니다.

작업 영역 간에 실행 복사

Databricks 작업 영역으로 또는 Databricks 작업 영역에서 MLflow 실행을 가져오거나 내보내려면 커뮤니티 기반 오픈 소스 프로젝트 MLflow Export-Import를 사용하면 됩니다.