- 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은 로컬 추론 애플리케이션 배포를 가능하게 하는 핵심 기반임
- Modal은 WER 테스트와 CUDA 검증에 쓰이는 크레딧을 제공함
- Blacksmith는 릴리스 결과물을 검사하는 CI/CD 일부를 지원함
- Hugging Face는 handy-computer 조직에 비공개 저장 공간을 제공해 모델을 자유롭게 업로드할 수 있게 함
개발 과정의 AI 활용
- ggml 기반의 이 정도 규모 엔진을 개인이 몇 달 만에 처음부터 작성하기는 어렵다고 판단해 개발에 AI 지원을 활용함
- 프로젝트 소개문은 AI로 작성하지 않았으며 직접 말하거나 입력한 문장으로 구성됨