synops/docs/erfaringer/faster_whisper_oppsett.md
vegard 443f60a518 Fullfør oppgave 7.1: faster-whisper Docker-oppsett for norsk STT
Satt opp faster-whisper-server (fedirz/faster-whisper-server:latest-cpu)
som Docker-tjeneste på produksjonsserveren. Ingen GPU tilgjengelig —
bruker CPU med int8-kvantisering og large-v3 modell for best norsk kvalitet.

Verifisert:
- Transkripsjon fungerer via OpenAI-kompatibelt API
- verbose_json med segmenter og tidskoder OK
- Docker DNS-oppslag fra sidelinja-net fungerer
- Maskinrommet har WHISPER_URL=http://faster-whisper:8000
- RAM-bruk ~2.5 GB med modell lastet

Konfigurasjon:
- Image: fedirz/faster-whisper-server:latest-cpu
- Modell: large-v3 (norsk), int8, CPU
- CAS montert read-only for direkte filtilgang
- Healthcheck via python3 (curl ikke tilgjengelig i image)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:21:29 +01:00

111 lines
3.2 KiB
Markdown

# Erfaring: faster-whisper oppsett
**Dato:** 2026-03-17
## Kontekst
Oppgave 7.1 — sette opp faster-whisper som Docker-tjeneste for norsk tale-til-tekst (STT).
Serveren er en Hetzner VPS (8 vCPU, 16 GB RAM) uten GPU.
## Valg
### Image: `fedirz/faster-whisper-server`
- Gir OpenAI-kompatibelt HTTP API (`/v1/audio/transcriptions`)
- CPU-variant: `fedirz/faster-whisper-server:latest-cpu`
- GPU-variant: `fedirz/faster-whisper-server:latest-cuda` (for fremtidig bruk)
- Laster modell automatisk fra HuggingFace ved første request (lazy loading)
### Modell: `large-v3`
- Best norsk kvalitet blant standard Whisper-modeller
- ~2.5 GB RAM med int8-kvantisering (CPU)
- Treigere enn `medium` på CPU, men akseptabelt for bakgrunnsjobber
- Alternativ: `NbAiLab/nb-whisper-large` (norsk-finjustert) — ikke testet
### Kvantisering: `int8`
- Halverer RAM-bruk vs float32, minimal kvalitetstap
- Obligatorisk for CPU — float16 krever GPU
## Docker Compose-konfigurasjon
```yaml
faster-whisper:
image: fedirz/faster-whisper-server:latest-cpu
restart: unless-stopped
environment:
WHISPER__MODEL: large-v3
WHISPER__INFERENCE_DEVICE: cpu
WHISPER__COMPUTE_TYPE: int8
volumes:
- /srv/synops/data/whisper-models:/root/.cache/huggingface
- /srv/synops/media/cas:/srv/synops/media/cas:ro
networks:
- sidelinja-net
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen(\"http://localhost:8000/health\")"]
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
```
## API-bruk
Endepunkt fra Docker-nettverket: `http://faster-whisper:8000`
```bash
# Enkel transkripsjon
curl -X POST http://faster-whisper:8000/v1/audio/transcriptions \
-F "file=@lydfil.wav" \
-F "model=large-v3" \
-F "language=no" \
-F "response_format=verbose_json"
```
Respons (verbose_json):
```json
{
"task": "transcribe",
"language": "no",
"duration": 1.0,
"text": "...",
"segments": [
{
"id": 1,
"start": 0.0,
"end": 3.5,
"text": "...",
"no_speech_prob": 0.01
}
]
}
```
## Ressursbruk
- **RAM:** ~2.5 GB (idle, modell lastet)
- **CPU:** Minimal ved idle. Bruker alle tilgjengelige kjerner under transkripsjon.
- **Disk:** ~3 GB for large-v3 modell (i `/srv/synops/data/whisper-models/`)
## Gotchas
1. **Healthcheck:** Containeren har ikke `curl` installert. Bruk python3 urllib i stedet.
2. **Modellnedlasting:** Første request etter oppstart trigger modellnedlasting (~3 GB).
`start_period: 120s` i healthcheck gir tid til dette.
3. **CAS-tilgang:** Containeren monterer CAS read-only for direkte filtilgang.
Alternativt kan maskinrommet sende filer via multipart upload.
4. **Hallusinering:** Whisper hallusinerer tekst på stille/tone-filer (høy `no_speech_prob`).
Filtrér segmenter med `no_speech_prob > 0.6` i postprosessering.
## Ved GPU-oppgradering
Bytt til CUDA-image og float16:
```yaml
faster-whisper:
image: fedirz/faster-whisper-server:latest-cuda
environment:
WHISPER__MODEL: large-v3
WHISPER__INFERENCE_DEVICE: cuda
WHISPER__COMPUTE_TYPE: float16
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
```