Whisper를 자체 호스팅하면 사용자가 제어하는 하드웨어에서 전사 작업을 수행할 수 있지만, “로컬”이 “자동으로 개인정보가 보호됨”을 의미하지는 않습니다. 신뢰할 수 있는 환경을 구축하려면 네 가지 요소가 필요합니다. 적합한 Whisper 구현체, 다운로드한 모델 파일, 반복 가능한 오디오 처리 파이프라인, 임시 파일, 로그, 백업 및 노출된 로컬 API를 모두 보호하는 보안 경계입니다.
이 가이드에서는 현재 이용 가능한 세 가지 방법을 소개합니다. OpenAI의 참조 Python 패키지, 최적화된 Python 추론을 위한 faster-whisper, 가벼운 C/C++ 배포를 위한 whisper.cpp입니다. 아래의 명령어와 모델 관련 안내는 2026년 8월 28일에 각 프로젝트의 공식 문서를 기준으로 확인했습니다.
간단한 추천
- 참조 구현체와 가장 간단한 공식 CLI를 원한다면 OpenAI Whisper로 시작하세요.
- Python 서비스, 배치 처리, 양자화 또는 통합 음성 활동 감지(VAD)가 필요하다면 faster-whisper를 선택하세요.
- 컴팩트한 네이티브 빌드, Apple Silicon 지원, CPU 중심 배포, 공식 Docker 이미지 또는 소형 로컬 HTTP 서버를 원한다면 whisper.cpp를 선택하세요.
Whisper 자체 호스팅의 의미와 한계
Whisper는 음성 인식 모델이자 오픈 소스 코드베이스입니다. 자신의 컴퓨터에서 구현체를 실행하면 호스팅되는 전사 API에 녹음 파일을 보내지 않고도 추론 단계를 수행할 수 있습니다. 필요한 패키지와 모델 자산이 모두 갖춰지면 인터넷 연결 없이도 전사 작업을 수행할 수 있습니다.
이는 유용한 개인정보 보호 경계가 되지만 완전한 보안 프로그램은 아닙니다. 로컬 추론이 임시 파일, 명령 기록, 애플리케이션 로그, 내보낸 전사 결과, 운영 체제 백업, 공유 폴더 또는 네트워크 포트에서 대기하는 서비스를 자동으로 보호하지는 않습니다. 모델 설치 프로그램도 모델 이름을 처음 요청할 때 가중치를 다운로드할 수 있습니다.
워크플로를 “오프라인”이라고 부르기 전에 네트워크를 비활성화한 상태에서 테스트하고 다음 사항을 확인하세요.
- 패키지나 모델을 가져오려고 시도하지 않고 애플리케이션이 시작되는지
- 선택한 모델이 알려진 로컬 경로에서 로드되는지
- 입력 오디오와 생성된 텍스트가 승인된 디렉터리에 유지되는지
- 임시 파일이 보관 정책에 따라 삭제되는지
- 의도한 인터페이스 이외의 경로에서 HTTP 서버에 접근할 수 없는지
모델을 선택하기 전에 구현체를 선택하세요
세 가지 방법 모두 Whisper 제품군 모델을 실행하지만 종속성, 명령 이름, 모델 형식 또는 성능 특성이 동일하지 않습니다. 다른 구현체를 위해 작성된 명령어를 복사하는 대신 운영 환경에 맞는 런타임을 선택하세요.
| 구현체 | 가장 적합한 용도 | 주요 종속성 모델 | 중요한 보안 경계 |
|---|---|---|---|
| OpenAI Whisper | 참조 CLI 및 Python API | Python, PyTorch, FFmpeg | 올바른 PyTorch CPU/CUDA 빌드 선택 |
| faster-whisper | 최적화된 Python 서비스, 배치 처리, INT8, VAD | Python 및 CTranslate2 | 설치된 릴리스에 따라 GPU 라이브러리 요구 사항이 다름 |
| whisper.cpp | 네이티브 CPU/Apple 빌드, 양자화, Docker, 로컬 서버 | CMake 및 지원되는 컴파일러 | 변환된 GGML 모델 파일 및 다른 CLI 이름 사용 |
모델을 선택하고 하드웨어 크기를 조정하세요
OpenAI는 현재 6가지 모델 크기를 제공합니다. README에는 대략적인 VRAM 요구 사항과 특정 참조 GPU에서 측정한 상대 속도가 나와 있습니다. 이 수치는 대략적인 선별에 유용하지만 보장되지는 않습니다. 실제 메모리와 속도는 구현체, 정밀도, 배치 크기, 빔 크기, 언어, 오디오 길이 및 하드웨어에 따라 달라집니다.
| 공식 모델 이름 | 매개변수 | OpenAI 표의 대략적인 VRAM | 실질적인 시작점 |
|---|---|---|---|
| tiny | 39 M | ~1 GB | 빠른 파일럿 또는 제한된 장치 |
| base | 74 M | ~1 GB | 가벼운 영어 또는 다국어 전사 |
| small | 244 M | ~2 GB | 균형 잡힌 CPU 또는 보급형 GPU 파일럿 |
| medium | 769 M | ~5 GB | 더 높은 정확도의 다국어 작업 |
| large | 1,550 M | ~10 GB | 하드웨어가 허용할 때의 최대 참조 모델 용량 |
| turbo | 809 M | ~6 GB | 빠른 전사, 번역은 아님 |
OpenAI의 표에서 turbo는 테스트 비교에서 large의 참조 속도보다 대략 8배 빠르다고 설명합니다. 이를 “모든 컴퓨터에서 8배 빠르다”는 약속으로 바꾸지 마세요. Turbo는 번역용으로 학습되지 않았습니다. 비영어 음성을 영어로 번역하는 작업이라면 OpenAI는 medium 또는 large와 같은 다국어 모델을 대신 사용할 것을 권장합니다.
영어 전용 녹음 파일의 경우 tiny, base, small, medium의 .en 변형을 테스트해 볼 가치가 있습니다. 운영 환경의 크기를 결정하려면 동일한 대표 파일을 두 개의 후보 모델에서 실행하고 최대 메모리, 실제 소요 시간, 전사 오류 및 수정 시간을 기록하세요.
시스템과 깨끗한 테스트 파일 준비
패키지 버전을 확인하고 되돌릴 수 있도록 전용 프로젝트 디렉터리와 가상 환경을 만드세요. GPU에서 OpenAI Python 구현체를 사용하는 경우 공식 PyTorch 설치 프로그램에서 운영 체제와 CUDA 설정에 맞는 최신 PyTorch 명령어를 선택하세요. 튜토리얼에서 오래된 CUDA 휠 URL을 복사하지 마세요.
OpenAI Whisper는 FFmpeg 명령줄 도구가 필요합니다. 지원되는 패키지 관리자 또는 공식 FFmpeg 다운로드 페이지를 통해 설치한 후 다음을 확인하세요.
ffmpeg -version
python --version
FFmpeg는 모든 Whisper 구현체에 보편적으로 필수인 종속성은 아닙니다. 예를 들어 whisper.cpp는 자체 예제 도구를 통해 지원되는 입력을 디코딩할 수 있으며, 선택 사항인 FFmpeg 통합은 형식 지원을 확장합니다. whisper.cpp용 예측 가능한 16kHz 모노 16비트 WAV 테스트 파일을 만들려면 다음을 사용하세요.
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
이름, 숫자, 두 명의 화자, 조용한 간격, 도메인 특화 용어 하나를 포함하는 짧고 동의를 얻은 샘플을 사용하세요. 이 단일 테스트 파일이 완벽하게 깨끗한 데모 클립보다 더 많은 배포 문제를 드러낼 것입니다.
방법 1: OpenAI Whisper 설치
프로젝트 디렉터리 안에서 터미널을 열고 가상 환경을 만든 다음 활성화하고 최신 패키지를 설치하세요.
python -m venv .venv
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# macOS 또는 Linux
source .venv/bin/activate
pip install -U openai-whisper
공식 CLI로 첫 번째 전사를 실행하세요.
whisper audio.mp3 --model turbo
첫 번째 실행 시 선택한 모델이 다운로드될 수 있습니다. 완료되면 예상 출력 파일이 생성되었는지 확인하고 소스 오디오와 대조하여 여러 타임스탬프를 확인하세요. 자동 감지가 신뢰할 수 없는 비영어 동일 언어 전사의 경우 언어를 지정하세요.
whisper japanese.wav --language Japanese --model turbo
영어 번역의 경우 turbo를 사용하지 마세요.
whisper japanese.wav --model medium --language Japanese --task translate
최소한의 Python 호출도 똑같이 간단합니다.
import whisper
model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
방법 2: faster-whisper 설치
faster-whisper는 CTranslate2를 통해 Whisper 모델을 실행합니다. 설정 가능한 정밀도, 배치 처리, 단어 타임스탬프 또는 내장 VAD 필터링이 포함된 Python 통합이 필요할 때 유용합니다.
python -m venv .venv
source .venv/bin/activate # Windows: .\.venv\Scripts\Activate.ps1
pip install faster-whisper
GPU 경로를 가정하기보다 명시적인 장치와 연산 유형으로 시작하세요.
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe(
"audio.mp3",
beam_size=5,
vad_filter=True,
)
print("Detected language:", info.language)
for segment in segments:
print(f"[{segment.start:.2f} - {segment.end:.2f}] {segment.text}")
반환된 세그먼트는 지연 생성되므로 반복문을 통해 전사를 수행하세요. NVIDIA 배포의 경우 블로그 게시물의 오래된 CUDA/CUDNN 조합에 의존하지 말고 최신 faster-whisper 저장소의 GPU 라이브러리 요구 사항을 따르고 설치된 버전을 확인하세요.
벤치마크에는 조건이 필요합니다. faster-whisper 프로젝트는 현재 large-v2에서 INT8을 사용하고 RTX 3070 Ti 8GB에서 2,926 MB를 사용했으며, 빔 크기는 5이고 저장소에 명시된 소프트웨어 스택을 사용한 사례를 보고합니다. 이 결과는 테스트된 구성을 보여줄 뿐, 모든 모델, GPU, 배치 크기 또는 오디오 파일이 동일한 메모리를 사용한다는 약속이 아닙니다.
방법 3: whisper.cpp 빌드
현재 프로젝트는 ggml-org/whisper.cpp에 있으며 문서화된 퀵 스타트에서 CMake를 사용합니다. 저장소를 복제하고 변환된 모델을 다운로드한 다음 CLI를 빌드하세요.
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
sh ./models/download-ggml-model.sh base.en
cmake -B build
cmake --build build -j --config Release
명시적인 모델 경로로 전사를 실행하세요.
./build/bin/whisper-cli \
--model models/ggml-base.en.bin \
--file output.wav
Windows에서는 실행 파일이 build\bin\Release와 같은 구성별 폴더 안에 있을 수 있습니다. 실제 빌드 출력에서 whisper-cli --help를 사용하여 버전의 플래그를 확인하세요.
whisper.cpp는 메모리와 디스크 사용량을 줄일 수 있는 양자화된 GGML 모델도 지원합니다. 양자화는 품질과 속도를 변경할 수 있으므로 표준화하기 전에 자신의 테스트 파일에서 양자화된 후보를 비양자화된 대응물과 비교하세요.
망 분리 배포 준비
망 분리 시스템은 누락된 Python 휠, GPU 라이브러리, 모델 가중치, VAD 자산 또는 컨테이너 레이어를 가져올 수 없습니다. 먼저 연결된 스테이징 머신에서 완전한 매니페스트를 만드세요.
- 운영 체제, CPU 아키텍처, GPU 모델, 드라이버 버전 및 Python 버전을 기록하세요.
- 정확한 패키지, 모델 파일, 선택 사항인 VAD 모델 및 체크섬을 다운로드하세요.
- 조직의 승인된 프로세스를 통해 자산을 전송하세요.
- 로컬 경로에서 설치하고 명시적인 로컬 모델 디렉터리를 구성하세요.
- 수락 테스트 전에 네트워크를 끊으세요.
- 테스트 파일을 전사하고 출력을 확인하며 연결 실패 시도를 모니터링하세요.
온라인에서 첫 번째 실행이 성공했다고 해서 오프라인 배포가 성공적이라고 가정하지 마세요. 서비스 계정이나 새 컨테이너에는 존재하지 않을 사용자 지정 캐시를 채웠을 수 있습니다. 운영 환경에서 사용할 동일한 ID, 디렉터리 및 실행 방법을 사용하여 테스트하세요.
로컬 API 또는 Docker 서비스를 안전하게 실행
whisper.cpp에는 OpenAI와 유사한 전사 경로를 갖춘 HTTP 서버인 whisper-server가 포함되어 있습니다. 먼저 프로젝트를 빌드한 다음 서버의 현재 옵션을 확인하세요.
./build/bin/whisper-server --help
./build/bin/whisper-server \
--host 127.0.0.1 \
--port 8080 \
--model models/ggml-base.en.bin
다른 머신이 진정으로 접근할 필요가 없는 한 서비스를 localhost에 바인딩하세요. Docker 문서는 광범위하게 바인딩될 때 게시된 포트에 호스트 외부에서 접근할 수 있다고 경고합니다. LAN에서 의도적으로 전사를 노출한다면 인증, TLS, 요청 크기 제한, 타임아웃, 업로드 격리 및 보관 정책을 추가하세요. 로컬 프로세스는 액세스 제어 계층이 아닙니다.
whisper.cpp 프로젝트는 프로젝트 Docker 이미지도 게시합니다. 컨테이너를 다시 생성할 때 자산을 다시 다운로드하지 않도록 모델 디렉터리를 영구화하세요.
docker run --rm \
-v /absolute/path/models:/models \
-v /absolute/path/audio:/audios \
ghcr.io/ggml-org/whisper.cpp:main \
"whisper-cli -m /models/ggml-base.en.bin -f /audios/output.wav"
운영 환경에서는 이미지 다이제스트 또는 테스트를 거친 릴리스를 고정하세요. 커뮤니티 래퍼는 별도의 프로젝트로 취급하세요. 공식 OpenAI 서비스로 제시하기보다는 해당 저장소, API 스키마, 이미지 게시자, 라이선스, 업데이트 주기 및 기본 네트워크 설정을 확인하세요.
실제 음성을 숨기지 않고 VAD 사용하기
긴 비음성 구간은 자동 전사에서 원치 않는 출력을 생성할 수 있습니다. 음성 활동 감지(VAD)는 디코딩 전에 무음 또는 비음성으로 분류된 영역을 건너뛰어 불필요한 작업과 일부 무음 관련 오류를 줄일 수 있습니다. 모든 환각이 사라진다고 보장할 수는 없으며, 임계값이 너무 높으면 작은 소리의 단어가 삭제될 수 있습니다.
faster-whisper는 vad_filter=True를 통해 Silero VAD를 제공합니다. 프로젝트 기본값으로 시작한 다음, 매개변수를 변경하기 전에 일시 정지, 작은 목소리, 음악 및 소음이 섞인 녹음 파일을 테스트하세요.
현재 whisper.cpp 문서에는 다운로드 가능한 Silero 모델과 명시적인 VAD 플래그가 제공됩니다:
./models/download-vad-model.sh silero-v6.2.0
./build/bin/whisper-cli \
--file output.wav \
--model models/ggml-base.en.bin \
--vad \
--vad-model models/ggml-silero-v6.2.0.bin
파형과 비교하여 잘린 지점을 확인하세요. 일시 정지 후 첫 음절이 사라진다면, 깔끔해 보이지만 불완전한 전사 결과를 수용하기보다는 민감도를 낮추거나 감지된 음성 주변에 여유 공간을 추가하세요.
출력, 타임스탬프 및 품질 검증
명령어가 성공적으로 종료되는 것만으로는 충분하지 않습니다. 원본 소스 오디오를 보관하고 다음 수락 체크리스트를 사용하여 전사 결과를 검토하세요:
- 완전성: 첫 단어와 마지막 단어가 포함되어 있나요? 작은 소리의 문구가 잘렸나요?
- 이름과 숫자: 인물, 제품, 날짜, 측정값 및 금액을 확인하세요.
- 언어: 감지된 언어와 작업이 전사 또는 번역이었는지 확인하세요.
- 타임스탬프: 여러 세그먼트 경계로 이동하여 정렬을 확인하세요.
- 무음 동작: 긴 일시 정지 구간에서 반복되거나 지어낸 문구가 있는지 확인하세요.
- 재현성: 구현 버전, 모델, 정밀도, 플래그, 하드웨어 및 런타임을 기록하세요.
자막의 경우 줄 길이 정책을 설정하고 플레이어에서 최종 SRT 또는 VTT를 확인하세요. 검색 가능한 메모의 경우 검토자가 오디오로 돌아갈 수 있도록 타임스탬프 또는 세그먼트 ID를 유지하세요. 민감한 자료의 경우 변경할 수 없는 원본 녹음과 생성된 텍스트를 분리하고 두 항목 모두에 정의된 보관 기간을 적용하세요.
오프라인 캡처-전사 워크플로를 구축하는 경우 오프라인 AI 엣지 처리 작동 방식과 오프라인 AI 음성 녹음기 비교도 참조하세요.
일반적인 오류 해결
| 증상 | 예상 확인 사항 | 다음 조치 |
|---|---|---|
| FFmpeg를 찾을 수 없음 | 실행 파일이 없거나 PATH에 없음 | 동일한 셸에서 ffmpeg -version을 실행하고 PATH를 수정 |
| CUDA를 사용할 수 없음 | CPU 전용 PyTorch 또는 호환되지 않는 GPU 라이브러리 | 실시간 PyTorch 선택기와 프로젝트별 GPU 요구 사항 사용 |
| 메모리 부족 오류 | 모델, 정밀도, 배치 또는 동시 작업이 메모리를 초과 | 더 작은 모델, 더 낮은 배치 크기 또는 지원되는 양자화 연산 유형 시도 |
| whisper.cpp가 오디오를 거부 | 빌드된 예제에서 지원하지 않는 형식 | 16kHz 모노 16비트 WAV로 변환하거나 더 광범위한 디코딩 지원을 빌드 |
| 무음 구간에서 텍스트 반복 | 비음성이 디코더에 도달 | VAD 테스트, 잘린 지점 검토 및 모델/디코딩 설정 비교 |
| 번역 결과가 원본 언어로 반환 | 번역 작업에 Turbo가 사용됨 |
--task translate와 함께 medium 또는 large와 같은 다국어 모델 사용 |
| 오프라인 시작 시 다운로드 시도 | 모델, 휠, VAD 자산 또는 컨테이너 레이어가 누락됨 | 자산 매니페스트를 완성하고 운영 환경 ID에서 테스트 |
자주 묻는 질문
Whisper를 완전히 오프라인에서 실행할 수 있나요?
네, 필요한 소프트웨어와 모델 자산을 로컬에 저장한 후 인터넷 연결 없이 추론을 실행할 수 있습니다. 네트워크를 비활성화하고 누락된 다운로드, 임시 파일, 로그 및 노출된 서비스가 있는지 확인하여 경계를 검증하세요.
어떤 Whisper 구현을 자체 호스팅해야 하나요?
참조 Python CLI로는 OpenAI Whisper, 양자화 또는 VAD가 포함된 최적화된 Python 서비스로는 faster-whisper, 네이티브 빌드, 양자화된 GGML 모델, Apple/CPU 배포, Docker 또는 내장된 로컬 서버로는 whisper.cpp를 사용하세요.
Whisper는 FFmpeg가 필요한가요?
OpenAI의 Python 구현에는 FFmpeg 명령줄 도구가 필요합니다. 그렇다고 모든 구현에 FFmpeg가 필수적인 것은 아닙니다. whisper.cpp는 자체적으로 지원되는 디코딩 경로와 더 광범위한 형식을 위한 선택적 FFmpeg 통합을 제공합니다.
Turbo 모델에는 VRAM이 얼마나 필요한가요?
OpenAI의 모델 표에는 Turbo에 약 6GB가 필요하다고 나열되어 있습니다. 이를 참조 구현의 계획 추정치로 취급하세요. 실제 사용량은 런타임, 정밀도, 배치 크기, 하드웨어 및 동시 워크로드에 따라 달라집니다.
Turbo 모델이 음성을 영어로 번역할 수 있나요?
아니요. OpenAI는 Turbo가 번역용으로 훈련되지 않았다고 명시합니다. 영어 이외의 음성을 영어로 번역할 때는 medium 또는 large와 같은 다국어 모델을 사용하세요.
VAD가 모든 Whisper 환각을 방지할 수 있나요?
아니요. VAD는 모델로 전송되는 비음성을 줄이고 무음 관련 출력을 줄일 수 있지만, 너무 공격적으로 구성하면 작은 음성도 제거할 수 있습니다. 대표적인 오디오에서 임계값과 세그먼트 경계를 검증하세요.
로컬 Whisper API는 기본적으로 비공개인가요?
아니요. 로컬 처리는 호스팅된 전사 API를 피할 수 있지만, 서비스에는 여전히 인터페이스 바인딩, 공유 시 인증, 적절한 경우 암호화된 전송, 업로드 격리, 로깅 제어 및 보관 정책가 필요합니다.







댓글 0개