← Blog

Whisper po polsku na GPU - transkrypcja i napisy lokalnie (RODO)

Agile Store · 7 października 2026 · 10 min czytania

  • topic:privacy
  • use:transcription
  • model:p4-8
  • model:p40-24
  • model:a2-16
  • model:v100-32
  • 0
  • 0

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


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.

Powiązane produkty