Hugging Face Inference Endpoints ASR 및 화자 구분 파이프라인

Hugging Face는 자동 음성 인식(ASR), 화자 구분 및 추측 디코딩을 결합한 모듈식 파이프라인을 배포할 수 있게 하는 맞춤형 추론 핸들러를 출시했습니다. 이 구현을 통해 개발자는 단일 API 엔드포인트를 노출하여 여러 모델을 통합할 수 있으며, 특히 OpenAI의 Whisper를 전사에, Pyannote를 화자 식별에 활용합니다.

모듈식 파이프라인 아키텍처

파이프라인은 특정 사용 사례에 따라 구성 요소를 활성화하거나 비활성화할 수 있는 모듈식 시스템으로 설계되었습니다. 핵심 구성 요소는 다음과 같습니다:

  • ASR Module: Whisper 모델을 사용하여 고품질 음성-텍스트 전사를 수행합니다.
  • Diarization Module: 최신 오픈소스 구현인 Pyannote speaker-diarization-3.1 모델을 활용해 화자별로 전사를 식별하고 구분합니다.
  • Speculative Decoding: 작은 어시스턴트 모델(예: distilled Whisper 모델)을 사용해 생성 후보를 제시하고, 이를 큰 메인 모델이 검증함으로써 추론을 가속화합니다.

기술 요구 사항 및 제약 조건

성능 최적화를 위해 구현에서는 PyTorch 2.2를 사용하며, 이는 SDPA를 통해 Flash Attention 2를 기본 지원합니다.

추측 디코딩은 특정 기술적 제한을 도입합니다:

  • Architecture Match: 어시스턴트 모델의 디코더 부분은 메인 모델과 동일한 아키텍처를 가져야 합니다.
  • Batch Size: 추측 디코딩은 배치 크기 1을 요구합니다. 더 큰 배치를 필요로 하는 프로덕션 환경에서는 표준 추론이 어시스턴트 생성보다 더 빠를 수 있습니다.

성능 벤치마크

NVIDIA A10 GPU에서 openai/whisper-large-v3를 메인 모델로, distil-whisper/distil-large-v3를 어시스턴트 모델로 사용하여 수행한 벤치마크 결과, 추측 디코딩은 짧은 오디오 클립에 매우 효과적이지만 긴 클립에서는 효율성이 떨어짐을 보여줍니다:

  • Short Audio (8s): 어시스턴트 생성 평균 326.96ms, 비어시스턴트 생성은 784.35ms.
  • Long Audio (60s): 비어시스턴트 생성 평균 3.48초, 어시스턴트 생성은 4.15초.

이 성능 차이는 긴 오디오가 자동으로 배치로 나뉘어 처리되면서, 추측 디코딩의 배치 크기 1 제한과 충돌하기 때문입니다.

배포 및 구성

배포는 handler.py(초기화 및 추론), diarization_utils.py(전처리 및 후처리), config.py(설정) 등 세 개의 주요 파일로 구성된 맞춤형 핸들러를 통해 관리됩니다.

구성 매개변수

ModelSettingsInferenceConfig 클래스를 통해 모델 설정을 관리합니다. 사용자는 엔드포인트 생성 시 환경 변수 또는 API 호출을 통해 매개변수를 조정할 수 있습니다. 주요 매개변수는 다음과 같습니다:

  • Task: transcribetranslate 중 선택.
  • Batch Size: 기본값은 24이며, 어시스턴트 생성 시에는 1이어야 합니다.
  • Assisted Flag: 추측 디코딩 사용 여부를 결정하는 불리언.
  • Speaker Constraints: diarization 파이프라인을 위해 num_speakers, min_speakers, max_speakers를 정의하는 옵션.

API 통합

배포가 완료되면 엔드포인트는 base64 인코딩된 오디오 파일을 받습니다. 요청은 inputs 필드에 오디오를 포함하고 parameters 딕셔너리로 InferenceConfig 설정을 조정하는 JSON 페이로드를 통해 전송됩니다. 이는 표준 Python requests 또는 Hugging Face InferenceClient를 사용해 구현할 수 있습니다.

Sources