요약
- whisperkit은 ondeivce를 위한 streaming stt 모델임
본문
abstract
- Realtim ASR 모델은 많은 commercial application of ML의 blocking이 였음
- 온디바이스에 최적화된 추론 시스템인 whisperkit을 제안함
- 다른 server-side 시스템들과 벤치 마크했음 whisperkit은 0.46s 정도의 가장 낮은 latency를 기록했음. accuracy는 2.2% wer임
Introduction
- 프론티어 모델들은 하나의 모델을 서빙하기 위해 수십조의 파라미터를 갖고 있음
- 동시에 task focused 모델(distil 모델)들은 프론티어 모델들의 추론비용의 부분만 갖고도 정확도는 거의 비슷하거나 그 이상임
- 따라서 프론티어 모델은 빠른 프로토 타입 or 클라우드 기반의 추론 API를 통한 time to market 용이될 것이고 task-focused 모델은 on-device 형태로 사용될것 임
- ASR whisper large v3 turbo는 10억개의 파라미터를 가진 Encoder-decoder 트랜스포머 모델로 많은 프론티어 모델의 성능과 비슷하거나 뛰어넘음
- whisperkit은 on-device에 최적화된 추론 시스템
- 우리의 whisper 시스템 구조는 아래 contribution을 만들어냈음
- 우리는 위스퍼 시스템 구조를 audio encoder 가 native하게 스트리밍 추추론하게 하고 text decoder 모델은 부분 오디오 만으로도 정확한 출력 텍스트 스트림을 산출할 수 있게끔 했음
- whisper를 apple neural engine의 가속을 받을 수 있게끔 했음
- wer를 유지하면서 whisper를 압축했음 (1.6GB => 0.6GB)
Method
- whisper는 audio encoder와 text decoder로 구성되어 있는데, 이게 native 하게 streaming inference를 지원하지 않아서 문제가 되었음
Audio encoder
- whisper 오디오 인코더는 30초의 오디오 chunk만 처리가능함
- 1초 latencty 목표로 단순 streaming implementaion 구현은오디오 입력이 들어올 때마다 현재까지 쌓인 길이를 30초 길이까지 제로 패딩 그리고 버퍼가 갱신될 때마다 (즉 새 오디오가 들어올 때마다) 최대 1초 간격으로 오디오 인코더에 넣어 forward pass(추론) 실행
- 1분의 streaming 추론 구현은 최소한 60번의 audio encoder 추론이 필요하고, 이것은 거의 30분의 오디오 처리와 맞먹음
- Moonshine은 whisper의 30초 패딩 규칙을 해결하기위해 rearchitecting했음. 물론 이러한 방식은 streaming에서 효율이 향상되었지만, 긴 오디오 형식에서 성능이 감소했음 게다가 공개된 모델들이 tiny와 base로 확장되지 않았기 때문에 state of the art 모델과 차이도 있었음
오디오 인코드를 파인튜닝을 통해 스트리밍에 적합하게 만드는 방법
- 오디오 인코더 트랜스포머를 lower triangular attention mask로 파인 튜닝하는건 self attention layer를 더 인과적 구조가된다.
- 기존의 look ahead 추론은 스트리밍에 맞지 않음
- 이러한 기술은 기존의 양방향 self attention으로 인해 발생한 look-ahead conditioing을 제거하고 증가하는 입력 오디오 스트림에 대한 kv caching을 가능하게 함
- 우리는 self-distillation을 whisper large v3모델을 common voice 17을 이용해 적용했음
- 우리 실험에서 lower triangular causal attention mask가 too strict하고 성능을 저하해서 대신에 attention mask를 완화하고, block diagonal하게 만듦, block이 15초 오디오 chunk를 표현하게끔
- 오디오 인코더의 self distillation 후에도 text decoder는 여전히 30초 오디오 buffer가 필요했음 하지만 streaming inference는 이 버퍼를 다 사용하지 않기 때문에 대부분의 입력 버퍼를 zero padding 해야해서 불필요한 계산과 latency가 발생함
- block diagonal masking이 침묵구간을 caching 가능하게 함
- 15초 동안의 zero padded block들은 컴파일 타임에 계산될 수 있고, 러닝 타임에 inference가 가능함
block causal 과 block diagonal 방식의 차이
- block-causal masking 은 d750과 비슷한 정확도로 3배 짧은 오디오 블록이 필요로 했음 하지만 block-diagonal과 다르게, block-causal conditioning은 30초 window안에서 이전 블록에 대한 kv 캐싱이 필요로했음 그리고 silence caching을 지원하지 않음
파인튜닝과 다국어 전사 성능
- d750 변수는 original모델의 fine tuning을 통해 얻어짐
- 우리는 파인 튜님 모델은 기존 모델보다 파인튜님된 언어들에 대해 더 낮은 wer를 얻을 수 있을거라고 생각했음
- figure 4는 wer를 1%내에서 유지하면서 기존 모델보다 더 나은 wer를 확인할 수 있었음, 중국어에서는 예외가 있었는데 이건 dataset size 때문인거 같음
Text decoder
whisper text desoder의 한계, hypothesis text
- audio encoder와 다르게 고정된 audio buffer에 대해 whisper text decoder는 스트리밍 방식으로 동작 가능함
- 하지만 여전히 단순 streaming implementation은 문제가 됨
- output transcript buffer는 임시 텍스트 토큰으로 채워지고 buffer가 반복적으로 flush 와 refill을 진행하함, audio encoder가 forward pass 한 이후에, text decoder가 full transcript buffer를 확신 할 수 있기 전까지 "endoftranscript"를 예측함으로써 이 이벤트가 일어나기전에 모든 text token 예측은 변할 수 있음, 그리고 audio cursor는 앞으로 진행하지 못함(심각한 지연)
- 우리는 이런 임시적인 결과를 hypothesis text라고 명명하기로 함
Local Agreement
- Liu가 z 작성중 - Local Agreement 알고리즘를 제안함
- 이러한 방식은 whisperkit과 concurrent work에서도 사용했는데, dual 결과 stream을 만듦
- Comfirmed Text stream: 유저 경험을 leverage 시킬 수 있음 안정적이고 정확한 결과를 만듦으로서
- Hypothesis Text: 저 지연과 반응성을 확보할 수 있음
- Hypothesis text는 realtime transcription systems이 1초 이하 지연을 달성하는데 과거를 수정에 대한 유연성을 유지함으로서 도움을 줌 하지만 수정 수가 높고, 이것은 결과적으로 유저 경험에 악영향을 줄것임
Speculative Decoding
- Recurrent Drafter
- light Weight RNN drafter가 기존 모델의 은닉층을 바탕으로 미래의 토큰을 예측하는데 사용하는 loss가 적은 speculative decoding algorithm
- drafter model을 훈련함으로써 whisper large v3와 large v3 turbo를 2.94x, 2.83x 개선함
- 이 이론적 가속은, verification overhead 고려해도 유지되는데, verification overhead는 text descoder의 성능 저하를 말하는데 한번에 1토큰씩 디코더를 돌리는 대신 16토큰을 병렬로 디코더로 넣어 실행하기때문에 생긴다.
- verification overhead: 병렬 디코딩으로 인한 성능 저하
- cheng 은 Apple siliicon GPU가 Nvidia보다 더 적은 speedup을 하는 것을 발견했는데 이는 병렬 verification overhead가 큰 모델에서 부하를 발생시키는 것으로 보인다.
- 우리는 Apple Neural Engine 구현에서 더 높은 출력을 만들 수 있었음 verification overhead를 줄임으로써
- 하지만 우리는 whisper turbo 3에 speculative decoding을 사용하지 않았는데, the drafter overhead 때문임
- 드래프터 모델을 4번 돌려서 발생하는 성능 저하
- Whisper Large v3에는 이러한 overhead가 상대적으로 작아서 사용함
On device Constraints
Energy
- Apple
- Neural Engine with A12 chip for iPhone XS
- Neural Engine with Mac and iPad with M1 chip
- Android
- Qualcoomm, Mediatek NPU(Neural Processing Unit)
- Snapdragon 8, Dimensity
- Qualcoomm, Mediatek NPU(Neural Processing Unit)
- ANE, NPU는 제대로 활용되고 있지 못함 lack of public documentation and tooling이 부족해서
- computational photography, speech recognition 같은 os feature 에 대한 inference를 사용하는 firmware 레벨의 device maker만 사용했음
- 2022년 apple이 Deploy Transformers on Apple Neural Engine이라는 논문에서 0.1 billion인 트랜스포머 모델이 아이폰에 배포되는 걸 보여줌, 그리고 서버 사이드 추론보다 더 빠른걸 보여줌
- 2024년에는 알려지지 않은 Apple Intelligence에 30억 파라미터를 가진 트랜스포머를 ㅁ보여줌
- 하지마 Apple intelligence를 통해 원하는 성능을 얻는 건 쉽지 않은데, documentation이 잘 안되어 있음
- 필수 tooling은 CoreML에서 가능함
- WhisperKit는 ane-transformers위에 빌드되어 있고 추가적인 최적화가되어 있는데, apple intelligence 만큼의 퍼포먼스를 내기 위해 coreML을 이용했음
- Stateful Models feature는 최대로 사용가능한데, whisper text decoder의 kv caching을 이용하면
- 이것은 whisper large v3 turbo의 45% latency 감소로 이어짐
- 가장 중요한건, forward pass를 위한 에너지 소모가 75% 감소함
Memory
- model size는 on device 배포 life cycle에서 다른 병목을 가져옴
- 모델 파일이 반드시 end user device에 OTA로 분산되어 있어야함 앱 다운로드 후에, 앱 사이즈를 줄이기 위함. 그리고 모델 업데이트와 소프트웨어 업데이트를 분산하기 위함
- ondevice sdk로 인해 올라가야하는 app size는 5MB 안쪽이여야함
- 모델 사이즈가 2GB 이상이면 end user friendly 하지 않음
- peak memory 사용은 모델의 가중치에 의해 결정되고 on device 배포에 최적화된 모델은 2GB의 램을 차지해야함, 가상화된 universal device support를 받기 위해서
- 1 billion, float16
- 4 billion, 4bit precision
- Whisper large v3 turbo require 1.6GB float 16
- 단순 압축 모델을 wer 상승과 hallucination 그리고 transcript를 예상하는데 반복적인 패턴을 갖고옴
- Whisperkit은 새로운 compression인 outlier decomposed mixed-bit palletization을 1% 미만의 wer과 기존 모델을 1GB이하로 낮추기 위해 도입했음
- MBP(mixed bit palettization)은 23년에 stable diffusion xl을 압축하기 위해 만들어졌음 natively하게 압축을 가속함 palettization을 통해서 이어서 MBP는 채택되고 향상되었음 to achieve low bit , high accuracy weight compression을 하기 위해서
- OD(Outlier Decomposition)은 22년에 선형 layer의 forward pass를 낮은 비트 precision과 높은 비트 precision으로 분해하기 위해 제안되었습니다. 에러를 최소화하면서, low bit compression에 의한
- Outlier는 결정된느데 channel-wise magnitude statistics를 기반해서 진행됨
- 정의에 의해, 그들은 데이터의 1%이하를 나타냄 하지만 이러한 기술을 추론을 가속화 할 수 없음
- 왜냐면 latency가 low bit로 부터 얻어지는데, 적은 메모리 대역폭