Hugging Face Transformers v4.2.0 TensorFlow 성능 및 서빙 업데이트
Hugging Face는 견고함과 추론 속도를 높이기 위해 여러 주요 모델에 대한 TensorFlow 구현을 업데이트했습니다. 이러한 개선 사항은 특히 BERT, RoBERTa, ELECTRA, MPNet을 대상으로 하며, graph/eager mode, TensorFlow Serving, 그리고 CPU, GPU, TPU 장치 전반에 걸쳐 성능 향상을 제공합니다.
연산 성능 향상
Transformers v4.2.0은 TensorFlow 모델의 연산 속도를 크게 향상시킵니다. 시퀀스 길이 128인 GPU V100에서 v4.2.0 BERT 구현을 공식 Google 구현과 비교한 벤치마크 결과, v4.2.0 버전이 최대 ~10% 더 빠릅니다.
| Batch size | Google implementation (ms) | v4.2.0 implementation (ms) | Relative difference |
|---|---|---|---|
| 1 | 6.7 | 6.26 | 6.79% |
| 2 | 9.4 | 8.68 | 7.96% |
| 4 | 14.4 | 13.1 | 9.45% |
| 8 | 24 | 21.5 | 10.99% |
| 16 | 46.6 | 42.3 | 9.67% |
| 32 | 83.9 | 80.4 | 4.26% |
| 64 | 171.5 | 156 | 9.47% |
| 128 | 338.5 | 309 | 9.11% |
또한, v4.2.0 구현은 4.1.1 릴리스에 포함된 버전보다 두 배 더 빠릅니다.
TensorFlow Serving 통합
프로덕션 환경에서 이러한 성능 이점을 활용하기 위해, Hugging Face는 모델을 HTTP 및 gRPC API를 통해 배포할 수 있게 해주는 TensorFlow Extended (TFX)의 구성 요소인 TensorFlow Serving과의 통합을 최적화했습니다.
SavedModel 형식
TensorFlow Serving은 모델이 SavedModel 형식이어야 하며, 이 형식은 모델 아키텍처와 가중치를 독립적인 패키지에 포함합니다. 이 형식을 사용하면 원래 소스 코드 없이도 모델을 실행할 수 있으며 C++, Java, Go, JavaScript와 같은 백엔드를 지원합니다.
Transformers v4.2.0부터 SavedModel을 생성할 때 세 가지 주요 개선 사항이 포함됩니다:
- 유연한 시퀀스 길이: 이제 실행 간에 시퀀스 길이를 자유롭게 수정할 수 있습니다.
- 입력 가용성: 모든 모델 입력이 추론을 위해 사용 가능합니다.
- 그룹화된 출력:
output_hidden_states=True또는output_attentions=True를 사용할 때hidden states또는attention이 단일 출력으로 그룹화됩니다.
커스텀 서빙 시그니처
사용자는 모델을 서브클래싱하여 커스텀 서빙 시그니처를 정의할 수 있습니다. 이는 input_ids (token IDs) 대신 inputs_embeds (token embeddings)를 전달할 때 필요합니다. serving 메서드를 오버라이드하고 특정 input_signature와 함께 @tf.function 데코레이터를 사용함으로써, 개발자는 SavedModel에 대해 예상되는 입력의 정확한 이름, 데이터 유형 및 형태를 정의할 수 있습니다.
배포 워크플로우
감성 분류를 위한 BERT 모델을 배포하는 과정은 세 단계로 이루어집니다:
- 모델 생성: 모델 (예:
nateraw/bert-base-uncased-imdb)을 로드하고model.save_pretrained("my_model", saved_model=True)를 사용하여 h5 가중치와 함께SavedModel버전을 생성합니다. - 컨테이너화: Docker를 사용하여
tensorflow/serving이미지를 가져오고,SavedModel을 컨테이너의 models 폴더로 복사한 뒤,MODEL_NAME환경 변수를 설정하여 이미지를 커밋합니다. - 추론: REST API (HTTP POST 요청을 통해) 또는 gRPC API (
tensorflow_serving.apis사용)를 사용하여 배포된 모델을 쿼리합니다.
향후 방향
Hugging Face는 배포 파이프라인을 더욱 단순화하기 위해 전처리 단계를 SavedModel에 직접 통합할 계획입니다.