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를 사용하여 실행하도록 하는 것이 좋다.
'MLOps' 카테고리의 다른 글
TFX 모델 학습 - 모델 정의하기 (0) | 2022.01.10 |
---|---|
TFT를 머신러닝 파이프라인에 통합하기 (0) | 2022.01.08 |
TFT를 이용한 데이터 전처리 (0) | 2022.01.05 |
데이터 전처리 (0) | 2022.01.04 |
머신러닝 파이프라인에 TFDV 통합하기 (0) | 2022.01.03 |
댓글