일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 메타버스
- docker
- 네트워크
- COFIBA
- 플랫폼
- 자연어처리
- 추천시스템
- BERT
- 미국석사
- 클라우드
- 머신러닝
- MAB
- BERT이해
- aws자격증
- nlp
- transformer
- AWS
- 클라우드자격증
- MLOps
- llm
- 중국플랫폼
- RecSys
- BANDiT
- Collaborative Filtering Bandit
- 언어모델
- chatGPT
- 머신러닝 파이프라인
- MSCS
- TFX
- HTTP
- Today
- Total
Julie의 Tech 블로그
MLOps, 머신러닝 파이프라인 설계 - (2) TFX, Apache Beam 개요 본문
$ pip install tfx
import tensorflow_data_validation as tfdv
import tesnorflow_transform as tft
import tensorflow_transform.beam as tft_beam
from tfx.components import ExampleValidator
from tfx.components import Evaluator
from tfx.components import Transform
본 글은 이전 시리즈에 이어 머신러닝 파이프라인 설계시 사용되는 주요 프레임워크, 툴들에 대해 개괄적으로 다뤄볼 것이다.
우선 파이프라인 설계시 사용되는 TFX와 Orchestration 툴 Apache Beam에 대해 알아보자.
Introduction to TFX
TFX, Tensorflow Extended 라이브러리는 머신러닝 파이프라인 구성시 필요한 요소들을 제공해준다.
앞선 글에서 다루었던 일반적인 머신러닝 파이프라인 구성요소별로 나누어서 살펴보자.
- Data Ingestion : ExampleGen
- Data Validation : StatisticsGen, SchemaGen
- Data Preprocessing : Transform
- Model Training : Trainer
- Trained Model : ResolverNode
- Model Analysis : Evaluator
- Model Deployments : Pusher
TFX 라이브러리를 본격적으로 알아보기 전에 TFX를 사용할 수 있는 환경을 구성해야할 것이다.
터미널에서 라이브러리를 설치하고 import 해보자.
$ pip install tfx
import tensorflow_data_validation as tfdv
import tesnorflow_transform as tft
import tensorflow_transform.beam as tft_beam
from tfx.components import ExampleValidator
from tfx.components import Evaluator
from tfx.components import Transform
TFX의 각 구성요소들은 task를 수행하는 것 외에도 다른 일들을 한다.
단순하게 생각해보면 어떤 input을 받을 것이고, 그에 따라 일을 하고, 결과를 낼 것이다.
이를 TFX의 용어로 좀 더 다듬어보면, Driver, Executor, Publisher로 나뉜다.
Driver는 metastore로 부터 쿼리를 해오고(경로 등), Executor는 업무를 수행하고, Publisher는 그 결과를 metastore로 돌려준다.
이 때 Driver로 들어오는 input과 Publisher에서 나가는 output은 artifact 라고 부른다.
Artifact가 될 수 있는 사례로는 raw 데이터, 가공된 데이터, 학습된 모델 등이 있다.
이처럼 TFX의 구성요소(components)는 metadata와 지속적으로 주고받는 구조이다.
이 때 한 가지가 궁금할 수 있다. components 끼리 직접 소통하는 것이 아니라 metastore를 끼는 이유가 무엇일까?
정보를 한 군데로 집중적으로 모으기 위해서이다.
우리가 실제로 TFX라이브러리를 사용해보면 ML Metadata(MLMD) API 를 통하여 데이터를 저장하게 된다.
MLMD 데이터가 실제로 저장되는 곳은 DB 류인데, MySQL, SQLite, 인메모리 데이터베이스 3가지를 지원한다.
이러한 데이터로 여러 가지 유용한 기능을 제공할 수 있게 되는데, 예를 들어 학습된 데이터 결과를 매 실행마다 서로 비교하여 모델 성능이 개선되었는지를 트래킹할 수 있다.
Jupyter Notebook 환경에서 TFX 라이브러리를 사용해 간단한 머신러닝 파이프라인을 만들어보자.
주피터 노트북을 활용하면 매 셀 실행 결과를 바로 볼 수 있어 component가 어떻게 동작하는지를 볼 수 있다.
import tensorflow as tf
from tfx.orchestration.experimental.interactive.interactive_context import InteractiveContext
context = InteractiveContext() // Component 실행을 조종하고, 각 artifact를 보여주는 기능
// 여기서 InteractiveContext는 인메모리 ML MetadataStore를 구성한다
여기서 Context는 각 component를 run하고, 그 부산물을 보여주는 instance이다.
component 하나를 구성하고, 아래와 같이 실행해볼 수 있다.
from tfx.components import StatisticsGen
statistics_gen = StatisticsGen(examples=example_gen.outputs['examples'])
context.run(statistics_gen) // 이와 같이 context에 component를 구성한 뒤 run 시키면 됨
Component 실행 결과는 두 가지로 볼 수 있는데, 우선 하나는 쉘 결과창으로 보는 것이다.
다른 하나는 URI를 통해 콘솔 화면에서 시각화된 부산물을 볼 수 있다는 것이다.
context.show(statistics_gen.outputs['statistics']) // context 의 결과물을 보여줌
// 아래 코드와 같이 artifact property에도 접근이 가능하다
for artifact in statistics_gen.outputs['statistics'].get():
print(artifact.uri)
이 때 우리는 interactive한 파이프라인(InteractiveContext)을 구성했기 때문에 위와 같이 시각적으로도 볼 수 있는 것이다.
TFX 외에도 대체가능한 여러 라이브러리들이 있다. TFX는 Tensorflow와 Keras를 머신러닝 프레임워크로 사용할 것이라 가정하기 때문이다.
예를 들어 AirBnb에서도 AeroSolve라는 프레임워크를 제공하고, Netflix에서도 Metaflow라는 프레임워크를 제공한다.
회사별로 프레임워크를 개발했기 때문에, 각 회사 특성마다 조금씩 프레임워크 환경이 다르다.
Introduction to Apache Beam
TFX Components와 라이브러리 중 대다수가 파이프라인을 효율적으로 프로세싱하는 데에 있어 Apache Beam을 사용하고 있다.
TFX를 설치할 때도 Apache Beam에 어느정도 의존성(dependency)이 있어 Apache Beam에 대해서도 함께 살펴보자.
이번에는 Apache Beam이 TFX의 뒤(back)에서 어떻게 동작하는지를 좀 더 초점에 두고 살펴볼 것이다.
https://ko.coursera.org/lecture/ml-pipelines-google-cloud/apache-beam-E1qHy
Apache beam은 배치 프로세스를 지원하고, 실시간 운영(Operation)을 원활하게 할 수 있도록 지원한다.
설치는 동일하게 아래와 같이 진행한다.
$ pip install apache-beam
만약 GCP나 AWS환경에서 apache-beam을 사용한다면 pip install apache-beam[gcp]와 같이 환경을 지정해서 설치가 가능하다.
아파치 빔은 두 가지 개념을 이해해야한다.
- Collections : 데이터를 읽었거나 쓰고 있는 operation에 대해 설명
- Transformations : 데이터를 조작하는 방법에 대해 설명
TFX가 뼈대를 만드는 거라면, 빔은 그 처리를 효율적으로 하기 위한 백단 환경이라고 볼 수 있다.
빔은 collection과 transformation을 정의하더라도 파이프라인을 실제로 실행하지 않는 이상 어떠한 데이터도 로드되거나 변형되지 않는다.
설명만으로 이해가 잘 안간다면 좀 더 예제로 살펴보자.
Collection 의 가장 베이직한 개념은 '파일을 읽는다' 혹은 '파일을 쓴다(write)' 이다. PCollections로 그 기능을 볼 수 있다.
collection이 변형되어 최종 결과물로 만들어지면, 그 결과물이 파일 시스템에 작성되는 것이다.
// basic Collections example
import apache_beam as beam
with beam.Pipeline() as p:
lines = p | beam.io.ReadFromText(input_file)
...
output | beam.io.WriteToText(output_file)
아파치 빔에서는 데이터가 Transformation을 거쳐 조작된다. Transformation 연산들은 pipe operator로 불리는 | 로 연결된다.
// basic Transformation example
counts = (
lines
| 'Split' >> beam.FlatMap(lambda x: re.findall(r'[A-Za-z\']+', x))
| 'PairWithOne' >> beam.Map(lambda x: (x,1))
| 'GroupAndSum' >> beam.CombinePerKey(sum)
)
위 예시는 간단하게 line별로 파일을 읽어들여 단어별 빈도수를 집계하는 코드이다.
아래는 Apache beam 독스에서 가져온 Apache beam 코드 snippet이다. 파일을 읽고 쓰는 과정에 있어 최소한의 코드라고 볼 수 있다.
import re
import apache_beam as beam
from apache_beam.io import ReadFromText
from apache_beam.io import WriteToText
from apache_beam.options.pipeline_options import PipelineOptions
from apache_beam.options.pipeline_options import SetupOptions
input_file = "gs://dataflow-samples/shakespeare/kinglear.txt" 1
output_file = "/tmp/output.txt"
# Define pipeline options object.
pipeline_options = PipelineOptions()
with beam.Pipeline(options=pipeline_options) as p: 2
# Read the text file or file pattern into a PCollection.
lines = p | ReadFromText(input_file) 3
# Count the occurrences of each word.
counts = ( 4
lines
| 'Split' >> beam.FlatMap(lambda x: re.findall(r'[A-Za-z\']+', x))
| 'PairWithOne' >> beam.Map(lambda x: (x, 1))
| 'GroupAndSum' >> beam.CombinePerKey(sum))
# Format the counts into a PCollection of strings.
def format_result(word_count):
(word, count) = word_count
return "{}: {}".format(word, count)
output = counts | 'Format' >> beam.Map(format_result)
# Write the output using a "Write" transform that has side effects.
output | WriteToText(output_file)
Apache Beam 파이프라인을 통해 텍스트 파일을 읽어들이는 data collection을 만들고, 해당 collection에 transformation을 적용한다.
아래는 Beam 지원이 가능한 TFX Component 목록이다.
https://ko.coursera.org/lecture/ml-pipelines-google-cloud/apache-beam-E1qHy
다음 글에서는 본격적으로 머신러닝 파이프라인 각 단계별로 상세하게 다뤄볼 것이다.
참고자료
https://learning.oreilly.com/library/view/building-machine-learning/9781492053187/
'Tech > MLOps' 카테고리의 다른 글
MLOps, 머신러닝 파이프라인 설계 - (4) Data Validation (1) | 2021.09.20 |
---|---|
ML Ops, 머신러닝 파이프라인 설계 - (3) Data Ingestion (0) | 2021.09.07 |
MLOps, 머신러닝 파이프라인 설계 - (1) 개요 (1) | 2021.09.01 |
도커 - 네트워킹 / bridge와 overlay (0) | 2021.05.30 |
Spark, Zeppelin, Scala에 대해 (0) | 2021.05.12 |