Kubeflow Pipelines로 고객평생가치 예측 아키텍처 및 디자인

이 문서는 Kubeflow Pipelines를 사용하여 고객평생가치(CLV) 예측 모델의 학습, 배포, 추론을 조정하는 방법을 설명하는 2개 문서 중 첫 번째 문서입니다. 이 문서에서는 CLV 학습 및 추론 파이프라인을 구현하기 위해 사용되는 아키텍처 및 디자인 패턴에 관한 개요를 제시합니다. 동반된 가이드에서는 동반된 GitHub 저장소에서 파이프라인 코드 샘플을 배포, 사용, 맞춤설정하는 방법을 보여줍니다.

Kubeflow Pipelines를 사용해서 통합된 머신러닝(ML) 시스템을 디자인, 조정, 자동화하고 Cloud Build를 사용해서 지속적 통합/지속적 배포(CI/CD) 설정을 구성하는 방법에 대한 일반 개요를 보려면 Kubeflow 및 Cloud Build를 사용한 CI/CD 및 ML 파이프라인의 아키텍처를 참조하세요.

개요

이 문서에는 두 가지 목표가 있습니다.

  • Google Cloud에서 관리되는 ML 및 데이터 분석 서비스를 조정하는 Kubeflow Pipelines에 대한 아키텍처 및 디자인 패턴을 설명합니다.
  • CLV 예측 모델의 학습, 배포 및 스코어링을 운용하기 위한 스타터 키트를 제공합니다.

이 문서에서 설명하는 아키텍처와 디자인은 예측 모델을 자주 세부 조정하고 다시 학습시켜야 하는 영업 사용 사례를 나타냅니다. 새로운 영업 트랜잭션의 일정한 흐름이 학습 데이터의 핵심이기 때문에 발전되는 구매 패턴에 따라 모델을 최신 상태로 유지해야 합니다. 학습 및 배포 워크플로 자동화가 중요합니다.

이 문서는 AI Platform을 사용한 고객평생가치 예측 시리즈에 설명된 데이터 사전 처리 및 모델링 기법을 기반으로 합니다. 이 시리즈는 CLV 개념과 알고리즘 접근 방식을 이해하는 데 도움이 될 수 있습니다.

이 문서는 데이터 과학자 및 머신러닝 엔지니어를 대상으로 합니다. 이 문서와 동반된 가이드에서는 사용자에게 다음 Google Cloud 개념 및 서비스에 대한 기본적인 지식이 있다고 가정합니다.

Kubeflow Pipelines은 Kubeflow 프로젝트의 핵심 구성요소입니다. Kubeflow 프로젝트는 확장 가능하고 이동 가능한 ML 워크로드를 개발, 조정, 배포, 실행하기 위한 오픈소스 기반의 Kubernetes 고유 플랫폼입니다. Kubeflow Pipelines에 대한 자세한 내용은 Kubeflow 문서를 참조하세요.

Kubeflow Pipelines는 일반적으로 Kubeflow 설치 중에 설치됩니다. 또한 다른 Kubeflow 구성요소에 대한 종속 항목 없이 독립형 서비스 집합으로 Kubeflow Pipelines를 설치할 수도 있습니다.

Kubeflow Pipelines는 다양한 Kubernetes 배포판에서 호스팅할 수 있습니다. 이 문서에서는 GKE에서의 Kubeflow Pipelines 실행을 중점적으로 설명합니다.

조정자로 사용되는 Kubeflow Pipelines

이 문서에서는 Kubeflow Pipelines를 Google Cloud에서 관리되는 ML 및 데이터 분석 서비스의 조정자로 사용하는 아키텍처 패턴을 설명합니다. 여기에서는 Kubeflow Pipelines가 워크플로만 실행하지만 호스팅 Kubernetes 클러스터에서 다른 계산을 수행하지 않습니다.

다음 다이어그램은 이 문서에서 설명하는 CLV 솔루션에 대한 대략적인 아키텍처를 보여줍니다.

CLV 솔루션을 위한 핵심 Kubeflow Pipelines 및 Google Cloud 구성요소 개요

Kubeflow Pipelines 서비스는 GKE에서 호스팅됩니다. 여기 및 가이드에 설명된 파이프라인은 Kubeflow Pipelines에서 생성됩니다. 이러한 파이프라인은 해당 Cloud APIs를 래핑하는 Kubeflow Pipelines 구성요소 집합을 통해 Cloud Storage, BigQuery, AutoML Tables와 상호 작용합니다. Container Registry는 파이프라인에 사용되는 구성요소의 컨테이너 이미지를 관리하기 위해 사용됩니다.

동반된 GitHub 솔루션에는 두 가지 샘플 파이프라인이 포함되어 있습니다.

  • 학습 및 배포 파이프라인
  • 일괄 예측 파이프라인

두 파이프라인 모두 AutoML Tables를 사용한 고객평생가치 예측에 설명된 것과 비슷한 데이터 처리, 학습, 스코어링 흐름을 따릅니다. 이 워크플로에서 다음을 수행합니다.

  • BigQuery를 사용하여 데이터 정리 및 특성 추출을 수행합니다.
  • AutoML Tables를 사용하여 모델 학습, 배포, 스코어링을 수행합니다.

학습 및 배포 워크플로

학습 및 배포 파이프라인에는 ML 회귀 모델을 학습시키고 선택적으로 배포하기 위해 과거 영업 트랜잭션 데이터가 사용됩니다. 이 모델은 해당 고객의 구매 기록을 기준으로 고객의 미래 구매 가치를 예측하도록 학습되었습니다. CLV 예측 모델링에 대한 자세한 내용은 AI Platform을 사용한 고객평생가치 예측: 소개를 참조하세요.

다음 다이어그램은 파이프라인이 실행하는 워크플로를 보여줍니다.

학습 및 배포 워크플로의 구성요소

이 워크플로에서는 다음을 수행합니다.

  1. Cloud Storage에서 BigQuery 스테이징 테이블로 과거 영업 트랜잭션을 로드합니다. 데이터가 BigQuery에 이미 있으면 이 단계를 건너뜁니다.
  2. BigQuery 쿼리를 준비합니다. 이 쿼리는 쿼리 템플릿과 파이프라인으로 전달되는 런타임 인수로부터 생성됩니다.
  3. BigQuery 쿼리를 실행하여 과거 영업 트랜잭션으로부터 특징을 추출합니다. 추출된 특징은 BigQuery 테이블에 저장됩니다.
  4. 특징을 AutoML 데이터 세트로 가져옵니다.
  5. AutoML 모델 학습을 트리거합니다.
  6. 학습이 완료되면 모델의 평가 측정항목을 검색합니다.
  7. 성능 기준에 따라 모델 성능을 비교합니다.
  8. 모델이 성능 기준을 충족하거나 초과하면 온라인 예측을 위해 모델을 배포합니다.

학습 파이프라인의 디자인 및 사용에 대한 자세한 내용은 이 솔루션에 대한 동반된 GitHub 저장소의 문서를 참조하세요.

일괄 예측 워크플로

이 파이프라인에는 학습 파이프라인과 동일한 사전 처리 및 특성 추출 단계가 사용됩니다. 일괄 예측을 위해서는 AutoML Tables batchPredict 메서드를 사용합니다.

다음 다이어그램은 파이프라인이 실행하는 워크플로를 보여줍니다.

사전 처리 및 추출 단계를 위한 파이프라인 워크플로

  1. Cloud Storage에서 BigQuery 스테이징 테이블로 과거 영업 트랜잭션을 로드합니다. 데이터가 BigQuery에 이미 있으면 이 단계를 건너뜁니다.
  2. BigQuery 쿼리를 준비합니다. 이 쿼리는 쿼리 템플릿과 파이프라인으로 전달되는 런타임 인수로부터 생성됩니다.
  3. BigQuery 쿼리를 실행하여 과거 영업 트랜잭션으로부터 특징을 추출합니다. 추출된 특징은 BigQuery 테이블에 저장됩니다.
  4. 데이터 스코어링을 위해 AutoML Tables batchPredict 메서드를 호출합니다. AutoML Tables batchPredict 메서드는 결과 예측을 Cloud Storage 또는 BigQuery에 저장합니다.

Kubeflow Pipelines 디자인 패턴

이 문서에 설명된 파이프라인은 관리, 배포, 맞춤설정이 직관적입니다.

일반 또는 파이프라인별 Kubeflow Pipelines 구성요소 사용

일반적으로 Kubeflow 구성요소는 두 가지 유형으로 분류할 수 있습니다.

  • 일반 구성요소. 일반 구성요소에는 제공된 파이프라인으로 구현되는 워크플로로 특정되지 않는 기능이 포함됩니다. 예를 들어 BigQuery 작업을 제출하는 구성요소는 일반 구성요소입니다. 이 구성요소는 제공된 파이프라인으로 특정된 논리를 포함하지 않기 때문에 여러 시나리오에서 재사용될 수 있습니다.
  • 파이프라인 특정 구성요소. 파이프라인 특정 구성요소는 일반적으로 제공된 파이프라인 또는 관련 파이프라인 그룹으로 특정된 기능이 포함된 도우미 구성요소입니다. 예를 들어 제공된 학습 워크플로에 특정된 커스텀 성능 측정항목을 계산하고 로깅하는 구성요소일 수 있습니다. 파이프라인 특정 구성요소는 쉽게 재사용할 수 없습니다.

이를 사용하는 파이프라인과 독립적으로 일반적인 구성요소를 개발, 빌드, 배포, 관리할 수 있습니다.

일반적으로 파이프라인 특정 구성요소의 개발, 빌드, 배포는 소비 파이프라인의 수명주기와 밀접하게 연결됩니다. 경량형 Python 구성요소를 사용하면 편리하고 일반적인 방식으로 파이프라인 특정 구성요소를 구현할 수 있습니다.

이 파이프라인은 일반 및 파이프라인 특정 구성요소를 모두 사용합니다.

데이터 사전 처리 및 특성 추출 작업을 실행하기 위해 이 파이프라인은 Kubeflow Pipelines 배포로 패키징된 BigQuery 구성요소를 사용합니다. 이 구성요소는 임의 BigQuery 쿼리를 처리하고 결과를 BigQuery 테이블 또는 Cloud Storage Blob에 저장합니다.

모델 학습, 배포, 추론을 위해 이 파이프라인은 GitHub 코드 샘플의 일부로 제공된 커스텀 AutoML Tables 구성요소 집합을 사용합니다. AutoML Tables 구성요소는 AutoML Tables API의 하위 집합을 래핑합니다.

이 파이프라인은 또한 경랑형 Python 구성요소로 구현되는 다음 도우미 구성요소를 사용합니다.

  • Load transactions 구성요소. Load transactions 구성요소는 Cloud Storage에 있는 CSV 파일 집합에서 과거 영업 트랜잭션 데이터를 BigQuery의 스테이징 테이블로 로드합니다.
  • Prepare query 구성요소. Prepare query 구성요소(파이프라인 특정 구성요소의 올바른 예시)는 BigQuery SQL 쿼리 템플릿을 생성합니다. 그러나 BigQuery는 식별자, 열 이름, 테이블 이름의 매개변수화를 지원하지 않습니다. 이러한 사전 처리 및 특성 추출 쿼리 부분을 하드 코딩하지 않기 위해 Prepare query는 쿼리 템플릿에 있는 자리표시자를 런타임 매개변수로 구성요소에 전달되는 값으로 바꿉니다.

파이프라인에 사용되는 구성요소의 디자인 및 사용에 대한 자세한 내용은 GitHub에서 이 솔루션에 대한 문서를 참조하세요.

파이프라인 설정 관리

파이프라인 디자인의 핵심은 구성 설정을 관리하는 방법입니다. 파이프라인의 도메인 특정 언어(DSL)에 이 설정을 직접 하드 코딩하는 것은 권장되지 않습니다. 하드 코딩된 설정은 파이프라인을 다른 환경에 배포할 때 문제가 될 수 있습니다.

예를 들어 파이프라인에 사용되는 구성요소에 대한 컨테이너 이미지 이름과 위치가 개발, 스테이징, 프로덕션 환경에서 서로 다를 수 있습니다. 마찬가지로 Prepare query 구성요소에 사용되는 쿼리 템플릿과 같이 구성요소에 사용되는 애셋 URL이 환경마다 다를 수 있습니다.

동반된 GitHub 솔루션은 설정 관리에 대한 한 가지 접근 방법을 보여줍니다. 이 솔루션에서는 단일 YAML 구성 파일이 모든 파이프라인 설정을 관리합니다. 설정 파일에는 두 가지 섹션인 argument_defaultscompiler_settings가 포함됩니다.

argument_defaults 섹션에서는 파이프라인의 런타임 인수에 대한 기본값을 정의합니다. compiler_settings 섹션에서는 DSL 컴파일러가 Python DSL을 결과 YAML 형식으로 변환하는 방법을 제어하는 설정을 정의합니다. 한 가지 컴파일러 설정 예시는 파이프라인이 Google Cloud에서 관리되는 서비스에 액세스할 때 특정 파이프라인 사용자 서비스 계정 또는 기본 Compute Engine 서비스 계정을 사용하도록 파이프라인을 컴파일할지 여부를 제어하는 플래그입니다.

컴파일 중에는 설정 파일이 파이프라인의 DSL 코드와 병합됩니다.

Kubeflow Pipelines 대시보드에서 실행된 파이프라인 결과 시각화

Kubeflow Pipelines 플랫폼에서는 일련의 실행을 추적, 확인, 평가, 비교하는 데 도움을 줄 수 있는 아티팩트 로깅 및 시각화가 기본적으로 지원됩니다. 이 지원은 ML 수명 주기의 실험 및 학습 단계 중에 잠재적으로 큰 실행 횟수를 관리할 때 특히 중요합니다.

Kubeflow Pipelines 대시보드에서는 두 가지 유형의 시각화가 지원됩니다.

  • 파이프라인 측정항목. 파이프라인 측정항목은 Kubeflow Pipelines 대시보드의 특정 실험에 대해 실행 페이지에서 시각화로 렌더링되는 스칼라 측정항목입니다. 파이프라인 측정항목의 기본 목표는 실행 성능을 빠르게 확인하고 여러 실행을 비교하는 것입니다.
  • 출력 뷰어. 출력 뷰어는 실행에 대해 보다 광범위한 정보를 로깅 및 렌더링하기 위해 사용됩니다. Kubeflow Pipelines 대시보드에서는 태스크 창의 아티팩트 섹션에서 제공된 구성요소의 아티팩트 출력을 보고 실행 출력 창에서 특정 실행에 대한 모든 출력 요약을 찾아볼 수 있습니다.

현재까지 Kubeflow Pipelines 대시보드에서는 다음 유형의 출력 뷰어가 지원됩니다.

  • 혼동 행렬
  • ROC 곡선
  • 텐서보드
  • 웹 앱
  • 테이블
  • 마크다운

마지막 3개 뷰어는 임의 정보를 캡처하고 시각화할 수 있기 때문에 유연성이 좋습니다.

파이프라인 구성요소는 출력 뷰어에 대한 메타데이터를 JSON 파일에 기록하여 Kubeflow Pipelines 대시보드 출력 뷰어를 사용할 수 있습니다. 메타데이터는 Kubeflow Pipelines 문서에 설명된 스키마를 준수해야 합니다.

Kubeflow Pipelines로 분산되는 가장 일반적인 구성요소는 해당 작업을 반영하는 메타데이터를 생성합니다. 메타데이터 생성으로 Kubeflow Pipelines 솔루션의 일부로 개발된 모든 커스텀 구성요소를 계측하는 것이 좋습니다.

파이프라인에 사용되는 사전 빌드된 구성요소로 자동 생성되지 않는 정보를 캡처해야 할 경우에는 추가 아티팩트 출력을 위해 경량형 Python 구성요소의 유연한 인프라를 사용할 수 있습니다.

AutoML Tables 구성요소는 Kubeflow Pipelines 대시보드 아티팩트를 사용해서 AutoML Tables API 호출의 출력을 추적하는 방법을 보여줍니다.

log_evalutation_metrics 구성요소는 제공된 AutoML 모델의 최신 평가 측정항목을 검색하고 해당 측정항목을 마크다운 아티팩트로 출력합니다.

또한 이 구성요소는 입력 인수로 지정된 기본 측정항목을 파이프라인 측정항목과 같이 로깅합니다.

빌드 및 배포 자동화

프로덕션 파이프라인은 복잡할 수 있습니다. 다음을 수행할 수 있습니다.

  • 여러 소스의 다양한 구성요소를 사용할 수 있습니다. 예를 들어 일반적인 사전 빌드된 Kubeflow Pipelines 구성요소와 제공된 솔루션에 대해 개발된 커스텀 구성요소를 사용할 수 있습니다.
  • 외부 애셋 및 리소스를 사용합니다. 예를 들어 SQL 스크립트 및 템플릿, PySpark 스크립트, 출력 뷰어 템플릿을 사용할 수 있습니다.
  • 대상 런타임 환경에 따라 런타임 매개변수나 컴파일러 설정 또는 둘 다에 대한 기본값과 다른 값이 필요합니다. 예를 들어 일부 환경에서는 커스텀 서비스 계정을 사용하도록 파이프라인을 컴파일해야 하고, 다른 환경에서는 파이프라인에 기본 Compute Engine 계정이 사용될 수 있습니다.

가장 간단한 경우라 해도 모든 경우, 빌드 북 또는 수동 단계별 가이드에 따라 Kubeflow Pipelines 솔루션 빌드 및 배포를 관리하는 것이 쉽지 않습니다. 빌드 및 배포 프로세스를 자동화하는 것이 중요합니다. 파이프라인 설정 관리 섹션에 설명된 대로 유연한 구성 설정 관리와 결합된 경우 빌드 자동화는 Kubeflow Pipelines 솔루션에 대해 강력하고, 반복 가능하며, 추적 가능한 구성 관리 기초를 설정합니다.

동반된 GitHub 저장소의 코드 샘플은 Cloud Build를 사용하여 빌드 프로세스를 자동화하는 한 가지 접근 방법을 보여줍니다. 이 시나리오에서 Cloud Build는 다음 단계를 수행합니다.

  1. 경량형 Python 구성요소의 기본 이미지를 빌드합니다.
  2. AutoML Tables 구성요소를 호스팅하는 이미지를 빌드합니다.
  3. 프로젝트의 Container Registry에 이미지를 배포합니다.
  4. 파이프라인을 컴파일합니다.
  5. Cloud Storage에 컴파일된 파이프라인을 배포합니다.
  6. 파이프라인의 아티팩트를 Cloud Storage에 배포합니다.
  7. 가이드에 사용되는 샘플 데이터 세트를 Cloud Storage에 복사합니다.

빌드 프로세스에 대한 자세한 내용은 솔루션의 GitHub 저장소를 참조하세요.

다음 단계