Hugging Face의 TensorFlow 철학
Hugging Face는 TensorFlow에 대해 "Keras‑first" 철학을 채택하여 Keras를 우회해야 할 장애물이 아니라 주요 고수준 API로 취급합니다. 이 접근 방식은 변환기 모델이 fit(), compile(), predict()와 같은 표준 Keras 워크플로와 완전히 호환되도록 보장하면서, XLA를 활용해 JAX 및 PyTorch와 성능을 맞춥니다.
Keras와의 깊은 통합
transformers 라이브러리의 모든 TensorFlow 모델과 레이어는 Keras Model 및 Layer 객체로 구현됩니다. 이 설계 덕분에 사용자는 저수준 학습 루프를 작성할 필요 없이 표준 Keras 메서드를 사용해 학습 및 추론을 수행할 수 있습니다.
모델 구성 및 유연성
Keras 서브클래싱을 통해 하이브리드 모델을 만들 수 있습니다. 사용자는 언어 모델과 비전 트랜스포머를 병합하는 등 여러 사전학습 모델을 하나의 Keras 모델로 결합할 수 있습니다. 이를 통해 고수준 API의 장점을 유지하면서 복잡한 아키텍처를 개발할 수 있습니다.
자동 손실 함수
학습 과정을 단순화하기 위해 Hugging Face는 기본 모델 및 출력 유형에 맞는 기본 손실 함수를 제공합니다. 사용자가 compile()을 손실 인수 없이 호출하면, 라이브러리는 패딩 및 마스킹을 올바르게 처리하는 손실 함수를 자동으로 제공합니다(예: BERT의 마스크드 언어 모델링 손실). 사용자는 compile()에 사용자 정의 손실을 지정하거나 서브클래스 모델에서 자체 train_step()을 구현하여 이를 재정의할 수 있습니다.
표준화된 라벨 처리
라벨은 이제 입력 딕셔너리에 포함되는 대신 표준 Keras 관례에 따라 별도 인수로 또는 (inputs, labels) 튜플의 일부로 전달됩니다. 이 변경으로 표준 Keras 메트릭과의 호환성이 보장되고 사용자 혼란이 감소합니다.
데이터 파이프라인 최적화
전체 토크나이즈된 데이터셋을 RAM에 로드하는 메모리 오버헤드를 피하기 위해 Hugging Face는 datasets 라이브러리를 tf.data와 통합합니다.
prepare_tf_dataset()을 이용한 효율적인 스트리밍
작은 데이터셋은 NumPy 배열로 변환할 수 있지만, 큰 데이터셋은 prepare_tf_dataset() 메서드가 더 유리합니다. 이 메서드는 데이터셋을 tf.data.Dataset 객체로 래핑하여 다음을 가능하게 합니다:
- 온‑더‑플라이 로딩: 데이터를 메모리에 로드하지 않고 디스크에서 스트리밍합니다.
- 동적 패딩: 전체 데이터셋이 아니라 배치 단위로 패딩을 적용해 패딩 토큰 수를 줄이고 학습 속도를 높입니다.
- 자동 필터링: 모델이 해당 아키텍처에 유효하지 않은 입력 이름을 가진 데이터셋 컬럼을 자동으로 제외합니다.
성능 및 배포
XLA 가속
Hugging Face는 TensorFlow와 JAX가 공유하는 JIT 컴파일러인 XLA(Accelerated Linear Algebra)를 활용해 선형대수 코드를 최적화하고 실행 속도와 메모리 사용량을 낮춥니다.
주요 성능 향상 내용:
- 생성 속도: XLA를 사용한 최신
generate()코드는 텍스트 생성 속도가 PyTorch보다 빠르고 JAX와 비슷합니다. - 학습 속도: TF 모델은 언어 모델 학습과 같은 작업에서 JAX 수준의 속도에 도달했습니다.
XLA의 한계 중 하나는 정적 입력 형태가 필요하다는 점이며, 가변 시퀀스 길이는 반복적인 재컴파일을 유발해 성능 이점을 상쇄할 수 있습니다.
엔드‑투‑엔드 배포
TF Serving 및 TFX를 통한 배포를 간소화하기 위해 Hugging Face는 토크나이징을 모델 아티팩트에 직접 포함시키는 작업을 진행 중입니다. 이를 통해 추론 시 외부 토크나이저 라이브러리에 대한 의존성을 없앨 수 있습니다. BERT와 같은 일반 모델의 경우, 토크나이저와 모델을 하나의 Keras Model로 래핑한 EndToEndModel을 생성해 원시 문자열을 입력으로 받을 수 있습니다.
커뮤니티 및 모델 공유
모델은 push_to_hub()를 사용해 Hugging Face Hub에 업로드할 수 있으며, 이 과정에서 모델 페이지와 자동 생성된 모델 카드가 만들어집니다. 이를 통해 파인튜닝된 모델도 기본 모델과 동일한 API로 취급되어, 공유 아티팩트와 관행이 열린 생태계에서 활용될 수 있습니다.