피드로 돌아가기
Faster TensorFlow models in Hugging Face Transformers
Hugging Face BlogHugging Face Blog
Backend

Hugging Face가 TensorFlow Transformers 모델을 최적화해 BERT 추론 속도를 Google 공식 구현 대비 최대 10% 단축 및 v4.1.1 대비 2배 개선

Faster TensorFlow models in Hugging Face Transformers

2021년 1월 26일10intermediate

Context

Transformers 라이브러리의 TensorFlow 모델 구현이 Google의 공식 BERT 구현 및 이전 버전(v4.1.1)과 비교할 때 추론 성능이 뒤쳐져 있었다. 프로덕션 환경에서 모델을 배포할 때 효율적인 서빙 방식이 필요했다.

Technical Solution

  • BERT, RoBERTa, ELECTRA, MPNet 모델의 계산 그래프 최적화: eager mode 및 graph mode 모두에서 추론 속도 개선
  • TensorFlow Serving v4.2.0 기반 SavedModel 배포 전략: 독립형 SavedModel 포맷으로 Java, Go, C++, JavaScript 백엔드 호환성 확보
  • SavedModel 구조 개선: 시퀀스 길이 가변 지원, 모든 모델 입력값 추론에 노출, hidden states 및 attention 값 단일 출력으로 통합
  • TensorFlow Serving 배포 옵션 제시: Docker 컨테이너, apt 패키지, pip 설치 중 선택 가능
  • Custom Serving Signature 구현 방식 제공: input_ids 대신 inputs_embeds를 직접 전달 가능하도록 tf.function 데코레이터의 input_signature 오버라이드

Impact

  • BERT 추론 속도: 배치 사이즈 1에서 6.79% 단축(Google: 6.7ms → v4.2.0: 6.26ms), 배치 8에서 10.99% 단축(Google: 24ms → v4.2.0: 21.5ms), 배치 128에서 9.11% 단축(Google: 338.5ms → v4.2.0: 309ms)
  • 이전 버전 대비 성능 향상: v4.1.1 대비 약 2배 빠른 추론 속도 달성
  • GPU V100, CPU, TPU 장비 전반에서 일관된 성능 개선

Key Takeaway

Transformers 라이브러리가 SavedModel 형식 표준화와 추론 최적화를 결합함으로써 엔지니어들이 TensorFlow Serving을 통해 프로덕션 환경에서 사전 학습 모델을 즉시 배포 가능하게 했다. 크로스 플랫폼 호환성(Java, Go, C++, JavaScript)과 HTTP/gRPC 듀얼 API 지원으로 다양한 백엔드 환경에 통합할 수 있다는 점이 핵심 가치다.


Hugging Face Transformers v4.2.0 이상을 사용하는 팀에서 TensorFlow 기반 BERT/RoBERTa 모델을 프로덕션에 배포할 때, SavedModel 형식으로 export하고 TensorFlow Serving Docker 컨테이너에서 gRPC 또는 HTTP API로 서빙하면 Google 공식 구현 대비 최대 10% 레이턴시 감소와 2배 처리량 향상을 얻을 수 있다.

원문 읽기