ML을 위한 데이터 사전 처리: 옵션 및 권장 사항

이 문서는 지도 학습 작업에 중점을 두고 기계 학습(ML)을 위한 데이터 엔지니어링 및 기능 엔지니어링 주제를 탐구하는 두 부분으로 구성된 시리즈 중 첫 번째입니다. 첫 번째 부분에서는 Google Cloud의 ML 파이프라인에서 데이터를 사전 처리하기 위한 권장사항을 설명합니다. 이 문서는 TensorFlow 및 오픈 소스 TensorFlow Transform ( tf.Transform ) 라이브러리를 사용하여 데이터를 준비하고, 모델을 훈련하고, 예측을 위한 모델을 제공하는 데 중점을 둡니다. 이 문서에서는 ML을 위한 데이터 사전 처리의 과제를 강조하고 Google Cloud에서 데이터 변환을 효과적으로 수행하기 위한 옵션과 시나리오를 설명합니다.

이 문서에서는 사용자가 BigQuery , Dataflow , Vertex AI , TensorFlow Keras API에 익숙하다고 가정합니다.

두 번째 문서인 Google Cloud를 사용한 ML을 위한 데이터 사전 처리에서는 tf.Transform 파이프라인을 구현하는 방법에 대한 단계별 튜토리얼을 제공합니다.

소개

ML은 데이터에서 복잡하고 잠재적으로 유용한 패턴을 자동으로 찾는 데 도움이 됩니다. 이러한 패턴은 새로운 데이터 포인트에 사용할 수 있는 ML 모델로 압축됩니다. 이 프로세스를 예측 또는 추론 수행이라고 합니다.

ML 모델 구축은 다단계 프로세스입니다. 각 단계에는 고유한 기술적, 개념적 과제가 있습니다. 두 부분으로 구성된 이 시리즈는 지도 학습 작업과 원본 데이터를 선택, 변환 및 강화하여 대상 변수에 대한 강력한 예측 신호를 생성하는 프로세스에 중점을 둡니다. 이러한 작업은 도메인 지식과 데이터 과학 기술을 결합합니다. 작업은 기능 엔지니어링 의 핵심입니다.

실제 ML 모델의 학습 데이터 세트 크기는 쉽게 1테라바이트(TB) 이상이 될 수 있습니다. 따라서 이러한 데이터세트를 효율적이고 분산적으로 처리하려면 대규모 데이터 처리 프레임워크가 필요합니다. ML 모델을 사용하여 예측을 수행하는 경우 새 데이터 포인트에 대한 교육 데이터에 사용한 것과 동일한 변환을 적용해야 합니다. 동일한 변환을 적용하면 모델이 예상하는 방식으로 ML 모델에 실시간 데이터세트를 제공할 수 있습니다.

이 문서에서는 기능 엔지니어링 작업의 다양한 세부 수준(인스턴스 수준, 전체 통과 및 기간 집계)에 대한 이러한 과제에 대해 설명합니다. 이 문서에서는 Google Cloud에서 ML을 위한 데이터 변환을 수행하는 옵션과 시나리오도 설명합니다.

또한 이 문서에서는 데이터 사전 처리 파이프라인을 통해 인스턴스 수준 및 전체 전달 데이터 변환을 모두 정의할 수 있는 TensorFlow용 라이브러리인 TensorFlow Transform ( tf.Transform )에 대한 개요를 제공합니다. 이러한 파이프라인은 Apache Beam 으로 실행되며 모델이 제공될 때와 마찬가지로 예측 중에 동일한 변환을 적용할 수 있는 아티팩트를 생성합니다.

ML용 데이터 전처리

이 섹션에서는 데이터 전처리 작업과 데이터 준비 단계를 소개합니다. 또한 전처리 작업의 유형과 그 세분성에 대해서도 설명합니다.

데이터 엔지니어링과 특성 엔지니어링 비교

ML을 위한 데이터 사전 처리에는 데이터 엔지니어링과 특성 엔지니어링이 모두 포함됩니다. 데이터 엔지니어링은 원시 데이터를 준비된 데이터 로 변환하는 프로세스입니다. 그런 다음 기능 엔지니어링은 준비된 데이터를 조정하여 ML 모델에서 예상하는 기능을 생성합니다. 이러한 용어의 의미는 다음과 같습니다.

원시 데이터 (또는 그냥 데이터 )
ML을 위한 사전 준비 없이 소스 형식의 데이터입니다. 이러한 맥락에서 데이터는 원시 형식(데이터 레이크)이거나 변환된 형식(데이터 웨어하우스)일 수 있습니다. 데이터 웨어하우스에 있는 변환된 데이터는 분석에 사용하기 위해 원래 원시 형식에서 변환되었을 수 있습니다. 그러나 이 맥락에서 원시 데이터는 데이터가 ML 작업을 위해 특별히 준비되지 않았음을 의미합니다. 데이터가 최종적으로 예측을 위해 ML 모델을 호출하는 스트리밍 시스템에서 전송된 경우에도 원시 데이터로 간주됩니다.
준비된 데이터
ML 작업을 위해 준비된 형식의 데이터 세트: 데이터 소스가 구문 분석되고 결합되어 표 형식으로 작성되었습니다. 준비된 데이터는 올바른 세분성으로 집계 및 요약됩니다. 예를 들어 데이터 세트의 각 행은 고유한 고객을 나타내고, 각 열은 지난 6주 동안 지출한 총액과 같은 고객에 대한 요약 정보를 나타냅니다. 준비된 데이터 테이블에서 관련 없는 열은 삭제되었으며, 유효하지 않은 레코드는 필터링되었습니다. 지도 학습 작업의 경우 대상 기능이 있습니다.
엔지니어링된 기능
모델에서 예상되는 조정된 특성이 포함된 데이터 세트입니다. 즉, 준비된 데이터 세트의 열에 대해 특정 ML 관련 작업을 수행하고 나중에 설명하는 것처럼 훈련 및 예측 중에 모델에 대한 새로운 특성을 생성하여 생성된 특성입니다. 전처리 작업 에서. 이러한 작업의 예로는 숫자 열을 0과 1 사이의 값으로 조정, 값 자르기, 원-핫 인코딩 범주형 기능 등이 있습니다.

다음 다이어그램(그림 1)은 전처리된 데이터 준비와 관련된 단계를 보여줍니다.

가공된 기능으로 이동하는 준비된 데이터로 이동하는 원시 데이터를 보여주는 흐름도.
그림 1. 원시 데이터에서 준비된 데이터, 엔지니어링된 기능, 기계 학습까지의 데이터 흐름.

실제로 동일한 소스의 데이터가 서로 다른 준비 단계에 있는 경우가 많습니다. 예를 들어 데이터 웨어하우스 테이블의 필드를 엔지니어링된 기능으로 직접 사용할 수 있습니다. 동시에 동일한 테이블의 다른 필드는 엔지니어링된 기능이 되기 전에 변환을 거쳐야 할 수도 있습니다. 마찬가지로 데이터 엔지니어링과 기능 엔지니어링 작업은 동일한 데이터 전처리 단계에서 결합될 수 있습니다.

전처리 작업

데이터 전처리에는 여러 작업이 포함됩니다. 각 작업은 ML이 더 나은 예측 모델을 구축하는 데 도움이 되도록 설계되었습니다. 이러한 전처리 작업의 세부정보는 이 문서의 범위를 벗어나지만 이 섹션에서는 일부 작업에 대해 간략하게 설명합니다.

구조화된 데이터의 경우 데이터 사전 처리 작업에는 다음이 포함됩니다.

  • 데이터 정리: 원시 데이터에서 손상되거나 유효하지 않은 값이 있는 레코드를 제거 또는 수정하고, 많은 수의 열이 누락된 레코드를 제거합니다.
  • 인스턴스 선택 및 분할: 입력 데이터세트에서 데이터 포인트를 선택하여 훈련, 평가(검증) 및 테스트 세트를 만듭니다. 이 프로세스에는 반복 가능한 무작위 샘플링, 소수 클래스 오버샘플링 및 계층화된 분할을 위한 기술이 포함됩니다.
  • 기능 조정: 숫자 값 크기 조정 및 정규화, 누락된 값 대치, 이상값 자르기, 분포가 편향된 값 조정 등 ML 기능의 품질을 개선합니다.
  • 특성 변환: 숫자 특성을 범주형 특성으로 변환( 버킷화 를 통해) 및 범주형 특성을 숫자 표현으로 변환(원-핫 인코딩, 개수를 사용한 학습 , 희소 특성 임베딩 등을 통해). 일부 모델은 숫자 또는 범주형 특성에만 작동하는 반면 다른 모델은 혼합 유형 특성을 처리할 수 있습니다. 모델이 두 가지 유형을 모두 처리하는 경우에도 동일한 기능에 대한 다양한 표현(숫자 및 범주형)을 통해 이점을 얻을 수 있습니다.
  • 특징 추출: PCA , 임베딩 추출, 해싱 과 같은 기술을 사용하여 더 낮은 차원의 더욱 강력한 데이터 표현을 생성하여 특징 수를 줄입니다.
  • 특징 선택: 모델 훈련을 위해 입력 특징의 하위 집합을 선택하고, 필터 또는 래퍼 방법을 사용하여 관련이 없거나 중복된 특징을 무시합니다. 특성에 많은 수의 값이 누락된 경우 특성 선택에는 단순히 특성 삭제가 포함될 수도 있습니다.
  • 특성 구성: 다항식 확장 (일변량 수학 함수 사용) 또는 특성 교차 (특성 상호 작용 캡처)와 같은 일반적인 기술을 사용하여 새로운 특성을 생성합니다. ML 사용 사례 도메인의 비즈니스 로직을 사용하여 기능을 구성할 수도 있습니다.

구조화되지 않은 데이터(예: 이미지, 오디오 또는 텍스트 문서)로 작업할 때 딥 러닝은 도메인 지식 기반 기능 엔지니어링을 모델 아키텍처에 통합하여 대체합니다. 컨벌루션 레이어는 자동 기능 전처리기입니다. 올바른 모델 아키텍처를 구성하려면 데이터에 대한 경험적 지식이 필요합니다. 또한 다음과 같은 어느 정도의 전처리가 필요합니다.

  • 텍스트 문서의 경우: 형태소 분석 및 원형 복원 , TF-IDF 계산, n-그램 추출, 임베딩 조회.
  • 이미지의 경우: 자르기, 크기 조정, 자르기, 가우시안 흐림 및 카나리아 필터.
  • 모든 유형의 데이터(텍스트 및 이미지 포함): 전이 학습은 완전히 훈련된 모델의 마지막 레이어를 제외한 모든 레이어를 기능 엔지니어링 단계로 처리합니다.

전처리 세분성

이 섹션에서는 데이터 변환 유형의 세분화에 대해 설명합니다. 훈련 데이터에 적용되는 변환을 사용하여 예측을 위한 새로운 데이터 포인트를 준비할 때 이러한 관점이 중요한 이유를 보여줍니다.

전처리 및 변환 작업은 작업 세분성에 따라 다음과 같이 분류할 수 있습니다.

  • 훈련 및 예측 중 인스턴스 수준 변환 . 이는 동일한 인스턴스의 값만 변환에 필요한 간단한 변환입니다. 예를 들어 인스턴스 수준 변환에는 기능 값을 일부 임계값으로 자르기, 다른 기능을 다항식으로 확장, 두 기능을 곱하거나 두 기능을 비교하여 부울 플래그를 생성하는 것이 포함될 수 있습니다.

    이러한 변환은 훈련 및 예측 중에 동일하게 적용되어야 합니다. 왜냐하면 모델은 원시 입력 값이 아닌 변환된 특성에 대해 훈련되기 때문입니다. 데이터가 동일하게 변환되지 않으면 훈련되지 않은 값의 분포를 가진 데이터가 제공되기 때문에 모델이 제대로 작동하지 않습니다. 자세한 내용은 전처리 과제 섹션에서 학습-제공 편향에 대한 논의를 참조하세요.

  • 훈련 중에는 전체 전달 변환이 수행되지만 예측 중에는 인스턴스 수준 변환이 수행됩니다 . 이 시나리오에서 변환은 미리 계산된 일부 통계를 사용하여 변환을 수행하므로 상태 저장형입니다. 훈련 중에 훈련 데이터 전체를 분석하여 예측 시 훈련 데이터, 평가 데이터 및 새 데이터를 변환하기 위한 최소값, 최대값, 평균 및 분산과 같은 수량을 계산합니다.

    예를 들어 훈련을 위해 숫자 특성을 정규화하려면 훈련 데이터 전체에 걸쳐 평균(μ)과 표준 편차(σ)를 계산합니다. 이 계산을 전체 전달 (또는 분석 ) 작업이라고 합니다. 예측을 위해 모델을 제공하면 학습 제공 편향을 방지하기 위해 새 데이터 포인트의 값이 정규화됩니다. 따라서 학습 중에 계산된 μ 및 σ 값은 다음과 같은 간단한 인스턴스 수준 작업인 특징 값을 조정하는 데 사용됩니다.

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    전체 전달 변환에는 다음이 포함됩니다.

    • 훈련 데이터 세트에서 계산된 최소최대를 사용하여 MinMax 스케일링 수치 기능입니다.
    • 훈련 데이터 세트에서 계산된 μ 및 σ를 사용하는 표준 스케일링(z-점수 정규화) 수치 특징입니다.
    • 분위수를 사용하여 수치 특성을 버킷화합니다.
    • 중앙값(숫자 특성) 또는 최빈값(범주형 특성)을 사용하여 결측값을 대치합니다.
    • 입력 범주형 특성의 모든 고유 값(어휘)을 추출하여 문자열(명목 값)을 정수(색인)로 변환합니다.
    • TF-IDF를 계산하기 위해 모든 문서(인스턴스)에서 용어(특성 값)의 발생을 계산합니다.
    • 입력 특성의 PCA를 계산하여 데이터를 더 낮은 차원 공간에 투영합니다(선형 종속 특성 사용).

    μ, σ, minmax 와 같은 통계를 계산하려면 훈련 데이터만 사용해야 합니다. 이러한 작업에 대한 테스트 및 평가 데이터를 추가하면 모델 교육을 위해 평가 및 테스트 데이터에서 정보가 유출 됩니다. 이는 시험 및 평가 결과의 신뢰성에 영향을 미칩니다. 모든 데이터 세트에 일관된 변환을 적용하려면 훈련 데이터에서 계산된 동일한 통계를 사용하여 테스트 및 평가 데이터를 변환합니다.

  • 훈련 및 예측 중 기록 집계 . 여기에는 예측 작업에 대한 입력 신호로 비즈니스 집계, 파생 및 플래그를 생성하는 작업이 포함됩니다. 예를 들어 고객이 성향 모델을 구축할 수 있도록 최신성, 빈도 및 금전적(RFM) 지표를 생성합니다. 이러한 유형의 특성은 미리 계산되어 특성 저장소에 저장되어 모델 훈련, 일괄 채점, 온라인 예측 서비스 중에 사용할 수 있습니다. 훈련 및 예측 전에 이러한 집계에 추가 기능 엔지니어링(예: 변환 및 조정)을 수행할 수도 있습니다.

  • 훈련 중에는 과거 집계가 수행되지만 예측 중에는 실시간 집계가 수행됩니다 . 이 접근 방식에는 시간 경과에 따른 실시간 값을 요약하여 기능을 생성하는 작업이 포함됩니다. 이 접근 방식에서는 집계할 인스턴스가 임시 창 절을 통해 정의됩니다. 예를 들어 지난 5분, 지난 10분, 지난 30분 및 기타 경로의 교통 지표를 기반으로 택시 여행 시간을 추정하는 모델을 학습하려는 경우 이 접근 방식을 사용할 수 있습니다. 간격. 또한 이 접근 방식을 사용하면 지난 3분 동안 계산된 온도 및 진동 값의 이동 평균을 기반으로 엔진 부품의 고장을 예측할 수 있습니다. 이러한 집계는 학습을 위해 오프라인으로 준비될 수 있지만 제공 중에 데이터 스트림에서 실시간으로 계산됩니다.

    보다 정확하게는 훈련 데이터를 준비할 때 집계된 값이 원시 데이터에 없으면 데이터 엔지니어링 단계에서 값이 생성됩니다. 원시 데이터는 일반적으로 (entity, timestamp, value) 형식으로 데이터베이스에 저장됩니다. 이전 예에서 entity 택시 경로의 경로 세그먼트 식별자이고 엔진 오류의 엔진 부품 식별자입니다. 창 작업을 사용하여 (entity, time_index, aggregated_value_over_time_window) 계산하고 집계 기능을 모델 교육을 위한 입력으로 사용할 수 있습니다.

    실시간(온라인) 예측을 위한 모델이 제공되면 모델은 집계된 값에서 파생된 특성을 입력으로 기대합니다. 따라서 Apache Beam과 같은 스트림 처리 기술을 사용하여 시스템으로 스트리밍되는 실시간 데이터 포인트의 집계를 계산할 수 있습니다. 스트림 처리 기술은 새로운 데이터 포인트가 도착할 때 시간 창을 기반으로 실시간 데이터를 집계합니다. 훈련 및 예측 전에 이러한 집계에 추가 기능 엔지니어링(예: 변환 및 조정)을 수행할 수도 있습니다.

Google Cloud의 ML 파이프라인

이 섹션에서는 관리형 서비스를 사용하여 Google Cloud에서 TensorFlow ML 모델을 학습시키고 제공하기 위한 일반적인 엔드 투 엔드 파이프라인의 핵심 구성요소를 설명합니다. 또한 데이터 사전 처리 작업의 다양한 범주를 구현할 수 있는 위치와 이러한 변환을 구현할 때 직면할 수 있는 일반적인 문제에 대해서도 설명합니다. tf.Transform 작동 방식 섹션에서는 TensorFlow Transform 라이브러리가 이러한 문제를 해결하는 데 어떻게 도움이 되는지 보여줍니다.

상위 수준 아키텍처

다음 다이어그램(그림 2)은 TensorFlow 모델을 훈련하고 제공하기 위한 일반적인 ML 파이프라인의 상위 수준 아키텍처를 보여줍니다. 다이어그램의 레이블 A, B, C는 데이터 전처리가 발생할 수 있는 파이프라인의 다양한 위치를 나타냅니다. 이러한 단계에 대한 자세한 내용은 다음 섹션에서 제공됩니다.

데이터 처리 단계를 보여주는 아키텍처 다이어그램
그림 2. Google Cloud에서의 ML 학습 및 제공을 위한 개략적인 아키텍처

파이프라인은 다음 단계로 구성됩니다.

  1. 원시 데이터를 가져온 후 테이블 형식 데이터는 BigQuery에 저장되고 이미지, 오디오, 동영상과 같은 기타 데이터는 Cloud Storage에 저장됩니다. 이 시리즈의 두 번째 부분에서는 BigQuery에 저장된 표 형식 데이터를 예로 사용합니다.
  2. 데이터 엔지니어링(준비) 및 특성 엔지니어링은 Dataflow를 사용하여 대규모로 실행됩니다. 이 실행을 통해 Cloud Storage에 저장되는 ML 지원 학습, 평가, 테스트 세트가 생성됩니다. 이상적으로 이러한 데이터 세트는 TensorFlow 계산에 최적화된 형식인 TFRecord 파일로 저장됩니다.
  3. TensorFlow 모델 트레이너 패키지는 Vertex AI Training에 제출됩니다. Vertex AI Training은 이전 단계에서 사전 처리된 데이터를 사용하여 모델을 학습시킵니다. 이 단계의 출력은 Cloud Storage로 내보내지는 학습된 TensorFlow SavedModel 입니다.
  4. 학습된 TensorFlow 모델은 온라인 예측에 사용할 수 있도록 REST API가 포함된 서비스로 Vertex AI Prediction에 배포됩니다. 일괄 예측 작업에도 동일한 모델을 사용할 수 있습니다.
  5. 모델이 REST API로 배포된 후 클라이언트 앱과 내부 시스템은 일부 데이터 포인트가 포함된 요청을 보내고 예측이 포함된 모델로부터 응답을 받아 API를 호출할 수 있습니다.
  6. 이 파이프라인을 조정하고 자동화하려면 Vertex AI Pipelines를 스케줄러로 사용하여 데이터 준비, 모델 학습, 모델 배포 단계를 호출할 수 있습니다.

Vertex AI Feature Store를 사용하여 입력 특성을 저장하여 예측할 수도 있습니다. 예를 들어 최신 원시 데이터에서 엔지니어링된 특성을 주기적으로 만들고 Vertex AI Feature Store에 저장할 수 있습니다. 클라이언트 앱은 Vertex AI Feature Store에서 필요한 입력 기능을 가져와 모델에 전송하여 예측을 받습니다.

전처리를 수행할 위치

그림 2에서 라벨 A, B, C는 데이터 사전 처리 작업이 BigQuery, Dataflow 또는 TensorFlow에서 수행될 수 있음을 보여줍니다. 다음 섹션에서는 이러한 각 옵션의 작동 방식을 설명합니다.

옵션 A: BigQuery

일반적으로 로직은 다음 작업을 위해 BigQuery에서 구현됩니다.

  • 샘플링: 데이터에서 무작위로 하위 집합을 선택합니다.
  • 필터링: 관련이 없거나 유효하지 않은 인스턴스를 제거합니다.
  • 파티셔닝: 데이터를 분할하여 훈련, 평가 및 테스트 세트를 생성합니다.

BigQuery SQL 스크립트는 그림 2의 데이터 처리 단계인 Dataflow 사전 처리 파이프라인의 소스 쿼리로 사용할 수 있습니다. 예를 들어 시스템이 캐나다에서 사용되고 데이터 웨어하우스에 전 세계의 트랜잭션이 있는 경우 캐나다 전용 학습 데이터를 얻는 것은 BigQuery에서 가장 잘 수행됩니다. BigQuery의 특성 추출은 간단하고 확장 가능하며 인스턴스 수준 및 기록 집계 특성 변환 구현을 지원합니다.

하지만 일괄 예측(점수)을 위해 모델을 사용하는 경우 또는 특성이 BigQuery에서 사전 계산되었지만 온라인 예측 중에 사용하기 위해 Vertex AI Feature Store에 저장되는 경우에만 특성 추출에 BigQuery를 사용하는 것이 좋습니다. 온라인 예측을 위해 모델을 배포할 계획이고 온라인 특성 저장소에 엔지니어링된 특성이 없는 경우 SQL 사전 처리 작업을 복제하여 다른 시스템이 생성하는 원시 데이터 포인트를 변환해야 합니다. 즉, 로직을 두 번 구현해야 합니다. 한 번은 BigQuery에서 학습 데이터를 전처리하기 위해 SQL에서, 두 번째는 예측을 위한 온라인 데이터 포인트를 전처리하기 위해 모델을 사용하는 앱의 로직에서 구현해야 합니다.

예를 들어 클라이언트 앱이 Java로 작성된 경우 Java로 논리를 다시 구현해야 합니다. 이 문서 뒷부분에 나오는 전처리 문제의 학습 제공 편향 섹션에 설명된 대로 구현 불일치로 인해 오류가 발생할 수 있습니다. 또한 두 가지 서로 다른 구현을 유지하는 데 추가 오버헤드가 발생합니다. 학습 데이터를 사전 처리하기 위해 SQL의 논리를 변경할 때마다 제공 시 데이터를 사전 처리하도록 Java 구현을 변경해야 합니다.

일괄 예측(예: Vertex AI 일괄 예측 사용)에만 모델을 사용하고 점수 매기기 데이터가 BigQuery에서 가져온 경우 이러한 사전 처리 작업을 BigQuery SQL 스크립트의 일부로 구현할 수 있습니다. 이 경우 동일한 전처리 SQL 스크립트를 사용하여 훈련 및 채점 데이터를 모두 준비할 수 있습니다.

전체 전달 상태 저장 변환은 BigQuery 구현에 적합하지 않습니다. 전체 전달 변환에 BigQuery를 사용하는 경우 숫자 특성을 확장하기 위한 평균 및 분산과 같은 상태 저장 변환에 필요한 수량을 저장하는 보조 테이블이 필요합니다. 또한 BigQuery에서 SQL을 사용하여 전체 전달 변환을 구현하면 SQL 스크립트의 복잡성이 증가하고 학습 및 채점 SQL 스크립트 간에 복잡한 종속성이 생성됩니다.

옵션 B: 데이터 흐름

그림 2에 표시된 것처럼 계산 비용이 많이 드는 사전 처리 작업을 Apache Beam에서 구현하고 Dataflow를 사용하여 대규모로 실행할 수 있습니다. Dataflow는 일괄 및 스트림 데이터 처리를 위한 완전 관리형 자동 확장 서비스입니다. Dataflow를 사용하면 BigQuery와 달리 데이터 처리를 위해 외부 특수 라이브러리를 사용할 수도 있습니다.

Dataflow는 인스턴스 수준 변환과 기록 및 실시간 집계 특성 변환을 수행할 수 있습니다. 특히 ML 모델이 total_number_of_clicks_last_90sec 와 같은 입력 기능을 예상하는 경우 Apache Beam 창 함수는 실시간(스트리밍) 이벤트 데이터(예: 클릭 이벤트)의 기간 값 집계를 기반으로 이러한 기능을 계산할 수 있습니다. 변환 세분성 에 대한 이전 논의에서는 이를 "훈련 중에는 과거 집계, 예측 중에는 실시간 집계"라고 했습니다.

다음 다이어그램인 그림 3은 거의 실시간 예측을 위해 스트림 데이터를 처리하는 데 있어 Dataflow의 역할을 보여줍니다.

예측을 위해 스트림 데이터를 사용하기 위한 아키텍처입니다.
그림 3. Dataflow에서 예측을 위해 스트림 데이터를 사용하는 대략적인 아키텍처

그림 3에 표시된 것처럼 처리 중에 데이터 포인트 라는 이벤트가 Pub/Sub 로 수집됩니다. Dataflow는 이러한 데이터 포인트를 사용하고 시간 경과에 따른 집계를 기반으로 특성을 계산한 다음 예측을 위해 배포된 ML 모델 API를 호출합니다. 그런 다음 예측은 아웃바운드 Pub/Sub 큐로 전송됩니다. Pub/Sub에서는 모니터링이나 제어와 같은 다운스트림 시스템에서 예측을 사용하거나 원래 요청 클라이언트로 푸시백(예: 알림)할 수 있습니다. 실시간 가져오기를 위해 예측을 Cloud Bigtable 과 같은 지연 시간이 짧은 데이터 저장소에 저장할 수도 있습니다. Cloud Bigtable을 사용하면 이러한 실시간 집계를 누적하고 저장하여 예측이 필요할 때 조회할 수 있습니다.

동일한 Apache Beam 구현을 사용하여 BigQuery와 같은 오프라인 데이터 저장소에서 가져온 학습 데이터를 일괄 처리하고 온라인 예측을 제공하기 위해 실시간 데이터를 스트림 처리할 수 있습니다.

그림 2에 표시된 아키텍처와 같은 다른 일반적인 아키텍처에서는 클라이언트 앱이 온라인 예측을 위해 배포된 모델 API를 직접 호출합니다. 이 경우 학습 데이터를 준비하기 위해 Dataflow에서 사전 처리 작업을 구현하면 모델로 직접 이동하는 예측 데이터에 작업이 적용되지 않습니다. 따라서 이러한 변환은 온라인 예측을 제공하는 동안 모델에 통합되어야 합니다.

Dataflow를 사용하면 필요한 통계를 대규모로 계산하여 전체 전달 변환을 수행할 수 있습니다. 그러나 이러한 통계는 예측 데이터 포인트를 변환하기 위해 예측 중에 사용할 어딘가에 저장되어야 합니다. TensorFlow Transform( tf.Transform ) 라이브러리를 사용하면 이러한 통계를 다른 곳에 저장하는 대신 모델에 직접 포함할 수 있습니다. 이 접근 방식은 나중에 tf.Transform 작동 방식 에서 설명됩니다.

옵션 C: TensorFlow

그림 2에 표시된 것처럼 TensorFlow 모델 자체에서 데이터 전처리 및 변환 작업을 구현할 수 있습니다. 그림에 표시된 것처럼 TensorFlow 모델 학습을 위해 구현하는 전처리는 예측을 위해 모델을 내보내고 배포할 때 모델의 필수 부분이 됩니다. TensorFlow 모델의 변환은 다음 방법 중 하나로 수행할 수 있습니다.

  • input_fn 함수와 serving_fn 함수에서 모든 인스턴스 수준 변환 논리를 구현합니다. input_fn 함수는 모델 학습을 위해 tf.data.Dataset API를 사용하여 데이터세트를 준비합니다. serving_fn 함수는 예측을 위한 데이터를 수신하고 준비합니다.
  • Keras 전처리 레이어를 사용하거나 맞춤 레이어를 생성하여 TensorFlow 모델에 직접 변환 코드를 추가합니다.

serving_fn 함수의 변환 논리 코드는 온라인 예측을 위해 저장된 모델의 제공 인터페이스를 정의합니다. serving_fn 함수의 변환 논리 코드에서 훈련 데이터를 준비하는 데 사용된 것과 동일한 변환을 구현하면 새로운 예측 데이터 포인트가 제공될 때 동일한 변환이 적용됩니다.

그러나 TensorFlow 모델은 각 데이터 포인트를 독립적으로 또는 소규모 배치로 처리하기 때문에 모든 데이터 포인트에서 집계를 계산할 수는 없습니다. 결과적으로 TensorFlow 모델에서는 전체 전달 변환을 구현할 수 없습니다.

전처리 문제

다음은 데이터 전처리 구현의 주요 과제입니다.

  • 훈련-제공 편향 . 훈련-제공 편향은 훈련 중과 제공 중 효율성(예측 성능)의 차이를 나타냅니다. 이러한 편향은 학습 파이프라인과 제공 파이프라인에서 데이터를 처리하는 방법 간의 불일치로 인해 발생할 수 있습니다. 예를 들어 모델이 로그 변환된 특성에 대해 학습되었지만 제공 중에 원시 특성이 표시되는 경우 예측 출력이 정확하지 않을 수 있습니다.

    변환이 모델 자체의 일부가 되는 경우 앞서 옵션 C: TensorFlow 에서 설명한 대로 인스턴스 수준 변환을 처리하는 것이 간단할 수 있습니다. 이 경우 모델 제공 인터페이스( serving_fn 함수)는 원시 데이터를 예상하는 반면, 모델은 출력을 계산하기 전에 이 데이터를 내부적으로 변환합니다. 변환은 원시 훈련 및 예측 데이터 포인트에 적용된 것과 동일합니다.

  • 전체 전달 변환 . TensorFlow 모델에서는 크기 조정 및 정규화 변환과 같은 전체 전달 변환을 구현할 수 없습니다. 전체 전달 변환에서는 옵션 B: 데이터 흐름 에 설명된 대로 일부 통계(예: 숫자 특성을 조정하기 위한 max 값 및 min )를 미리 학습 데이터에 대해 계산해야 합니다. 그런 다음 새 원시 데이터 포인트를 인스턴스 수준 변환으로 변환하여 학습 제공 편향을 방지하기 위해 예측을 위한 모델 제공 중에 사용할 값을 어딘가에 저장해야 합니다. TensorFlow Transform( tf.Transform ) 라이브러리를 사용하여 TensorFlow 모델에 통계를 직접 삽입할 수 있습니다. 이 접근 방식은 나중에 tf.Transform 작동 방식 에서 설명됩니다.

  • 더 나은 교육 효율성을 위해 데이터를 미리 준비합니다 . 모델의 일부로 인스턴스 수준 변환을 구현하면 훈련 프로세스의 효율성이 저하될 수 있습니다. 이러한 성능 저하가 발생하는 이유는 각 시대마다 동일한 학습 데이터에 동일한 변환이 반복적으로 적용되기 때문입니다. 1,000개의 특성이 포함된 원시 훈련 데이터가 있고 인스턴스 수준 변환을 혼합하여 10,000개의 특성을 생성한다고 가정해 보겠습니다. 이러한 변환을 모델의 일부로 구현하고 모델에 원시 훈련 데이터를 제공하는 경우 이러한 10,000개의 작업은 각 인스턴스에 N 번 적용됩니다. 여기서 N 은 에포크 수입니다. 또한 가속기(GPU 또는 TPU)를 사용하는 경우 CPU가 이러한 변환을 수행하는 동안 가속기들은 유휴 상태로 유지되므로 값비싼 가속기를 효율적으로 사용하지 못합니다.

    이상적으로는 옵션 B: 데이터 흐름 에 설명된 기술을 사용하여 훈련 전에 훈련 데이터를 변환합니다. 여기서 10,000개의 변환 작업은 각 훈련 인스턴스에 한 번만 적용됩니다. 그런 다음 변환된 훈련 데이터가 모델에 제공됩니다. 더 이상 변환이 적용되지 않으며 가속기는 항상 사용 중입니다. 또한 Dataflow를 사용하면 완전 관리형 서비스를 통해 대규모 데이터를 대규모로 전처리하는 데 도움이 됩니다.

    훈련 데이터를 미리 준비하면 훈련 효율성이 향상될 수 있습니다. 그러나 모델 외부에서 변환 로직을 구현하면( 옵션 A: BigQuery 또는 옵션 B: Dataflow 에 설명된 접근 방식) 학습-제공 편향 문제가 해결되지 않습니다. 훈련과 예측 모두에 사용하기 위해 가공된 특성을 특성 저장소에 저장하지 않는 한 모델 인터페이스는 변환된 데이터를 기대하기 때문에 예측을 위해 들어오는 새 데이터 포인트에 적용할 어딘가에 변환 논리를 구현해야 합니다. TensorFlow Transform( tf.Transform ) 라이브러리는 다음 섹션에 설명된 대로 이 문제를 해결하는 데 도움이 될 수 있습니다.

tf.Transform 작동 방식

tf.Transform 라이브러리는 전체 패스가 필요한 변환에 유용합니다. tf.Transform 라이브러리의 출력은 인스턴스 수준 변환 논리와 전체 전달 변환에서 계산된 통계를 나타내는 TensorFlow 그래프로 내보내어 학습 및 제공에 사용됩니다. 학습과 제공에 동일한 그래프를 사용하면 두 단계 모두 동일한 변환이 적용되므로 편향을 방지할 수 있습니다. 또한 tf.Transform 라이브러리는 Dataflow의 일괄 처리 파이프라인에서 대규모로 실행되어 학습 데이터를 미리 준비하고 학습 효율성을 향상시킬 수 있습니다.

다음 다이어그램(그림 4)은 tf.Transform 라이브러리가 훈련 및 예측을 위해 데이터를 사전 처리하고 변환하는 방법을 보여줍니다. 프로세스는 다음 섹션에 설명되어 있습니다.

원시 데이터에서 tf.Transform을 거쳐 예측까지의 흐름을 보여주는 다이어그램
그림 4. 데이터 전처리 및 변환을 위한 tf.Transform 의 동작

훈련 및 평가 데이터 변환

tf.Transform Apache Beam API에 구현된 변환을 사용하여 원시 학습 데이터를 사전 처리하고 Dataflow에서 대규모로 실행합니다. 전처리는 다음 단계로 수행됩니다.

  • 분석 단계: 분석 단계에서는 상태 저장 변환에 필요한 통계(예: 평균, 분산, 분위수)가 전체 전달 작업을 통해 학습 데이터에 대해 계산됩니다. 이 단계에서는 변환 아티팩트( transform_fn 그래프 포함) 세트를 생성합니다. transform_fn 그래프는 변환 논리를 인스턴스 수준 작업으로 포함하는 TensorFlow 그래프입니다. 분석 단계에서 계산된 통계가 상수로 포함됩니다.
  • 변환 단계: 변환 단계에서는 변환 단계에서 transform_fn 그래프가 원시 훈련 데이터에 적용됩니다. 여기서 계산된 통계는 인스턴스 수준 방식으로 데이터 레코드를 처리(예: 숫자 열 크기 조정)하는 데 사용됩니다.

이와 같은 2단계 접근 방식은 전체 전달 변환을 수행하는 전처리 문제를 해결합니다.

평가 데이터를 전처리할 때는 transform_fn 그래프의 로직과 학습 데이터의 분석 단계에서 계산된 통계를 사용하여 인스턴스 수준 작업만 적용됩니다. 즉, 평가 데이터의 숫자 특징을 정규화하기 위해 μ 및 σ와 같은 새로운 통계를 계산하기 위해 전체 전달 방식으로 평가 데이터를 분석하지 않습니다. 대신 훈련 데이터에서 계산된 통계를 사용하여 인스턴스 수준 방식으로 평가 데이터를 변환합니다.

변환된 학습 및 평가 데이터는 모델 학습에 사용되기 전에 Dataflow를 사용하여 대규모로 준비됩니다. 이 배치 데이터 준비 프로세스는 교육 효율성을 향상시키기 위해 데이터를 앞쪽으로 준비하는 전처리 과제를 해결합니다. 그림 4에서 볼 수 있듯이 모델 내부 인터페이스는 변환 된 기능을 기대합니다.

내보낸 모델에 변환을 첨부합니다

언급 한 바와 같이, tf.Transform 파이프 라인에 의해 생성 된 transform_fn 그래프는 내보내는 텐서 플로 그래프로 저장됩니다. 내보낸 그래프는 인스턴스 레벨 작업으로 변환 로직으로 구성되며 모든 통계는 전체 패스 변환으로 그래프 상수로 계산됩니다. 훈련 된 모델이 서빙을 위해 내보낼 때, transform_fn 그래프는 serving_fn 함수의 일부로 SaveedModel에 연결됩니다.

예측 모델을 제공하는 동안 모델 서빙 인터페이스는 데이터 포인트가 원시 형식 (즉, 변환 전에)으로 예상됩니다. 그러나 모델 내부 인터페이스는 변환 된 형식의 데이터를 기대합니다.

이제 모델의 일부인 transform_fn 그래프는 들어오는 데이터 포인트에 모든 전처리 로직을 적용합니다. 예측 중에 인스턴스 수준 작동에서 저장된 상수 (μ 및 σ와 같은 숫자 특징을 정상화)를 사용합니다. 따라서 transform_fn 그래프는 원시 데이터 포인트를 변환 된 형식으로 변환합니다. 변환 된 형식은 그림 4에 표시된 것처럼 예측을 생성하기 위해 모델 내부 인터페이스에 의해 예상되는 것입니다.

이 메커니즘은 훈련 및 평가 데이터를 변환하는 데 사용되는 동일한 논리 (구현)가 예측 서빙 중에 새로운 데이터 포인트를 변환하기 위해 적용되기 때문에 훈련-서빙 비대행 의 전처리 도전을 해결합니다.

전처리 옵션 요약

다음 표는이 문서에서 논의한 데이터 전처리 옵션을 요약합니다. 테이블에서 "N/A"는 "적용 할 수 없음"을 나타냅니다.

데이터 전처리 옵션 인스턴스 수준
(무국적 변형)

교육 중 전체 통과 및 서빙 중 인스턴스 수준 (상태 변환)

훈련 및 서빙 중 실시간 (창) 집계 (스트리밍 변환)

BigQuery (SQL)

배치 스코어링 : OK - 교육 및 배치 스코어링 중에 데이터에 동일한 변환 구현이 적용됩니다.

온라인 예측 : 권장되지 않음 -교육 데이터를 처리 할 수 ​​있지만 다른 도구를 사용하여 데이터를 사용하여 처리하기 때문에 교육 사동이 발생합니다.

배치 스코어링 : 권장되지 않습니다 .

온라인 예측 : 권장되지 않습니다 .

예를 들어 BigQuery를 사용하여 계산 된 통계를 사용할 수 있지만 예를 들어 수준의 배치/온라인 변환에 대한 통계를 사용할 수는 있지만 교육 중에 통계 저장소를 채우고 예측 중에 사용하기 위해 통계 저장소를 유지해야하기 때문에 쉽지 않습니다.

배치 스코어링 : N/A- 이와 같은 응집체는 실시간 이벤트를 기반으로 계산됩니다.

온라인 예측 : 권장되지 않음 -교육 데이터를 처리 할 수 ​​있지만 다른 도구를 사용하여 데이터를 사용하여 처리하기 때문에 교육 사동이 발생합니다.

DataFlow (Apache Beam)

배치 스코어링 : OK - 교육 및 배치 스코어링 중에 데이터에 동일한 변환 구현이 적용됩니다.

온라인 예측 : OK - 서빙 시간에 데이터가 PUB/Sub에서 나오는 경우 DataFlow에 의해 소비됩니다. 그렇지 않으면, 훈련-서빙 왜곡을 초래합니다.

배치 스코어링 : 권장되지 않습니다 .

온라인 예측 : 권장되지 않습니다 .

데이터 플로우를 사용하여 계산 된 통계를 사용 할 수는 있지만 예를 들어 수준의 배치/온라인 변환에 대해 계산할 수 있지만, 교육 중에 통계 저장소를 채우고 예측 중에 사용하기 때문에 쉽지 않습니다.

배치 스코어링 : N/A- 이와 같은 응집체는 실시간 이벤트를 기반으로 계산됩니다.

온라인 예측 : OK - 교육 (배치) 및 서빙 (스트림) 중에 동일한 Apache Beam 변환이 데이터에 적용됩니다.

DataFlow (Apache Beam + TFT)

배치 스코어링 : OK - 교육 및 배치 스코어링 중에 동일한 변환 구현이 데이터에 적용됩니다.

온라인 예측 : 권장 -훈련을받는 비다를 피하고 교육 데이터를 앞쪽으로 준비합니다.

배치 스코어링 : 권장 .

온라인 예측 : 권장 .

훈련 중 변환 로직 및 계산 된 통계는 서빙을 위해 내보내는 모델에 첨부 된 텐서 플로 그래프로 저장되므로 두 용도 모두 권장됩니다.

배치 스코어링 : N/A- 이와 같은 응집체는 실시간 이벤트를 기반으로 계산됩니다.

온라인 예측 : OK - 교육 (배치) 및 서빙 (스트림) 중에 동일한 Apache Beam 변환이 데이터에 적용됩니다.

텐서 플로 *
( input_fn & serving_fn )

배치 스코어링 : 권장되지 않습니다 .

온라인 예측 : 권장되지 않습니다 .

두 경우 모두 훈련 효율성을 위해서는 교육 데이터를 미리 준비하는 것이 좋습니다.

배치 스코어링 : 불가능합니다 .

온라인 예측 : 불가능합니다 .

배치 스코어링 : N/A- 이와 같은 응집체는 실시간 이벤트를 기반으로 계산됩니다.

온라인 예측 : 불가능합니다 .

* Tensorflow를 사용하면 교차, 임베딩 및 1 가지 인코딩과 같은 변환은 feature_columns 열로 선언적으로 수행되어야합니다.

무엇 향후 계획