protobuf(library) 개념에 대해 알아보자
공식 문서: https://developers.google.com/protocol-buffers
protobuf(protocol buffers) 란?
•프로토콜 버퍼는 구조화된 데이터를 직렬화 하는 방식이며 라이브러리이다.
•구글에서 개발했으며, 15년 정도 개발 과정을 겪었다.
•버전은 2가지로 존재한다.proto2, proto3(더많은 언어 지원)
장단점
•장점:
•크기(용량)가 작으며 JSON 보다 빠르다.
•Native language binding을 제공한다
•Native language: 컴퓨터가 이해할 수 있는 언어 ex.Binary는 컴퓨터가 이해할 수 있는 언어이다
•Language binding: 두개의 프로그램 언어의 연결(binding), 따라서, C언어로 작성된 라이브러리를 python에서 사용할 수 있다.
•Cross-language Compatibility
•지원되는 언어: C++, C#, Java, Kotlin, PHP, Python, Ruby, Objective-C, Dart, Go
•같은 메시지를 다른 언어로 읽을 수 있다.
•단점:
•데이터를 한번에 메모리에 올려야 하기 때문에, few megabytes를 넘기면 사용하지 않는 것을 권장한다.
구조
그림1에서 볼 수 있듯이 proto파일에 있는 message juhwan에 관련된 field의 값들이 compiler를 통해 serialized 된 채로 저장이 된다.
.proto (JSON파일 처럼 구조화 된 데이터를 표현한다.)
protoc는 protobuffer의 compiler이다.
활용 사례
#TFX에서는 어떻게 사용되는지 알아보자.
1. Arguments 전달
TFX에는 .proto 파일은 미리 만들어져 있으며 해당 .proto에 대한 compiled *_pb2.py 도 존재한다.
Ex) trainer_pb2.py
해당 파일에는 train 과정에 필요한 arguments들이 binary 형태로 저장되어 있다.
추후에, 실제 pipeline의 train를 실행시킬 때 아래 [그림4]에서 나타나듯이 데이터를 deserialize 한다.
2. Output file
TFX components의 결과물로 protobuf 를 자주 마주치게 된다.
ex. saved_model.pb
파일이름에 pb는 protobuf를 의미하며 binary 형태의 파일이다.
위의 1번 활용 예제는 example_pb2.py 파일 안에 데이터가 byte-string으로 있었지만 saved_model.pb 파일은 .py 파일이 아니다.
무엇이 다른 것일까?
쉽게 설명하자면, *.pb 파일은 위의 1번 활용예제의 trainer_pb2.py 안에 있는 binary 데이터만 저장되어있는 형태인 것이다.
그림으로 설명하면 아래 그림과 같다.
이 시점에서 문득 이런 생각이 떠오를 것이다. 이번에는 .pb 파일을 deserialize와 serialize를 어떻게 하지? 왜냐하면, 1번 예제에서는 trainer_pb2.py를 import해서 de/serialize를 진행했지만, 이 경우에는 없기 때문이다.
정답은 TFX 라이브러리에서 자체적으로 .pb 파일에 대한 .py 파일을 가지고 있다.실제로, 코드로 테스트하면서 알아보고 싶었지만.. debug 과정에서 에러가 계속 발생해서 실습은 더 이상 진행하지 않았다.
결론
protobuf는 데이터를 de/serialize 하기 위한 라이브러리이며,
protobuf의 workflow를 이해하기 위해서 .proto, compiled file(*_pb2.py)의 파일들이 필요했다.
TFX에서는 .proto, compiled file이 미리 구현이 되어있어서 편리하다.공식 문서: https://developers.google.com/protocol-buffers
'MLOps' 카테고리의 다른 글
TFX components (0) | 2022.07.27 |
---|---|
TFX ML Metadata (0) | 2022.05.03 |
TFX Guide Local pipeline example (0) | 2022.04.25 |
Practitioners guide to MLOps (0) | 2022.04.25 |
TFX paper (0) | 2022.04.22 |