MLOps

TFT 독립 실행형으로 실행하기

백악기작은펭귄 2022. 1. 6.
반응형

TFT 독립 실행형으로 실행하기

변환 함수를 실행하는 방법에는 두 가지가 있다. 머신러닝 파이프라인의 일부로서 TFX 컴포넌트 형태로 전처리 변환을 실행하는 것독립 실행형으로 실행하는 것이 그것이다. 두 방법 모두 로컬 아파치 빔 설정 또는 구글 클라우드 데이터플로 서비스에서 수행할 수 있다. 기본적으로는 TFT를 머신러닝 파이프라인의 일부로 통합하여 사용하는 것이 일반적이나, 파이프라인이 아닌 외부에서 데이터를 처리해야 할 경우 독립 실행형을 채택하는 것이 효율적이다.

 

간단한 소규모 샘플 데이터셋에 정규화 처리를 적용하는 예제를 수행해보자.

# small data sample
raw_data = [
            {'x':   1.20},
            {'x':   2.99},
            {'x': 100.00}
]

 

먼저 데이터 스키마를 정의해야 한다. 다음 코드를 통해 피처에서 스키마를 생성할 수 있다.

import tensorflow as tf
from tensorflow_transform.tf_metadata import dataset_metadata
from tensorflow_transform.tf_metadata import schema_utils

raw_data_metadata = dataset_metadata.DatasetMetadata(
    schema_utils.schema_from_feature_spec({
        'x':tf.io.FixedLenFeature([], tf.float32),
    })
)

 

TFT는 AnalyzeAndTransformDataset 피처를 사용하여 아파치 빔에서 실행하기 위한 바인딩을 제공한다. 이 피처의 실행은 tft_beam.Context를 통해 수행되며, 데이터셋을 분석하고 변환한다.

import tempfile
import tensorflow_transform.beam.impl as tft_beam

# 이전에 정의한 preprocessing_fn()
def preprocessing_fn(inputs):
  x = inputs['x']
  x_normalized = tft.scale_to_0_1(x)

  return {
      'x_xf': x_normalized
  }

with beam.Pipeline() as pipeline:
  with tft_beam.Context(temp_dir=tempfile.mkdtemp()):

    tfrecord_file = './TFRecords_File.tfrecord'
    raw_data = (
        pipeline|beam.io.ReadFromTFRecord(tfrecord_file)
    )

    transformed_dataset, transform_fn = (
        (raw_data, raw_data_metadata)|tft_beam.AnalyzeAndTransformDataset(preprocessing_fn)
    )

 

* 아파치 빔은 텐서플로우 모델을 구축할 때 beam.io를 통해 파일 수집을 효과적으로 처리하는 beam.io.ReadFromtext, beam.io.ReadFromTFRecord() 등의 함수를 제공한다.

 

아파치 빔 함수 AnalyzeAndTransformDataset()을 사용하여 raw_data와 raw_data_metadata에 preprocessing_fn()을 적용하고, 두 개의 아티팩트를 반환하였다. 반환된 아티팩트는 각각 transformed_dataset과 transform_fn에 할당되었는데, 이름에서 알 수 있듯이 전처리된 데이터셋과 이를 만든 변환 함수를 의미한다.

 

결과를 출력하면 다음과 같이 처리된 데이터셋이 표시된다.

transformed_data, transformed_metadata = transformed_dataset

print(transformed_data)
[
 {'x_xf': 0.0},
 {'x_xf': 0.018117407},
 {'x_xf': 1.0}
]

 

아파치 빔의 실행은 단순한 처리만으로도 상당히 복잡한 과정을 거쳐야하므로, 되도록이면 TFX를 사용하여 실행하도록 하는 것이 좋다.

반응형

댓글