SYSTRANμ faster-whisperλ₯Ό κΈ°λ°μΌλ‘ ν κ³ μ±λ₯ μμ±-ν μ€νΈ λ³ν μΉ μλΉμ€μ λλ€. OpenAI Whisper λλΉ μ΅λ 4λ°° λΉ λ₯Έ μ±λ₯μΌλ‘ μ€μκ° μμ± μΈμμ μ 곡ν©λλ€.
- κ³ μ μμ± μΈμ: OpenAI Whisper λλΉ 4λ°° λΉ λ₯Έ μ²λ¦¬ μλ
- μ΅μ ν°λ³΄ λͺ¨λΈ: large-v3-turboλ‘ 8λ°° λ λΉ λ₯Έ μ€μκ° μ²λ¦¬
- λ€μν λͺ¨λΈ μ§μ: tinyλΆν° large-v3-turboκΉμ§ μ±λ₯/μλ μ΅μ ν λͺ¨λΈ
- μ€μκ° μΉ μΈν°νμ΄μ€: μ§κ΄μ μ΄κ³ λ°μν UI/UX
- λ€κ΅μ΄ μ§μ: 100+ μΈμ΄ μλ κ°μ§ λ° μΈμ
- κ³ κΈ μ΅μ : λ¨μ΄λ³ νμμ€ν¬ν, VAD νν°, λΉ μμΉ μ΅μ ν
- GPU κ°μ: CUDA μ§μμΌλ‘ μ΄κ³ μ μ²λ¦¬
whisper/
βββ backend/ # FastAPI Python λ°±μλ
β βββ app.py # λ©μΈ API μλ²
β βββ __pycache__/ # Python μΊμ
βββ vite-frontend/ # React + Vite νλ‘ νΈμλ
β βββ src/ # μμ€ μ½λ
β βββ dist/ # λΉλλ μ μ νμΌ
β βββ public/ # μ μ 리μμ€
β βββ package.json # μμ‘΄μ± μ€μ
βββ .venv/ # Python κ°μνκ²½ (νμ¬ μ¬μ©μ€)
βββ tmp/ # nginx μ€μ λ°±μ
βββ requirements.txt # Python μμ‘΄μ±
βββ README.md # νλ‘μ νΈ λ¬Έμ
-
λ°±μλ μλ²: systemdλ‘ κ΄λ¦¬λλ μλΉμ€
- μλΉμ€λͺ
:
whisper-backend.service - ν¬νΈ: 3401 (FastAPI + uvicorn)
- μν: active (running)
- μλ μμ: enabled (λΆν μ μλ μμ)
- μλΉμ€λͺ
:
-
νλ‘ νΈμλ: nginxκ° μ μ νμΌ μ§μ μλΉ
- λΉλ νμΌ:
/home/purestory/whisper/vite-frontend/dist/ - nginx μ€μ :
/whisper/κ²½λ‘λ‘ μ κ·Ό
- λΉλ νμΌ:
- μΈλΆ μ κ·Ό:
http://itsmyzone.iptime.org/whisper/ - API μλν¬μΈνΈ:
http://itsmyzone.iptime.org/whisper-api/ - ν¬μ€ 체ν¬:
http://itsmyzone.iptime.org/whisper-api/status
# μλΉμ€ μν νμΈ systemctl status whisper-backend.service # μλΉμ€ μ¬μμ sudo systemctl restart whisper-backend.service # μλΉμ€ μ€μ§ sudo systemctl stop whisper-backend.service # μλΉμ€ λ‘κ·Έ νμΈ sudo journalctl -u whisper-backend.service -f
# μλΉμ€ μν νμΈ systemctl status whisper-frontend.service # μλΉμ€ μ¬μμ sudo systemctl restart whisper-frontend.service
# λ°±μλ ν¬νΈ νμΈ lsof -i :3401 # νλ‘μΈμ€ νμΈ ps aux | grep whisper
- μ½λ μμ :
/home/purestory/whisper/vite-frontend/src/μμ μμ - λΉλ:
cd /home/purestory/whisper/vite-frontend npm run build - μλ λ°μ: nginxκ°
/home/purestory/whisper/vite-frontend/dist/λ₯Ό μ§μ μλΉνλ―λ‘ λΉλλ§ νλ©΄ λ¨ β οΈ μ£Όμ: μλ λ³΅μ¬ μμ κΈμ§!
- μ½λ μμ :
/home/purestory/whisper/backend/μμ μμ - μλΉμ€ μ¬μμ:
sudo systemctl restart whisper-backend.service
- λμ νμΈ:
curl http://localhost:3401/status
# κ°μνκ²½ νμ±ν cd /home/purestory/whisper source .venv/bin/activate # Pythonμμ λͺ¨λΈ λ€μ΄λ‘λ (μλ) python3 -c "from faster_whisper import WhisperModel; WhisperModel('large-v3')" # μ΅μ ν°λ³΄ λͺ¨λΈ λ€μ΄λ‘λ python3 -c "from faster_whisper import WhisperModel; WhisperModel('large-v3-turbo')"
- μ μ νμΌ:
/whisper/β/home/purestory/whisper/vite-frontend/dist/ - API νλ‘μ:
/whisper-api/βhttp://localhost:5173/
- λ©μΈ μ€μ :
/etc/nginx/sites-available/purestory - λ°±μ
:
/home/purestory/tmp/purestory_nginx_updated.conf
| λͺ¨λΈ | ν¬κΈ° | λ©λͺ¨λ¦¬ μꡬλ | νΉμ§ |
|---|---|---|---|
tiny |
39MB | ~1GB | μ΄κ³ μ, κΈ°λ³Έ νμ§ |
base |
74MB | ~1GB | λΉ λ¦, μνΈν νμ§ |
small |
244MB | ~2GB | κ· νμ‘ν μ±λ₯ |
medium |
769MB | ~5GB | λμ νμ§ |
large-v1 |
1550MB | ~10GB | μ΅κ³ νμ§ |
large-v2 |
1550MB | ~10GB | κ°μ λ νμ§ |
large-v3 |
1550MB | ~10GB | μ΅μ λ²μ , μ΅κ³ μ±λ₯ |
large-v3-turbo |
1550MB | ~10GB | π μ΅μ ν°λ³΄ λͺ¨λΈ, 8λ°° λΉ λ₯Έ μλ |
distil-large-v2 |
756MB | ~6GB | κ²½λνλ large λͺ¨λΈ |
distil-large-v3 |
756MB | ~6GB | μ΅μ κ²½λν λͺ¨λΈ |
- νκ΅μ΄ (ko) - μ£Όμ μ§μ μΈμ΄
- μμ΄ (en) - μ΅μ ν λͺ¨λΈ μμ
- μΌλ³Έμ΄ (ja) - λμμμ μΈμ΄
- μ€κ΅μ΄ (zh) - κ°μ²΄/λ²μ²΄
- μ€νμΈμ΄ (es) - λΌν΄ μΈμ΄
- νλμ€μ΄ (fr) - μ λ½ μΈμ΄
- λ μΌμ΄ (de) - κ²λ₯΄λ§ μΈμ΄
- μ΄ν리μμ΄ (it) - λ‘λ§μ€ μΈμ΄
- ν¬λ₯΄ν¬κ°μ΄ (pt) - λΈλΌμ§/ν¬λ₯΄ν¬κ°
- λ¬μμμ΄ (ru) - μ¬λΌλΈ μΈμ΄
- μλμ΄ (ar) - μ μ‘± μΈμ΄
- νλμ΄ (hi) - μΈλ μΈμ΄
- κΈ°ν 90+ μΈμ΄ - μλ κ°μ§ μ§μ
- MP3: κ°μ₯ λ리 μ¬μ©λλ νμ
- WAV: 무μμ€ μ€λμ€
- MP4: λΉλμ€μμ μ€λμ€ μΆμΆ
- M4A: Apple μ€λμ€ νμ
- FLAC: 무μμ€ μμΆ
- OGG: μ€νμμ€ νμ
- μ΅λ ν¬κΈ°: 200MB
- ν μ€νΈ: μμ ν μ€νΈ
- SRT: μλ§ νμΌ (νμμ€ν¬ν ν¬ν¨)
- VTT: WebVTT νμ
- JSON: API μλ΅ νμ
μλ² μν λ° νμ¬ λ‘λλ λͺ¨λΈ μ 보
{
"status": "healthy",
"current_model": "large-v3",
"gpu_available": true,
"memory_usage": "1.4GB"
}μ¬μ© κ°λ₯ν λͺ¨λΈ λͺ©λ‘
{
"models": ["tiny", "base", "small", "medium", "large-v3"],
"current": "large-v3"
}μμ± νμΌμ ν μ€νΈλ‘ λ³ν
curl -X POST "http://localhost:3401/transcribe" \ -F "file=@audio.mp3" \ -F "model_size=large-v3" \ -F "language=ko" \ -F "word_timestamps=true"
Parameters:
file: μμ± νμΌ (multipart/form-data)model_size: λͺ¨λΈ ν¬κΈ° (κΈ°λ³Έκ°: "large-v3")language: μΈμ΄ μ½λ (μ νμ¬ν, μλ κ°μ§)word_timestamps: λ¨μ΄λ³ νμμ€ν¬ν (κΈ°λ³Έκ°: false)beam_size: λΉ ν¬κΈ° (κΈ°λ³Έκ°: 5)vad_filter: VAD νν° (κΈ°λ³Έκ°: true)
μ¬μ©ν λͺ¨λΈ λ³κ²½
curl -X POST "http://localhost:3401/change_model" \ -H "Content-Type: application/json" \ -d '{"model_size": "base"}'
- ν¬νΈ μΆ©λ νμΈ:
lsof -i :3401 - νλ‘μΈμ€ μ’
λ£:
kill -15 <PID> - μλΉμ€ μ¬μμ:
sudo systemctl restart whisper-backend.service
- GPU μν νμΈ:
nvidia-smi - CUDA μ€μΉ νμΈ:
nvcc --version - λ©λͺ¨λ¦¬ λΆμ‘±: λ μμ λͺ¨λΈ μ¬μ© (base, small)
- νμ¬ λ©λͺ¨λ¦¬:
free -h - λͺ¨λΈ λ³κ²½: large β medium β small β base
- μλΉμ€ μ¬μμ: λ©λͺ¨λ¦¬ μ 리
- μ€λμ€ νμ§ νμΈ: 16kHz μ΄μ κΆμ₯
- λ Έμ΄μ¦ μ κ±°: VAD νν° νμ±ν
- λͺ¨λΈ μ κ·Έλ μ΄λ: large-v3 μ¬μ©
- μΈμ΄ λͺ μ: μλ κ°μ§ λμ μΈμ΄ μ½λ μ§μ
- μλΉμ€ μν:
systemctl status whisper-backend.service - λ‘κ·Έ νμΈ:
sudo journalctl -u whisper-backend.service -n 50 - ν¬μ€ 체ν¬:
curl http://localhost:3401/status
- CPU: Intel i5 λλ AMD Ryzen 5 μ΄μ
- RAM: 8GB (tiny/base λͺ¨λΈ)
- μ μ₯곡κ°: 10GB μ¬μ 곡κ°
- Python: 3.8 μ΄μ
- Node.js: 16 μ΄μ
- CPU: Intel i7 λλ AMD Ryzen 7 μ΄μ
- RAM: 32GB (large λͺ¨λΈμ©)
- GPU: NVIDIA RTX 3060 μ΄μ (8GB VRAM)
- μ μ₯곡κ°: 50GB SSD
- CUDA: 11.8 μ΄μ
- λͺ¨λΈ νμΌ μ§μ μμ κΈμ§ - μ¬λ€μ΄λ‘λμ μκ° μμ
- κ°μνκ²½ μμ κΈμ§ -
.venvν΄λ 보쑴 - ν¬νΈ 3401 λ³κ²½ κΈμ§ - μμ€ν μ€μ κ³Ό μ°κ΄
- CUDA λλΌμ΄λ² μμ μ λ°μ΄νΈ κΈμ§
- λμ©λ νμΌ λμ μ²λ¦¬ κΈμ§ - λ©λͺ¨λ¦¬ λΆμ‘± μν
- μ½λ μμ
- ν΄λΉ μλΉμ€λ§ μ¬μμ (νλ‘ νΈμλ: λΉλ, λ°±μλ: systemctl restart)
- λμ νμΈ (curl ν μ€νΈ λλ μΉ μ μ)
- λ‘κ·Έ νμΈ (λ¬Έμ μ)
- GPU λ©λͺ¨λ¦¬ λͺ¨λν°λ§ (nvidia-smi)
- μ€μκ° μ§νλ₯ : μ€λμ€ μ²ν¬λ³ μ²λ¦¬ μν
- μ±λ₯ μ§ν: μ²λ¦¬ μλ (μ€μκ° λ°°μ), μ νλ
- μΈμ΄ κ°μ§: μλ μΈμ΄ κ°μ§ νλ₯
- νμ§ μΈ‘μ : μ λ’°λ μ μ
# GPU μ¬μ©λ₯ λ° λ©λͺ¨λ¦¬ nvidia-smi # CPU λ° λ©λͺ¨λ¦¬ μ¬μ©λ htop # λμ€ν¬ μ¬μ©λ df -h /home/purestory/whisper/ # λ€νΈμν¬ μ°κ²° μν netstat -tulpn | grep 3401
| λͺ¨λΈ | μλ | μ νλ | λ©λͺ¨λ¦¬ | μ©λ |
|---|---|---|---|---|
| tiny | 10x | 80% | 1GB | μ€μκ° μ²λ¦¬ |
| base | 7x | 85% | 1GB | μΌλ° μ©λ |
| small | 4x | 90% | 2GB | νμ§ μ€μ |
| medium | 2x | 95% | 5GB | λμ νμ§ |
| large-v3 | 1x | 98% | 10GB | μ΅κ³ νμ§ |
| large-v3-turbo | 8x | 98% | 10GB | π μ΅κ³ νμ§ + μ΄κ³ μ |
# κ°μνκ²½ νμ±ν cd /home/purestory/whisper source .venv/bin/activate # μμ‘΄μ± νμΈ pip list # μμ‘΄μ± μ λ°μ΄νΈ (μ£Όμ!) pip install --upgrade faster-whisper
# νλ‘ νΈμλ μμ‘΄μ± νμΈ cd /home/purestory/whisper/vite-frontend npm list # μμ‘΄μ± μ λ°μ΄νΈ npm update
μ΄ μλΉμ€λ GPU 리μμ€λ₯Ό μ§μ½μ μΌλ‘ μ¬μ©νλ―λ‘ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° μ€μν©λλ€. λμ©λ μ€λμ€ νμΌ μ²λ¦¬ μ μμ€ν λͺ¨λν°λ§μ ν΅ν΄ 리μμ€ μ¬μ©λμ νμΈνμΈμ.
λͺ¨λΈ λ³κ²½ μ GPU λ©λͺ¨λ¦¬ μ 리λ₯Ό μν΄ μλΉμ€ μ¬μμμ΄ νμν μ μμ΅λλ€. νμ§κ³Ό μ±λ₯μ κ· νμ μν΄ μ©λμ λ§λ λͺ¨λΈμ μ ννμΈμ.
μ΅μ’
μ
λ°μ΄νΈ: 2025εΉ΄06ζ05ζ₯
μλΉμ€ λ²μ : 2.0.0
μ΄μ νκ²½: Ubuntu 20.04, Python 3.10, CUDA 11.8, faster-whisper 1.0.0