MLflow를 사용하여 데이터를 기록하는 방법. MLOps의 데이터 로깅 마스터링… | 잭 장 | 2025년 1월

MLflow를 사용하여 데이터를 기록하는 방법. MLOps의 데이터 로깅 마스터링… | 잭 장 | 2025년 1월

MLflow 서버를 로컬로 설정하는 것은 간단합니다. 다음 명령을 사용하십시오.

mlflow server --host 127.0.0.1 --port 8080

그런 다음 추적 URI를 설정합니다.

mlflow.set_tracking_uri("http://127.0.0.1:8080")

보다 고급 구성을 보려면 다음을 참조하세요. MLflow 문서.

사진 제공: 로버트 바이 ~에 언스플래시

이 기사에서는 캘리포니아 주택 데이터 세트(CC BY 라이센스)를 사용합니다. 그러나 동일한 원칙을 적용하여 선택한 데이터 세트를 기록하고 추적할 수 있습니다.

캘리포니아 주택 데이터세트에 대한 자세한 내용은 다음을 참조하세요. 이 문서.

mlflow.data.dataset.Dataset

데이터 세트 로깅, 평가 및 검색을 시작하기 전에 MLflow의 데이터 세트 개념을 이해하는 것이 중요합니다. MLflow는 다음을 제공합니다. mlflow.data.dataset.Dataset MLflow Tracking에 사용되는 데이터 세트를 나타내는 개체입니다.

class mlflow.data.dataset.Dataset(source: mlflow.data.dataset_source.DatasetSource, name: Optional[str] = None, digest: Optional[str] = None)

이 객체에는 다음과 같은 주요 속성이 제공됩니다.

  • 필수 매개변수, 원천 (데이터세트의 데이터 소스는 다음과 같습니다. mlflow.data.dataset_source.DatasetSource 물체)
  • 요람 (데이터 세트의 지문) 및 이름 (데이터세트 이름). 매개변수를 통해 설정할 수 있습니다.
  • 개요 그리고 윤곽 데이터 세트의 구조와 통계적 속성을 설명합니다.
  • 데이터 세트에 대한 정보 원천저장 위치와 같은.

다음을 사용하여 데이터세트를 사전으로 쉽게 변환할 수 있습니다. to_dict() 또는 다음을 사용하는 JSON 문자열 to_json().

널리 사용되는 데이터 세트 형식 지원

MLflow를 사용하면 코어를 확장하는 특수 클래스를 통해 다양한 유형의 데이터 세트로 쉽게 작업할 수 있습니다. mlflow.data.dataset.Dataset. 이 문서를 작성할 당시 MLflow에서 지원하는 주목할만한 데이터 세트 클래스 중 일부는 다음과 같습니다.

  • 팬더: mlflow.data.pandas_dataset.PandasDataset
  • 넘파이: mlflow.data.numpy_dataset.NumpyDataset
  • 불꽃: mlflow.data.spark_dataset.SparkDataset
  • 포옹하는 얼굴: mlflow.data.huggingface_dataset.HuggingFaceDataset
  • 텐서플로우: mlflow.data.tensorflow_dataset.TensorFlowDataset
  • 평가 데이터세트: mlflow.data.evaluation_dataset.EvaluationDataset

이 모든 수업에는 편리한 mlflow.data.from_* 데이터 세트를 MLflow에 직접 로드하기 위한 API입니다. 이를 통해 기본 형식에 관계없이 데이터 세트를 쉽게 구성하고 관리할 수 있습니다.

mlflow.data.dataset_source.DatasetSource

그만큼 mlflow.data.dataset.DatasetSource 클래스는 MLflow에서 데이터 세트의 원본을 나타내는 데 사용됩니다. 생성할 때 mlflow.data.dataset.Dataset 객체, source 매개변수는 문자열(예: 파일 경로 또는 URL) 또는 인스턴스로 지정할 수 있습니다. mlflow.data.dataset.DatasetSource 수업.

class mlflow.data.dataset_source.DatasetSource

문자열이 다음과 같이 제공되는 경우 sourceMLflow는 내부적으로 resolve_dataset_source 기능. 이 함수는 미리 정의된 데이터 소스 목록을 반복하고 DatasetSource 가장 적절한 소스 유형을 결정하는 클래스입니다. 그러나 데이터 세트의 소스를 정확하게 해결하는 MLflow의 능력은 제한적입니다. 특히 candidate_sources 인수(잠재적 소스 목록)는 다음과 같이 설정됩니다. None이것이 기본값입니다.

다음과 같은 경우에는 DatasetSource 클래스가 원시 소스를 확인할 수 없으면 MLflow 예외가 발생합니다. 모범 사례를 위해 다음의 인스턴스를 명시적으로 생성하고 사용하는 것이 좋습니다. mlflow.data.dataset.DatasetSource 데이터세트의 출처를 정의할 때 클래스입니다.

  • class HTTPDatasetSource(DatasetSource)
  • class DeltaDatasetSource(DatasetSource)
  • class FileSystemDatasetSource(DatasetSource)
  • class HuggingFaceDatasetSource(DatasetSource)
  • class SparkDatasetSource(DatasetSource)
사진 제공: 클라우디오 블랙 ~에 언스플래시

MLflow에서 데이터 세트를 기록하는 가장 간단한 방법 중 하나는 mlflow.log_input() API. 이를 통해 다음과 호환되는 모든 형식으로 데이터 세트를 기록할 수 있습니다. mlflow.data.dataset.Dataset이는 대규모 실험을 관리할 때 매우 유용할 수 있습니다.

단계별 가이드

먼저 캘리포니아 주택 데이터세트를 가져와서 pandas.DataFrame 더 쉬운 조작을 위해. 여기서는 두 특성 데이터(california_data) 및 대상 데이터(california_target).

california_housing = fetch_california_housing()
california_data: pd.DataFrame = pd.DataFrame(california_housing.data, columns=california_housing.feature_names)
california_target: pd.DataFrame = pd.DataFrame(california_housing.target, columns=['Target'])

california_housing_df: pd.DataFrame = pd.concat([california_data, california_target], axis=1)

의미 있는 메타데이터로 데이터세트를 기록하기 위해 데이터 소스 URL, 데이터세트 이름, 대상 열과 같은 몇 가지 매개변수를 정의합니다. 이는 나중에 데이터 세트를 검색할 때 유용한 컨텍스트를 제공합니다.

좀 더 자세히 들여다보면 fetch_california_housing 소스 코드데이터가 다음에서 유래된 것을 볼 수 있습니다. https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.tgz.

dataset_source_url: str = 'https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.tgz'
dataset_source: DatasetSource = HTTPDatasetSource(url=dataset_source_url)
dataset_name: str = 'California Housing Dataset'
dataset_target: str = 'Target'
dataset_tags = {
'description': california_housing.DESCR,
}

데이터와 메타데이터가 정의되면 pandas.DataFrame 으로 mlflow.data.Dataset 물체.

dataset: PandasDataset = mlflow.data.from_pandas(
df=california_housing_df, source=dataset_source, targets=dataset_target, name=dataset_name
)

print(f'Dataset name: {dataset.name}')
print(f'Dataset digest: {dataset.digest}')
print(f'Dataset source: {dataset.source}')
print(f'Dataset schema: {dataset.schema}')
print(f'Dataset profile: {dataset.profile}')
print(f'Dataset targets: {dataset.targets}')
print(f'Dataset predictions: {dataset.predictions}')
print(dataset.df.head())

예제 출력:

Dataset name: California Housing Dataset
Dataset digest: 55270605
Dataset source:
Dataset schema: ['MedInc': double (required), 'HouseAge': double (required), 'AveRooms': double (required), 'AveBedrms': double (required), 'Population': double (required), 'AveOccup': double (required), 'Latitude': double (required), 'Longitude': double (required), 'Target': double (required)]
Dataset profile: {'num_rows': 20640, 'num_elements': 185760}
Dataset targets: Target
Dataset predictions: None
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude Longitude Target
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23 4.526
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22 3.585
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24 3.521
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25 3.413
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25 3.422

다음과 같은 추가 속성에 액세스하기 위해 데이터세트를 사전으로 변환할 수도 있습니다. source_type:

for k,v in dataset.to_dict().items():
print(f"{k}: {v}")
name: California Housing Dataset
digest: 55270605
source: {"url": "https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.tgz"}
source_type: http
schema: {"mlflow_colspec": [{"type": "double", "name": "MedInc", "required": true}, {"type": "double", "name": "HouseAge", "required": true}, {"type": "double", "name": "AveRooms", "required": true}, {"type": "double", "name": "AveBedrms", "required": true}, {"type": "double", "name": "Population", "required": true}, {"type": "double", "name": "AveOccup", "required": true}, {"type": "double", "name": "Latitude", "required": true}, {"type": "double", "name": "Longitude", "required": true}, {"type": "double", "name": "Target", "required": true}]}
profile: {"num_rows": 20640, "num_elements": 185760}

이제 데이터 세트가 준비되었으므로 MLflow 실행에 이를 기록할 차례입니다. 이를 통해 데이터 세트의 메타데이터를 캡처하여 향후 참조를 위한 실험의 일부로 만들 수 있습니다.

with mlflow.start_run():
mlflow.log_input(dataset=dataset, context='training', tags=dataset_tags)
🏃 View run sassy-jay-279 at: http://127.0.0.1:8080/#/experiments/0/runs/5ef16e2e81bf40068c68ce536121538c
🧪 View experiment at: http://127.0.0.1:8080/#/experiments/0

MLflow UI()에서 데이터세트를 살펴보겠습니다. 기본 실험 아래에 데이터 세트가 나열되어 있습니다. 에서 사용된 데이터세트 섹션에서는 데이터세트의 컨텍스트를 볼 수 있으며, 이 경우에는 훈련에 사용되는 것으로 표시됩니다. 또한 데이터세트의 모든 관련 필드와 속성이 표시됩니다.

MLflow UI의 교육 데이터 세트 출처 : 나

축하해요! 첫 번째 데이터 세트를 기록했습니다!

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다