Transcribe.cpp: 크로스 플랫폼 로컬 음성 인식 라이브러리

1 day ago 6
  • transcribe.cpp는 여러 최신 음성 인식 모델을 Mac·Windows·Linux 앱에 쉽게 내장하고 GPU로 가속하기 위해 만든 ggml 기반 라이브러리임
  • 16개 ASR 계열·60개 이상 모델을 Vulkan·Metal·CUDA·TinyBLAS에서 실행하며 스트리밍과 배치 전사를 모두 지원함
  • 모든 모델을 참조 구현과 수치 비교하고 수천 개 발화로 WER 테스트했으며, 검증 결과를 저장소와 Hugging Face에 공개함
  • 기존 whisper.cpp용 .bin 파일을 실행하고 대부분의 용도에서 비슷한 성능으로 대체할 수 있으며, Python·JavaScript/TypeScript·Rust·ObjC/Swift 공식 바인딩도 제공함
  • 저전력 RK3566에서도 실시간보다 빠르게 전사할 수 있어 음성을 클라우드로 보내지 않고 다양한 장치에 로컬 ASR을 배포할 수 있음

크로스 플랫폼 ASR 배포의 제약

  • 기존 크로스 플랫폼 ASR 추론 선택지는 사실상 whisper.cpp와 ONNX로 제한됨
    • Apple 장치에는 MLX를 추가할 수 있지만, 그러면 두 개의 엔진을 지원하고 엔진마다 모델을 포팅해야 함
    • ONNX는 Handy에 모델을 빠르게 추가하는 데 유용했으나 CPU 전용 실행으로는 성능을 충분히 활용하기 어려웠음
  • 여러 모델을 지원하는 일부 라이브러리는 작성자와 테스트 수준, 유지보수 계획이 불명확함
    • 실제 데스크톱·모바일 앱에서 쓸 바인딩이 있는지, 데모 코드에 그치는지, 벤치마크가 있는지, ONNX보다 빠른지 확인하기 어려웠음
  • Handy의 크로스 플랫폼 음성 입력 배포 경험을 바탕으로 다음 조건을 충족하는 엔진이 필요했음
    • 파일을 내려받아 바로 추론할 수 있어야 함
    • 추론 품질이 참조 구현과 동등한지 검증할 수 있어야 함
    • 최고 성능을 위해 GPU에서 실행되어야 함
    • 대규모 PyTorch 라이브러리 없이 Handy에 쉽게 내장할 수 있어야 함
    • Mac·Windows·Linux에서 동작해야 함
  • ggml은 강한 커뮤니티와 편리한 배포 방식을 갖춰 이 요구를 구현할 기반으로 선택됨

지원 모델과 가속 방식

  • transcribe.cpp는 빠르고 정확한 추론과 폭넓은 모델 지원을 목표로 함
    • 16개 ASR 계열과 60개 이상 모델을 지원하며 더 많은 모델을 추가할 예정임
    • 공개된 최신 전사 모델 대부분을 지원하지만 아직 빠진 모델도 있음
    • 스트리밍 전사와 배치 전사를 모두 제공함
  • 모든 지원 모델은 다음 가속 백엔드에서 실행 가능함
    • Vulkan
    • Metal
    • CUDA
    • TinyBLAS
  • 모델별 벤치마크는 Fedora 환경의 Ryzen 4750U CPU·Vulkan과 M4 Max에서 수행함
  • Vulkan 지원을 로컬 추론 애플리케이션 배포의 최소 조건으로 삼음

참조 구현과 정확성 검증

  • Hugging Face에서 구한 .onnx 모델의 추론 정확도를 확신하기 어려웠던 경험을 바탕으로 모든 모델을 참조 구현과 수치 검증
  • 수치 비교와 함께 전체 WER 점검을 실행해 참조 구현과 같은 출력을 내는지 확인함
    • 모델마다 수천 개 발화를 처리함
    • 결과는 참조 구현과 매우 가깝거나 동일함
  • 검증 데이터는 transcribe.cpp 저장소와 handy-computer Hugging Face 조직의 각 모델 페이지에 공개됨

whisper.cpp 호환성

  • Handy에서 사용하던 whisper.cpp를 교체할 수 있도록 드롭인 대체에 가까운 호환성을 구현함
  • Handy와 함께 배포된 whisper.cpp용 .bin 모델 파일을 transcribe.cpp에서도 실행할 수 있음
  • whisper.cpp의 일부 플래그와 기능은 아직 지원하지 않음
  • 대부분의 용도에서 whisper 구현은 충분히 안정적이며, 대략 비슷한 성능으로 whisper.cpp를 대체할 수 있음

언어 바인딩과 유지보수

  • C/C++로 작성됐으며 로컬 전사를 여러 환경에 배포할 수 있도록 공식 유지보수 바인딩을 제공함
    • Python
    • JavaScript/TypeScript
    • Rust
    • ObjC/Swift
  • 다른 언어 바인딩의 기여도 환영하지만, 기여자가 해당 바인딩의 유지보수를 맡아야 함
  • Handy의 실제 요구가 라이브러리 설계에 반영됐으며, Handy 유지보수 경험을 바탕으로 transcribe.cpp도 계속 관리할 계획임
  • 다양한 ASR 모델과 실제 사용 사례를 지원하며 얻은 경험을 반영했지만, 아직 처리하지 못하는 사례가 있어 외부 기여를 받고 있음
  • 현재 버전은 v0.1.0으로 거친 부분이 남아 있어 이슈 보고를 요청함

저전력 장치까지 확장하는 로컬 ASR

  • 장치에서 직접 ASR을 실행하기 쉽게 만들어 음성을 클라우드 서비스로 보낼 필요를 줄이는 것이 목표임
  • 성능이 낮은 RK3566 CPU에서도 모델을 실시간보다 빠르게 실행할 수 있음
  • 최신 모델을 이용한 실시간 이상의 전사 속도가 수 W 수준의 전력으로 동작함
  • 더 많은 추론을 로컬에서 처리하려면 애플리케이션에 추론 엔진을 배포하고 실행하는 과정이 쉬워져야 함
  • transcribe.cpp 하나로 로컬 추론 배포 문제 전체를 해결할 수는 없지만, 로컬 ASR의 진입 장벽을 낮추는 단계로 개발됨

프로젝트를 뒷받침한 지원

  • Mozilla AI, BiR 프로그램, Mozilla AI의 Davide가 구체적인 제품 형태가 없던 초기 탐색 단계부터 프로젝트를 지원함
  • ggml은 로컬 추론 애플리케이션 배포를 가능하게 하는 핵심 기반임
  • ModalWER 테스트와 CUDA 검증에 쓰이는 크레딧을 제공함
  • Blacksmith는 릴리스 결과물을 검사하는 CI/CD 일부를 지원함
  • Hugging Face는 handy-computer 조직에 비공개 저장 공간을 제공해 모델을 자유롭게 업로드할 수 있게 함

개발 과정의 AI 활용

  • ggml 기반의 이 정도 규모 엔진을 개인이 몇 달 만에 처음부터 작성하기는 어렵다고 판단해 개발에 AI 지원을 활용함
  • 프로젝트 소개문은 AI로 작성하지 않았으며 직접 말하거나 입력한 문장으로 구성됨
Read Entire Article