Krótka odpowiedź: Whisper (a najlepiej faster-whisper) świetnie transkrybuje polski, a lokalnie na GPU robi to szybko i bez wysyłania nagrań do zewnętrznej usługi — co przy danych wrażliwych bywa mocnym argumentem. W naszym teście (próbka PL ~690 s, large-v3) V100 32GB osiągnęła ~15× realtime, a P40/A2 ~6×. Do large-v3 chcesz karty z zapasem VRAM (V100 32GB, Tesla P40 24GB); do small/medium wystarczy Tesla P4 8GB albo NVIDIA A2 16GB. I tak, sprzedajemy te karty — pełne zastrzeżenie na końcu.
Piszę to do wszystkich, którzy mają regularnie nagrania do spisania — biur, kancelarii, samorządów, redakcji, twórców wideo — i nie chcą albo nie mogą wrzucać ich do internetowej usługi. Bez owijania: lokalny Whisper to jeden z najbardziej „opłacalnych" zastosowań używanej Tesli, bo zadanie jest ciągłe, powtarzalne i wrażliwe na prywatność. Poniżej co wybrać i jak to odpalić.
Whisper, faster-whisper, whisper.cpp — co jest czym
Whisper to otwarty model rozpoznawania mowy od OpenAI, bardzo dobry w wielu językach, w tym po polsku. Sam „goły" Whisper jest jednak dość ciężki. Dlatego w praktyce używa się jego zoptymalizowanych wariantów:
- faster-whisper — implementacja oparta na CTranslate2; w wielu konfiguracjach istotnie przyspiesza inferencję i zmniejsza zużycie pamięci względem referencyjnej implementacji (dokładny zysk zależy od sprzętu, batchingu, wersji i compute type). To domyślny wybór na GPU.
- whisper.cpp — lekka implementacja w C/C++, świetna na CPU i słabszy sprzęt, z kwantyzacją. Na mocnym GPU zwykle wybierzesz faster-whisper, ale whisper.cpp bywa wygodny do prostych, przenośnych wdrożeń.
- WhisperX — nadbudówka dodająca precyzyjne znaczniki czasu i rozdzielanie mówców (diaryzacja) — przydatne do napisów i protokołów „kto co powiedział". Diaryzacja korzysta z pyannote: pierwsze uruchomienie wymaga dostępu do modelu na Hugging Face (gated) i tokenu; po pobraniu pipeline może działać lokalnie.
Do polskiego i do GPU: faster-whisper z modelem large-v3 to punkt odniesienia jakości. Mniejsze modele wybierasz, gdy zależy Ci na szybkości albo masz słabszą kartę.
Po co lokalnie — RODO i nie tylko
Powód numer jeden to znów RODO i poufność. Nagrania mogą zawierać bardzo wrażliwe informacje — dane osobowe, dane szczególnych kategorii albo treści objęte tajemnicą zawodową:
- Nagrania spotkań i narad — padają nazwiska, liczby, decyzje, dane osobowe. Wysyłanie tego do zewnętrznej usługi to przekazanie danych podmiotowi zewnętrznemu.
- Kancelarie i medycyna — rozmowy objęte tajemnicą zawodową. Lokalne przetwarzanie upraszcza tu model ryzyka i ogranicza przekazywanie nagrań na zewnątrz.
- Samorządy — transkrypcje sesji rad, komisji, transmisji. Dane publiczne, ale ilościowo ogromne i tanie do przerobienia u siebie.
- Twórcy wideo — napisy do materiałów, gdzie liczy się koszt i to, że robisz to seryjnie, hurtowo.
Uwaga na skróty myślowe: chmura nie jest z definicji niezgodna z RODO ani z tajemnicą zawodową. O zgodności decydują m.in. podstawa prawna, role administrator/procesor, umowa powierzenia (DPA), transfery, zabezpieczenia i retencja. Lokalne przetwarzanie po prostu upraszcza ten model ryzyka i ogranicza liczbę podmiotów, którym powierzasz nagrania.
Do tego dochodzi koszt: usługi transkrypcji liczą za minutę nagrania. Przy dużym i regularnym wolumenie (godziny nagrań tygodniowo) własny sprzęt może obniżyć koszt jednostkowy — płacisz raz za kartę, a nie za każdą minutę — ale próg opłacalności zależy od ceny usługi, wykorzystania, energii i kosztu hosta. No i działa offline, bez limitów i kolejek.
Modele i ich apetyt na VRAM
Whisper ma kilka rozmiarów. Im większy, tym lepsza jakość (zwłaszcza przy trudnym audio: gwar, akcenty, słaby mikrofon), ale tym więcej VRAM i wolniej.
Zamiast ogólnych szacunków podajemy zmierzone szczytowe zużycie VRAM z naszego testu (faster-whisper, próbka PL ~690 s), w konfiguracjach, które faktycznie uruchomiliśmy:
| Model | Precyzja | Zmierzony szczyt VRAM | Karta w teście | Jakość PL |
|---|---|---|---|---|
| large-v3 | float16 | 4,4 GB | V100 32GB | Najlepsza |
| large-v3 | int8 | 2,8 GB | V100 32GB | Najlepsza |
| large-v3 | float16 | 4,1 GB | A2 16GB | Najlepsza |
| large-v3 | int8 | 1,3 GB | A2 16GB | Najlepsza |
| large-v3 | int8 | 3,4 GB | P40 24GB | Najlepsza |
| large-v3 | float32 | 8,4 GB | P40 24GB | Najlepsza |
| medium | int8 | 2,0 GB | P4 8GB | Dobra |
| small | int8 | 0,8 GB | P4 8GB | Przyzwoita |
Zużycie VRAM zależy od compute type (float16/int8/float32), rozmiaru batcha i pozostałych komponentów pipeline'u — powyższe to szczyty dla pojedynczego pliku bez batchingu. Widać jednak wyraźnie: faster-whisper w INT8 mieści large-v3 znacznie oszczędniej niż goły Whisper — jeśli walczysz o pamięć, to pierwszy krok.
Która używana Tesla do Whispera
V100 32GB — do large-v3, seryjnie i szybko. Volta z Tensor Cores i szybką pamięcią HBM2 to mocny wybór do modeli large; u nas ~15,2× realtime na large-v3/FP16. 32 GB to duży zapas pojemności na batching (przetwarzanie wielu nagrań naraz) i na WhisperX z diaryzacją — to argument o pojemności, nie zmierzona przez nas przewaga wydajnościowa (skalowania batchu w tej rundzie nie mierzyliśmy). Jeśli transkrypcja to Twój stały proces produkcyjny — to właściwa karta.
Tesla P40 24GB — budżetowo do large. 24 GB VRAM przy relatywnie niskim koszcie zakupu, spokojnie mieści large-v3 (u nas 3,4 GB w INT8). To Pascal (CC 6.1): CTranslate2 nie oferuje tu zoptymalizowanej ścieżki float16, więc jedziesz INT8 lub FP32 — i tak wystarczająco, by P40 była budżetową kartą do pracy ciągłej.
Tesla P4 8GB — do small/medium, tanio i cicho. 8 GB, 75 W, low-profile. Komfortowo uciągnie small/medium (u nas medium int8 to 2,0 GB). Large-v3 w odpowiednim trybie kwantyzacji może zmieścić się w 8 GB, ale nie mamy w tej kampanii własnego pomiaru large-v3 na P4, więc nie rekomendujemy jej do tego wariantu bez osobnego testu wydajności. Idealna do lekkiego, cichego „transkryptora" albo do wdrożeń brzegowych (edge).
NVIDIA A2 16GB — nowszy Ampere, oszczędny. Konfigurowalne 40–60 W, low-profile, nowsza architektura. Komfortowo obsłuży small/medium, a large w INT8 też się zmieści dzięki 16 GB. Dobra, gdy zależy Ci na niskim poborze i cichej pracy 24/7.
Wydajność — i najważniejsze zdanie o NVENC
Kluczowa metryka to szybkość względem czasu rzeczywistego (× realtime) — ile razy szybciej od czasu trwania nagrania idzie transkrypcja. Wartość 5× znaczy, że godzinne nagranie spiszesz w 12 minut. (Uwaga terminologiczna: w literaturze skrót RTF bywa definiowany odwrotnie — czas przetwarzania ÷ czas audio, gdzie mniej = lepiej. My podajemy jego odwrotność, czyli mnożnik prędkości; nazywamy go wprost „× realtime", żeby nie mylić.)
Nasz pomiar (faster-whisper, próbka polska ~690 s, WAV 16 kHz mono; × realtime = długość audio ÷ czas samej transkrypcji; pełny power limit):
| Karta | Model | Precyzja | × realtime | VRAM |
|---|---|---|---|---|
| V100 32GB | large-v3 | float16 | 15,2× | 4,4 GB |
| V100 32GB | large-v3 | int8 | 14,0× | 2,8 GB |
| A2 16GB | large-v3 | float16 | 6,0× | 4,1 GB |
| A2 16GB | large-v3 | int8 | 5,9× | 1,3 GB |
| P40 24GB | large-v3 | int8 | 5,9× | 3,4 GB |
| P40 24GB | large-v3 | float32 | 4,7× | 8,4 GB |
| P4 8GB | medium | int8 | 7,2× | 2,0 GB |
| P4 8GB | small | int8 | 16,7× | 0,8 GB |
Dwa wnioski z tego przebiegu: (1) na large-v3 V100 była wyraźnie szybsza — ~15,2× realtime wobec ~5,9× na P40/A2. Wynik jest zgodny z przewagą Volty w obliczeniach FP16/Tensor Core, ale benchmark nie izoluje wkładu poszczególnych elementów (Tensor Cores, HBM2, kerneli CTranslate2, compute type). (2) P40 (CC 6.1) nie ma zoptymalizowanej ścieżki float16 w CTranslate2 — dokumentacja wskazuje fallback FP16→FP32, a zoptymalizowane FP16 zaczyna się od CC 7.0 (Volta); dlatego na P40 używaliśmy INT8 lub FP32. Na A2/V100 float16 działa i jest optymalne. W tej konfiguracji relacje między kartami były wyraźne; przy innym modelu, batchu, wersji CTranslate2 i ustawieniach mogą się zmienić.
A teraz rzecz, którą warto zrozumieć, żeby nie przepłacić albo nie odrzucić dobrej karty z błędnego powodu:
NVENC nie ma znaczenia dla samej transkrypcji Whisperem. Whisper to zadanie obliczeniowe, nie transkodowanie wideo — liczy na rdzeniach obliczeniowych/Tensor Cores. NVENC to sprzętowy enkoder wideo, przydatny do streamingu i kompresji filmów, a nie do rozpoznawania mowy. Warto to wiedzieć, bo część kupujących odrzuca V100 „bo nie ma NVENC" — a to podwójne nieporozumienie: nasza V100 (Tesla V100-PCIE-32GB) enkoder ma (oficjalna matryca NVIDIA; kartą bez NVENC jest dopiero A100), a do transkrypcji i tak nie jest on potrzebny. V100 jest do Whispera dobra dzięki mocnym jednostkom obliczeniowym. (Jeśli Twoim zadaniem jest transkodowanie wideo, to inna bajka — ale to nie Whisper.)
Jak mierzyliśmy
Żeby liczby dało się czytać uczciwie:
- Backend: faster-whisper (CTranslate2), model large-v3 (oraz medium/small na P4).
- Próbka: jeden plik PL, WAV 16 kHz mono, ~690,4 s (LibriVox, public domain).
- Parametry transkrypcji:
beam_size=5, bez filtra VAD, poza tym ustawienia domyślne — jedyną zmienną między kartami byłcompute_type(float16/int8/float32). Wszystkie karty dostały ten sam plik i te same parametry. - Pomiar czasu: jeden przebieg rozgrzewkowy, potem jeden mierzony pełny przebieg transkrypcji (nie uśrednialiśmy wielu powtórzeń). Czas nie obejmuje ładowania modelu — to mierzyliśmy osobno (na P40 ok. 6,5–8,6 s).
- Sprzęt: stanowisko testowe, driver 580.173.02, pełny power limit (P40/V100 250 W, A2 skonfigurowana na 60 W). Wariant V100 to Tesla V100-PCIE-32GB.
- Czego nie zapisaliśmy: dokładnych wersji bibliotek faster-whisper/CTranslate2 dla tych konkretnych przebiegów — dlatego ich tu nie podajemy zamiast zgadywać.
To wystarcza jako „nasz test" na jednym powtórzeniu; nie traktuj tych liczb jako w pełni uśrednionego benchmarku porównawczego między producentami.
Jak to odpalić — faster-whisper
Minimalny start jest naprawdę krótki. Instalacja i transkrypcja jednego pliku:
pip install faster-whisper
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe("nagranie.mp3", language="pl")
for seg in segments:
print(f"[{seg.start:.2f} -> {seg.end:.2f}] {seg.text}")
Kilka wskazówek z praktyki:
compute_type="int8_float16"albo"int8"— mocno oszczędza VRAM. Wpływ na jakość zależy od modelu i materiału; w tej kampanii mierzyliśmy wydajność i VRAM, nie WER/CER. Pierwszy ruch, gdy walczysz o pamięć na large.language="pl"— jeżeli wiesz, że materiał jest po polsku, ustaw ten parametr: pomijasz automatyczną detekcję języka i eliminujesz ryzyko jej pomyłki.- Napisy — segmenty z
start/endłatwo zapiszesz do formatu.srt. Do precyzyjnych znaczników i rozdzielania mówców sięgnij po WhisperX. - Batch — przy dużym wolumenie przetwarzaj wiele plików naraz (faster-whisper ma
BatchedInferencePipeline); tu 32 GB na V100 daje zapas pojemności na większy batch (nie mierzyliśmy jego skalowania).
Typowe wdrożenia i koszt vs chmura
Żeby to nie było abstrakcją, kilka układów, które realnie widuję:
- Kancelaria / biuro — dyktafon z rozprawy albo spotkania → faster-whisper medium/large na P40 24GB → gotowy protokół tekstowy w kilkanaście minut, bez wysyłania nagrania na zewnątrz. Przy danych objętych tajemnicą zawodową lokalne przetwarzanie mocno upraszcza model ryzyka.
- Samorząd — transmisje sesji rady i komisji → wsadowa transkrypcja large-v3 na V100 32GB w nocy, gdy karta i tak stoi bezczynnie. Godziny nagrań tygodniowo przerabiane hurtem.
- Twórca / redakcja — napisy do wideo → medium na P4 8GB albo A2 16GB, tanio i cicho, seryjnie do formatu
.srt.
Rachunek jest prosty w zarysie: usługi transkrypcji liczą za minutę nagrania, więc przy stałym wolumenie — kilka, kilkanaście godzin audio tygodniowo — koszt usługi rośnie liniowo, a używana Tesla to wydatek jednorazowy. Ale pełny rachunek to TCO, nie tylko cena karty: dochodzą host, energia, czas administracji i realne wykorzystanie sprzętu. Próg opłacalności zależy od ceny usługi, wolumenu, energii i kosztu hosta — im więcej minut i im bardziej wrażliwe nagrania, tym częściej własny sprzęt wychodzi sensownie, ale to trzeba policzyć u siebie. Przy danych objętych tajemnicą zawodową do rachunku dochodzi jeszcze uproszczony model ryzyka — choć, jak wyżej, chmura sama w sobie nie jest wykluczona prawnie.
Źródła
- OpenAI Whisper — https://github.com/openai/whisper
- faster-whisper (SYSTRAN, CTranslate2) — https://github.com/SYSTRAN/faster-whisper
- WhisperX (diaryzacja, precyzyjne znaczniki czasu) — https://github.com/m-bain/whisperX
- NVIDIA Video Encode/Decode GPU Support Matrix (P100 i V100 mają NVENC; A100 = 0) — https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new
Uczciwe zastrzeżenie: sprzedajemy używane karty datacenter, więc mam w tym interes — ale starałem się pokazać sprawę uczciwie, łącznie z tym, że przy małym, sporadycznym wolumenie usługa w chmurze bywa prostsza i tańsza niż stawianie serwera. To sprzęt używany: każdą sztukę przed wysyłką przepuszczamy przez wieloetapową kwalifikację obejmującą m.in. kontrolę VRAM, burn-in z watchdogiem, ECC, PCIe i poprawność obliczeń; do karty dokładamy raport/certyfikat z tego procesu. Nie wiesz, czy do Twojego wolumenu nagrań lepsza będzie P4, P40 czy V100? napisz do nas — dopytamy o typ audio i skalę, i doradzimy szczerze.
FAQ
- Jak dobry jest Whisper po polsku?
- large-v3 radzi sobie z polskim naprawdę dobrze, nawet z akcentami i niedoskonałym audio. small/medium są słabsze przy trudnym nagraniu, ale do czystej mowy w studiu bywają wystarczające i dużo szybsze.
- large-v3 czy medium — od czego zacząć?
- Jeśli masz kartę z 24/32 GB, zacznij od large-v3 dla najlepszej jakości. Jeśli sprzęt mniejszy albo zależy Ci na maksymalnej szybkości przy dobrym audio — medium. Najlepiej przetestuj oba na swoim typowym nagraniu.
- Czy large-v3 zmieści się na 8 GB (np. P4)?
- Pod względem samej pamięci to realne — large-v3 w INT8 zajmował u nas 1,3–3,4 GB na innych kartach, więc w 8 GB jest zapas. Ale nie mamy własnego pomiaru large-v3 na P4, więc nie rekomendujemy tej karty do large-v3 bez osobnego testu wydajności — P4 najlepiej sprawdza się przy small/medium. Do large-v3 pewniejsze są P40 24 GB, A2 16 GB i V100 32 GB.
- Czy enkoder NVENC jest tu w ogóle potrzebny?
- Nie. Whisper nie używa enkodera wideo (V100/P100 zresztą NVENC mają — po prostu nie ma tu zastosowania). Do transkrypcji liczą się jednostki obliczeniowe — a te V100/P100 mają mocne. NVENC ma znaczenie tylko wtedy, gdy transkodujesz wideo, co jest zupełnie innym zadaniem.
- Czy potrzebuję drugiej karty do obrazu?
- Tesle nie mają wyjścia wideo, ale do transkrypcji to nieistotne — pracujesz przez terminal/skrypt/serwer. Monitor podłączasz do iGPU albo innej karty, jeśli w ogóle go potrzebujesz na tej maszynie.
- Diaryzacja (kto mówił) — da się lokalnie?
- Tak, przez WhisperX (diaryzacja oparta na pyannote). Pierwsze przygotowanie wymaga dostępu do modeli na Hugging Face (gated) i zaakceptowania ich warunków oraz tokenu; po pobraniu wymaganych modeli pipeline może działać offline. Wymaga trochę więcej konfiguracji i pamięci, ale do protokołów z nagrań spotkań to bardzo przydatny dodatek.
