pipx install insanely-fast-whisper 한 줄로 설치하고, GPU가 있다면 기본 구현 대비 약 19배 빠른 로컬 트랜스크립션을 즉시 경험할 수 있습니다. (저장소: Vaibhavs10/insanely-fast-whisper · ⭐12.9k · Apache 2.0 · Python)insanely-fast-whisper는 OpenAI Whisper 모델을 Flash Attention 2 + 배치 처리로 극한까지 최적화하여, 150분짜리 오디오를 단 98초 만에 트랜스크립션(음성→텍스트 변환)하는 Python CLI 도구입니다. 원본 Whisper 대비 약 19배 빠르며, 클라우드 API 없이 100% 로컬에서 동작합니다.
일반 Whisper는 오디오를 순서대로 한 조각씩 처리합니다. insanely-fast-whisper는 오디오를 30초 단위 조각 24개를 한꺼번에 GPU에 올려 병렬로 처리합니다. 게다가 GPU 내부의 느린 창고(HBM) 대신 빠른 선반(SRAM)만 써서 작업하는 Flash Attention 2 덕분에, 속도가 기하급수적으로 빨라집니다.
핵심은 수학적 결과는 완전히 동일하다는 점입니다. 빠르면서도 정확도는 원본 Whisper와 같습니다.
insanely-fast-whisper는 벤치마크 쇼케이스로 시작했다가 커뮤니티 요청으로 CLI 도구로 진화한 독특한 이력을 갖습니다. 충격적인 속도(19배)와 극도로 낮은 진입 장벽이 바이럴의 두 축입니다.
PyTorch 기본 구현은 최적화가 전혀 없습니다. 긴 오디오를 처리하려면 30분 넘게 기다려야 하고, GPU가 있어도 활용도가 낮습니다. 클라우드 API를 쓰면 비용이 발생하고 프라이버시도 보장되지 않습니다.
Flash Attention 2로 GPU 메모리 병목을 해소하고, 배치 처리(batch_size=24)로 GPU 병렬성을 극대화합니다. pipx 한 줄 설치에 API 키도 불필요하고 데이터는 로컬에만 머뭅니다.
| 비교 항목 | insanely-fast-whisper | faster-whisper | WhisperX | OpenAI API |
|---|---|---|---|---|
| 속도 (GPU 배치) | 최고 (Flash Attn) | 보통 | 보통 | 클라우드 의존 |
| CPU 지원 | 가능 (느림) | CTranslate2 최적 | faster-whisper 기반 | 해당 없음 |
| 화자분리 | pyannote 선택적 | 없음 | 단어 수준 포함 | 없음 |
| 설치 난이도 | pipx 한 줄 | 보통 | 복잡 | API 키만 |
| 비용 | 무료 | 무료 | 무료 | 분당 과금 |
| 기술 | 역할 | 세부 사항 |
|---|---|---|
| Python ≥3.8 | 메인 언어 | CLI + 유틸리티 전체 |
| PyTorch | 딥러닝 프레임워크 | GPU 텐서 연산, CUDA/MPS 디바이스 관리 |
| Hugging Face Transformers | 모델 허브 + 파이프라인 | pipeline("automatic-speech-recognition") |
| Hugging Face Accelerate | 하드웨어 추상화 | 디바이스 배치 자동화 |
| Flash Attention 2 | GPU 어텐션 최적화 (별도 수동 설치·선택) | SRAM 타일링으로 메모리 대역폭 병목 해결. pyproject.toml dependencies에 미포함 — pipx runpip insanely-fast-whisper install flash-attn으로 별도 설치 |
| 기술 | 역할 |
|---|---|
| pyannote.audio ≥3.1 | 화자분리(Diarization) — HF 토큰 필요 |
| rich ≥13.7 | 터미널 프로그레스 바 |
| setuptools ≥68.2 | 패키지 빌드 |
| 기술 | 역할 |
|---|---|
| PDM | Python 패키지 매니저 (pdm-backend, PEP 621 준수) |
| pipx | 격리된 CLI 설치 — 의존성 충돌 방지 |
| Jupyter Notebook | 벤치마크 실험 (Google Colab 연동) |
※ 아래는 프로그래밍 방식 직접 호출 예제입니다. CLI에서는 --flash True 플래그를 별도로 지정해야 Flash Attention 2가 활성화됩니다(기본값: --flash False → sdpa 사용).
pipe = pipeline(
"automatic-speech-recognition",
model="openai/whisper-large-v3",
torch_dtype=torch.float16,
device="cuda:0",
model_kwargs={
"attn_implementation": "flash_attention_2" # 핵심 최적화
} if is_flash_attn_2_available()
else {"attn_implementation": "sdpa"} # 폴백
)
is_flash_attn_2_available()로 Flash Attention 2 지원 여부를 런타임에 감지하고, 미지원 시 PyTorch의 SDPA(Scaled Dot-Product Attention)로 자동 폴백합니다. "최적화를 시도하되, 실패해도 동작한다"는 Graceful Degradation의 교과서적 예시입니다.
outputs = pipe(
"<audio_file>",
chunk_length_s=30, # 30초 단위로 오디오 분할
batch_size=24, # 24개 청크를 동시 처리
return_timestamps=True
)
| 파일 | 역할 | LOC(추정) |
|---|---|---|
| cli.py | argparse 인자 파싱 → Pipeline 구성 → 추론 실행 → JSON 출력 | ~100 |
| diarization_pipeline.py | pyannote.audio 모델 로드 → 화자분리 실행 | ~50 |
| diarize.py | 전처리(preprocess_inputs) → 분리 → 후처리 | ~80 |
| result.py | JsonTranscriptionResult TypedDict 정의 + build_result() | ~20 |
전체 코드베이스가 약 250줄로 매우 가볍습니다. HuggingFace와 pyannote가 복잡한 부분을 처리하고, 이 레포는 그것을 잘 조합하는 최소한의 접착제 역할만 합니다.
pipeline() 함수 하나로 ASR, 번역, 요약 등 다양한 NLP 태스크를 즉시 실행할 수 있습니다. 모델 다운로드, 전처리, 추론이 한 줄에 포함됩니다.
# ASR 파이프라인 — 한 줄에 모델 다운로드 + 전처리 + 추론 포함
pipe = pipeline("automatic-speech-recognition", model="openai/whisper-large-v3")
# 다른 태스크도 동일한 패턴
pipe_summ = pipeline("summarization", model="facebook/bart-large-cnn")
pipe_ner = pipeline("ner", model="dslim/bert-base-NER")
| 최적화 | 효과 | 적용 방법 |
|---|---|---|
| fp16 | 메모리 절반, 속도 2배 | torch_dtype=torch.float16 |
| 배치 처리 | GPU 병렬 활용 | batch_size=24 |
| Flash Attention 2 | IO 병목 해소 | attn_implementation="flash_attention_2" |
model_kwargs = (
{"attn_implementation": "flash_attention_2"}
if is_flash_attn_2_available()
else {"attn_implementation": "sdpa"}
)
Flash Attention이 없어도 SDPA로 동작하고, Mac MPS에서는 --device-id mps로 대응하며, OOM 발생 시 --batch-size를 줄여서 대응합니다. 하드웨어 환경에 관계없이 항상 최선의 선택을 자동으로 합니다.
from pyannote.audio import Pipeline
diarization_pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token=hf_token
)
argparse로 인자 관리, rich로 프로그레스 바, pipx로 격리 설치, pyproject.toml + PDM으로 모던 Python 패키징을 배울 수 있습니다.
| GPU | 추천 batch_size | 예상 성능 | 비고 |
|---|---|---|---|
| NVIDIA A100 80GB | 24 | ~98초 (Flash Attn) | 최적 환경 |
| NVIDIA RTX 4090 24GB | 12~16 | ~3~5분 | 가성비 최고 |
| NVIDIA RTX 3090 24GB | 8~12 | ~5~8분 | VRAM 주의 |
| Apple M1/M2/M3 | 4 | ~15~25분 | --device-id mps 필수, ~12GB RAM 사용 |
| CPU Only | 1 | 매우 느림 | 권장하지 않음 |
# Mac에서는 반드시 --device-id mps 추가
insanely-fast-whisper --file-name audio.mp3 --device-id mps --batch-size 4
# 메모리 부족 시 batch_size를 더 줄임
insanely-fast-whisper --file-name audio.mp3 --device-id mps --batch-size 2
pipx로 설치 후 유튜브 영상/팟캐스트 오디오를 트랜스크립션하고 JSON 결과를 분석합니다.
# 1. 설치
pipx install insanely-fast-whisper
# 2. 트랜스크립션 실행
insanely-fast-whisper --file-name my_audio.mp3 --transcript-path result.json
# 3. 출력 JSON 구조 분석
cat result.json | python -m json.tool
fp32 vs fp16, 배치 크기별 속도를 직접 측정하여 GPU 최적화의 효과를 체감합니다.
import time, torch
from transformers import pipeline
configs = [
{"dtype": torch.float32, "batch": 1, "label": "fp32, batch=1"},
{"dtype": torch.float16, "batch": 1, "label": "fp16, batch=1"},
{"dtype": torch.float16, "batch": 8, "label": "fp16, batch=8"},
{"dtype": torch.float16, "batch": 24, "label": "fp16, batch=24"},
]
for cfg in configs:
pipe = pipeline("automatic-speech-recognition",
model="openai/whisper-large-v3",
torch_dtype=cfg["dtype"], device="cuda:0")
start = time.time()
pipe("test_audio.mp3", chunk_length_s=30, batch_size=cfg["batch"])
print(f"{cfg['label']}: {time.time()-start:.2f}s")
한국어 오디오를 영어로 실시간 번역합니다.
insanely-fast-whisper \
--file-name korean_audio.mp3 \
--task translate \
--language Korean \
--transcript-path korean_to_english.json
화자 분리 포함 트랜스크립션 후 "화자A: 발언내용" 형식의 회의록 마크다운을 자동 생성합니다.
insanely-fast-whisper \
--file-name meeting.mp3 \
--hf-token YOUR_HF_TOKEN \
--diarization_model pyannote/speaker-diarization-3.1 \
--num-speakers 4 \
--timestamp word \
--transcript-path meeting_transcript.json
insanely-fast-whisper를 백엔드로 활용한 REST API 서버를 구축합니다.
from fastapi import FastAPI, UploadFile
from transformers import pipeline
import torch
app = FastAPI()
pipe = pipeline("automatic-speech-recognition",
model="openai/whisper-large-v3",
torch_dtype=torch.float16, device="cuda:0",
model_kwargs={"attn_implementation": "sdpa"})
@app.post("/transcribe")
async def transcribe(file: UploadFile):
audio_path = f"/tmp/{file.filename}"
with open(audio_path, "wb") as f:
f.write(await file.read())
result = pipe(audio_path, chunk_length_s=30, batch_size=24,
return_timestamps=True)
return {"text": result["text"], "chunks": result["chunks"]}
OpenAI Whisper 논문 읽기 (Robust Speech Recognition via Large-Scale Weak Supervision), Encoder-Decoder Transformer 아키텍처 이해, HuggingFace Transformers pipeline() API 마스터, 모델 크기(tiny~large) 비교 실험.
fp16/bf16 혼합 정밀도 학습(PyTorch AMP), Flash Attention 2 논문 리딩(FlashAttention-2: arXiv:2307.08691), CUDA 메모리 관리(HBM vs SRAM), PyTorch Profiler로 bottleneck 분석.
librosa/torchaudio로 오디오 전처리, Mel Spectrogram 이해(Whisper 입력 포맷), pyannote.audio 화자분리 파이프라인 구축, VAD(Voice Activity Detection) 원리.
FastAPI + GPU 서버로 REST API 구축, Docker 컨테이너화(NVIDIA Container Toolkit), 배치 처리 큐 설계(Celery + Redis), WebSocket 기반 실시간 스트리밍 트랜스크립션.
Whisper 모델 파인튜닝(LoRA/QLoRA), distil-whisper 구조 분석(지식 증류), faster-whisper(CTranslate2) 아키텍처 비교, 나만의 ASR CLI 도구 개발.
| 키워드 | 설명 |
|---|---|
| ASR | Automatic Speech Recognition. 음성을 텍스트로 변환하는 기술 |
| Whisper | OpenAI가 개발한 다국어 ASR 모델. 68만 시간의 다국어 데이터로 훈련됨 |
| Flash Attention 2 | GPU SRAM 타일링을 활용해 어텐션 연산의 IO 병목을 해소하는 최적화 기법. 수학적으로 정확하면서 2~3배 빠름 |
| SDPA | Scaled Dot-Product Attention. PyTorch 2.0에 내장된 최적화된 어텐션 구현. Flash Attention의 폴백 |
| fp16 | Half Precision. 32비트 대신 16비트 부동소수점을 사용해 메모리와 연산을 절반으로 줄이는 기법 |
| Chunking | 긴 오디오를 30초 단위 조각으로 나누는 방식. Whisper의 최대 입력 길이 제한에 대응 |
| Batching | 여러 오디오 청크를 한꺼번에 GPU에 올려 병렬 처리. GPU 활용도를 극대화 |
| Diarization | "누가 언제 말했는가"를 식별하는 기술. pyannote.audio 모델이 대표적 |
| MPS | Metal Performance Shaders. Apple Silicon GPU 가속을 위한 PyTorch 백엔드 |
| HBM | High Bandwidth Memory. GPU의 대용량 메모리. 크지만 SRAM보다 느림 |
| SRAM | Static RAM. GPU 칩 내부의 초고속 캐시. 매우 빠르지만 용량이 작음 (A100 기준 ~20MB) |
| CTranslate2 | faster-whisper가 사용하는 C++ 기반 Transformer 추론 엔진. 양자화 지원 |
| distil-whisper | 지식 증류(Knowledge Distillation)로 Whisper를 경량화한 모델. 속도↑ 정확도 약간↓ |
| pipx | Python CLI 도구를 격리된 가상환경에 설치하는 도구. 의존성 충돌 방지 |
| PDM | PEP 621 준수 Python 패키지 매니저. pyproject.toml 기반 |
| Graceful Degradation | 일부 기능이 사용 불가해도 나머지가 정상 동작하도록 설계하는 원칙 |