Whisper dan Piper di VPS: Biaya CPU dan Disk
Jalankan Whisper dan Piper di VPS tanpa GPU. Ketahui kebutuhan CPU, ukuran model dan voice, serta cara menyediakan endpoint HTTP yang kompatibel dengan OpenAI.
Speech-to-text dan TTS yang di-hosting sendiri, secara singkat
Speech-to-text dan TTS (text-to-speech) yang di-hosting sendiri adalah jenis AI termurah yang dapat Anda jalankan pada server milik sendiri. Transkripsi menjalankan Whisper melalui runtime faster-whisper. Sintesis menjalankan Piper. Keduanya dapat berjalan pada VPS CPU biasa tanpa GPU sama sekali. Model Whisper kecil memerlukan sekitar 484 MB ruang disk, dan voice Piper berupa satu file dengan ukuran jauh di bawah 150 MB.
Itulah alasan audio menjadi titik awal yang tepat. Generator gambar yang di-hosting sendiri dan pembuatan video yang di-hosting sendiri sama-sama memerlukan GPU sebelum dapat digunakan. Audio tidak memerlukannya.
Panduan ini membahas kedua arah tersebut dan lapisan yang menghubungkan keduanya. Whisper mengubah audio menjadi teks. Piper mengubah teks menjadi audio. HTTP server yang kompatibel dengan OpenAI di depan keduanya memungkinkan client yang sudah ada mengarah ke server Anda tanpa perubahan apa pun selain base URL.
Setiap versi yang disebutkan di sini masih berlaku pada Agustus 2026.
Mengapa faster-whisper, bukan package Whisper referensi
Package whisper dari OpenAI menjalankan model di PyTorch. faster-whisper menjalankan bobot model yang sama di CTranslate2, yaitu inference engine yang dibuat khusus untuk model transformer. Bobotnya identik, jadi transkripnya juga sama. Perbedaannya sepenuhnya terletak pada runtime.
CTranslate2 melakukan kuantisasi bobot saat memuatnya. Karena itu, compute_type="int8" merupakan satu argumen, bukan langkah konversi terpisah. CTranslate2 juga tidak memiliki dependensi PyTorch. pip install faster-whisper memasang CTranslate2, tokenizer, dan PyAV untuk decoding audio. Dengan demikian, ukuran virtual environment hanya ratusan megabyte, bukan beberapa gigabyte. Pada VPS dengan disk 40 GB, perbedaan ini menentukan apakah ruang penyimpanan masih longgar atau sudah sempit.
Berikut angka yang dipublikasikan oleh project tersebut untuk model small pada CPU. Benchmark ini mentranskripsikan audio berdurasi 13 menit menggunakan 8 thread pada Intel Core i7-12700K. Kolom x_realtime adalah durasi 13 menit dibagi waktu yang diukur. Nilai 7.6 berarti rekaman berdurasi 13 menit selesai dalam sedikit lebih dari 1 menit 40 detik.
The data behind this chart
[
{
"label": "openai/whisper, fp32",
"x_realtime": 1.9,
"seconds": 418,
"memory_mb": "2,335"
},
{
"label": "whisper.cpp, fp32",
"x_realtime": 6.2,
"seconds": 125,
"memory_mb": "1,049"
},
{
"label": "faster-whisper, fp32",
"x_realtime": 5.0,
"seconds": 157,
"memory_mb": "2,257"
},
{
"label": "faster-whisper, int8",
"x_realtime": 7.6,
"seconds": 102,
"memory_mb": "1,477"
},
{
"label": "faster-whisper, int8, batch 8",
"x_realtime": 15.3,
"seconds": 51,
"memory_mb": "3,608"
}
]Perhatikan baris kedua secara objektif. Pada fp32, whisper.cpp lebih cepat daripada faster-whisper pada CPU ini, yaitu 6.2x dibandingkan 5.0x. Penggunaan memorinya juga kurang dari setengah. whisper.cpp menggunakan keluarga ggml yang sama dengan yang mendasari bagian llama.cpp dari stack LLM lokal. faster-whisper menjadi lebih cepat setelah int8 dan batching diaktifkan, hingga mencapai 15.3x. Untuk itu, faster-whisper menggunakan 3,608 MB RAM. Jadi, pilih faster-whisper jika Anda memerlukan Python API dan batching. Pilih whisper.cpp jika RAM merupakan batasan yang tidak dapat Anda tambah.
Baris pertama adalah inti bagian ini. Package referensi mencapai 1.9x real time pada mesin yang sama. Artinya, audio berdurasi 1 jam memerlukan waktu CPU selama setengah jam.
Berapa banyak ruang disk yang diperlukan bobot model Whisper?
The data behind this chart
[
{
"label": "tiny",
"weights_mb": 75.5
},
{
"label": "base",
"weights_mb": 145
},
{
"label": "small",
"weights_mb": 484
},
{
"label": "medium",
"weights_mb": "1,530"
},
{
"label": "large-v3",
"weights_mb": "3,090"
}
]Berikut adalah konversi CTranslate2 yang dipublikasikan dalam format float16. Perhatikan hal yang tidak dilakukan compute_type="int8": compute_type="int8" tidak memperkecil ukuran unduhan. Bobot diunduh dalam format float16, lalu CTranslate2 melakukan kuantisasi di memori saat pemuatan. Karena itu, large-v3 menggunakan 3,090 MB di disk, baik dijalankan dalam format float16 maupun int8. int8 menghemat RAM dan meningkatkan kecepatan, bukan menghemat ruang disk.
Model diunduh saat pertama kali digunakan ke ~/.cache/huggingface/hub. Pada VPS dengan volume root yang kecil, arahkan lokasi tersebut ke tempat yang memiliki ruang cukup menggunakan argumen download_root atau variabel lingkungan HF_HOME. Jika tidak, proses pertama akan memenuhi disk dan proses terhenti di tengah unduhan.
Instal faster-whisper tanpa merusak Python sistem
Ubuntu 24.04 dan Debian 13 menandai Python sistem sebagai dikelola secara eksternal. Menjalankan pip install faster-whisper di luar lingkungan virtual langsung berhenti dengan pesan:
error: externally-managed-environmentItulah sistem pengemasan yang melindungi file milik apt. Gunakan lingkungan virtual.
sudo apt update
sudo apt install -y python3-venv ffmpeg
python3 -m venv ~/stt
~/stt/bin/pip install --upgrade pip
~/stt/bin/pip install faster-whisper==1.2.1Versi 1.2.1 adalah rilis saat ini, diterbitkan pada October 2025. faster-whisper mendekode audio melalui PyAV, yang menyertakan library ffmpeg sendiri. Karena itu, faster-whisper dapat membaca file mp3 atau m4a tanpa binary ffmpeg terpisah. Paket ffmpeg di atas digunakan untuk pemrosesan video pada bagian panduan selanjutnya.
Periksa instalasi sebelum mengunduh weights berukuran tiga gigabyte:
~/stt/bin/python -c "from faster_whisper import WhisperModel; print('ok')"Baris yang berisi ok berarti wheels telah terpasang. Pesan ImportError yang menyebut ctranslate2 berarti wheel untuk arsitektur Anda tidak terpasang. Hal ini terjadi pada image ARM 32-bit.
Transkripsikan rekaman rapat atau voice note
Simpan ini sebagai transcribe.py:
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8", cpu_threads=4)
segments, info = model.transcribe("meeting.m4a", beam_size=5, vad_filter=True)
print("language: %s (%.2f)" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))Jalankan dengan ~/stt/bin/python transcribe.py. Pada proses pertama, weights akan diunduh sehingga tidak ada output selama beberapa saat. Setelah itu, model dimuat dari cache dalam beberapa detik.
segments adalah generator, sehingga transkripsi tidak dimulai sampai Anda melakukan iterasi terhadapnya. Orang mengukur durasi pemanggilan transcribe(), melihat bahwa pemanggilan tersebut langsung mengembalikan hasil, lalu mengira ada yang rusak. Tidak ada yang rusak. Prosesnya berlangsung di dalam loop.
vad_filter=True menjalankan Silero VAD (voice activity detection) terlebih dahulu dan membuang bagian hening sebelum Whisper memprosesnya. Pada rekaman rapat dengan jeda panjang, ini merupakan peningkatan kecepatan terbesar yang tersedia, karena Whisper sama sekali tidak menghabiskan waktu untuk audio yang tidak berisi ucapan. Langkah ini juga mengurangi loop kalimat berulang yang dihasilkan Whisper ketika diberi audio hening dan mencoba menemukan kata di dalamnya.
Atur cpu_threads ke jumlah core yang benar-benar Anda miliki. Menetapkannya di atas jumlah vCPU membuat transkripsi lebih lambat karena thread tambahan saling berebut core yang sama dan scheduler harus membayar biaya setiap pergantian konteks.
Subtitel untuk pustaka Jellyfin
Jellyfin membaca file subtitle eksternal yang berada di samping video dan memiliki nama yang sama. Dengan demikian, Movie (2019).en.srt yang berada di samping Movie (2019).mkv akan muncul sebagai track bahasa Inggris tanpa transcoding dan tanpa membangun ulang pustaka.
Ekstrak audio terlebih dahulu. Whisper melakukan resampling semua input secara internal ke mono 16 kHz. Dengan memberikan audio mono 16 kHz, pekerjaan yang harus dilakukan di kedua sisi menjadi lebih ringan:
ffmpeg -i "Movie (2019).mkv" -vn -ac 1 -ar 16000 -c:a pcm_s16le "Movie (2019).wav"faster-whisper tidak memiliki penulis SRT. Karena itu, format segmennya sendiri. Simpan kode berikut sebagai srt.py:
import sys
from faster_whisper import WhisperModel
def ts(seconds):
ms = int(round(seconds * 1000))
hours, ms = divmod(ms, 3600000)
minutes, ms = divmod(ms, 60000)
secs, ms = divmod(ms, 1000)
return "%02d:%02d:%02d,%03d" % (hours, minutes, secs, ms)
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe(sys.argv[1], vad_filter=True)
with open(sys.argv[2], "w", encoding="utf-8") as out:
for index, segment in enumerate(segments, start=1):
out.write("%d\n" % index)
out.write("%s --> %s\n" % (ts(segment.start), ts(segment.end)))
out.write("%s\n\n" % segment.text.strip())Selanjutnya, telusuri pustaka:
for f in /srv/media/films/*.mkv; do
ffmpeg -nostdin -y -i "$f" -vn -ac 1 -ar 16000 -c:a pcm_s16le "${f%.mkv}.wav"
nice -n 15 ~/stt/bin/python srt.py "${f%.mkv}.wav" "${f%.mkv}.en.srt"
rm -f "${f%.mkv}.wav"
done-nostdin bukan sekadar hiasan. Tanpa opsi tersebut, ffmpeg membaca input dari input standar loop, menghabiskan sisa daftar file, lalu loop berhenti setelah memproses satu film tanpa pesan error.
Perkirakan waktunya sebelum memulai. Pada angka 7.6x di atas, film berdurasi 100 menit memerlukan sekitar 13 menit waktu CPU. Jadi, pustaka berisi lima puluh film akan membutuhkan waktu semalaman. Pada paket vCPU bersama, prosesnya lebih lambat lagi. Itulah fungsi nice: proses subtitle akan mengalah dan memberikan CPU kepada aktivitas lain yang dijalankan server.
Text to speech dengan Piper
Piper adalah engine text-to-speech neural yang menjalankan model suara ONNX pada CPU. Piper menyertakan espeak-ng untuk mengonversi teks menjadi fonem, sehingga Anda tidak perlu memasang phonemizer terpisah. Rilis saat ini adalah 1.6.0, yang dipublikasikan pada July 2026.
python3 -m venv ~/tts
~/tts/bin/pip install piper-tts==1.6.0
~/tts/bin/python -m piper.download_voices en_US-lessac-medium
~/tts/bin/python -m piper -m en_US-lessac-medium -f test.wav -- 'This is a test.'download_voices menulis dua file ke dalam working directory: bobot .onnx dan konfigurasi .onnx.json yang berisi sample rate serta daftar speaker. Keduanya harus tetap berada dalam direktori yang sama. Jika Anda menyimpan voice di lokasi tetap, teruskan --data-dir ke kedua command karena player akan mencari di working directory jika tidak, sehingga tidak dapat menemukan voice yang tidak berada di sana.
-- sebelum teks juga penting. Tanpanya, kalimat apa pun yang diawali tanda hyphen akan diproses sebagai command-line option.
Voice tersedia dalam beberapa tingkat kualitas. Voice bahasa Inggris berkualitas medium berukuran sekitar 60 MB, sedangkan voice berkualitas high berukuran sekitar dua kali lipat. Kualitas yang lebih tinggi berarti model yang lebih besar dan penggunaan CPU yang lebih tinggi per detik suara, bukan speaker yang berbeda.
Jangan memanggil CLI dalam loop. CLI memuat model pada setiap pemanggilan, dan pemuatan model mendominasi biaya untuk kalimat pendek. Jalankan HTTP server sebagai gantinya:
~/tts/bin/pip install 'piper-tts[http]==1.6.0'
~/tts/bin/python -m piper.http_server -m en_US-lessac-medium --host 127.0.0.1 --port 5000curl -X POST -H 'Content-Type: application/json' \
-d '{ "text": "This is a test." }' \
-o test.wav localhost:5000/synthesizeJika Anda dapat memutar test.wav, berarti konfigurasi berfungsi. Endpoint tersebut menggunakan format milik Piper, bukan format OpenAI, sehingga client yang mengharapkan /v1/audio/speech tidak dapat berkomunikasi dengannya. Bagian berikutnya memperbaikinya.
Biarkan proses tetap berjalan menggunakan unit file, bukan terminal yang akan Anda tutup:
[Unit]
Description=Piper text to speech HTTP server
After=network-online.target
[Service]
User=piper
ExecStart=/home/piper/tts/bin/python -m piper.http_server -m en_US-lessac-medium --data-dir /home/piper/voices --host 127.0.0.1 --port 5000
Restart=on-failure
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now piper menjalankannya dan memulihkannya setelah reboot. Jika curl di atas tidak mengembalikan apa pun, journalctl -u piper -n 50 berisi penyebabnya, dan file voice yang hilang adalah penyebab yang paling umum.
Bentuk server yang kompatibel dengan OpenAI
Sebagian besar perangkat lunak yang menangani audio sudah menggunakan audio API OpenAI: POST multipart ke /v1/audio/transcriptions untuk file, dan POST JSON ke /v1/audio/speech untuk kalimat. Sediakan kedua path tersebut sendiri. Klien hanya perlu satu perubahan, yaitu base URL.
Speaches adalah salah satu server yang menangani kedua arah. Server ini menjalankan faster-whisper untuk transkripsi dan Piper atau Kokoro untuk sintesis suara, melalui path OpenAI. Rilis saat ini adalah v0.9.0-rc.3 dari December 2025. Rilis ini masih sebelum 1.0, jadi tetapkan tag image dan baca catatan rilis sebelum melakukan upgrade.
curl --silent --remote-name https://raw.githubusercontent.com/speaches-ai/speaches/master/compose.yaml
curl --silent --remote-name https://raw.githubusercontent.com/speaches-ai/speaches/master/compose.cpu.yaml
export COMPOSE_FILE=compose.cpu.yaml
docker compose up --detachBentuk single-container, jika Anda tidak ingin menyimpan file compose:
docker run --rm --detach --publish 8000:8000 --name speaches \
--volume hf-hub-cache:/home/ubuntu/.cache/huggingface/hub \
ghcr.io/speaches-ai/speaches:latest-cpuNamed volume adalah bagian yang sering diabaikan. Tanpanya, cache model tersimpan di dalam container. Akibatnya, setiap restart mengunduh ulang beberapa gigabyte bobot model sebelum permintaan pertama dapat dijawab.
Speech memerlukan voice yang sudah diunduh sebelum /v1/audio/speech dapat menjawab:
uvx speaches-cli model download speaches-ai/Kokoro-82M-v1.0-ONNXSetelah itu, setiap klien OpenAI dapat digunakan dengan mengubah base URL:
from pathlib import Path
from openai import OpenAI
openai = OpenAI(base_url="http://localhost:8000/v1", api_key="cant-be-empty")
res = openai.audio.speech.create(
model="speaches-ai/Kokoro-82M-v1.0-ONNX",
voice="af_heart",
input="Hello, world!",
response_format="mp3",
speed=1,
)
with Path("output.mp3").open("wb") as f:
f.write(res.response.read())Placeholder api_key diperlukan karena library klien OpenAI menolak mengirim permintaan tanpa nilai tersebut. Server mengabaikan nilainya sampai Anda mengonfigurasi key yang sebenarnya.
vox-box adalah proyek lain yang layak disebut. Proyek ini merupakan package Python, bukan container, dan menyediakan path yang sama dengan Whisper, FunASR, Bark, Dia, atau CosyVoice di belakangnya. Versi 0.0.21 adalah versi terbaru dari December 2025, dan memerlukan Python 3.10 atau yang lebih baru.
python3 -m venv ~/voice
~/voice/bin/pip install vox-box==0.0.21
~/voice/bin/vox-box start --huggingface-repo-id Systran/faster-whisper-small \
--data-dir ~/voice/data --host 127.0.0.1 --port 8010Contoh dari proyek ini mengikat port 80, yang memerlukan root. Pada server yang menjalankan layanan lain, penggunaan high port di belakang reverse proxy merupakan bentuk yang lebih baik. vox-box start hanya menerima satu model. Untuk menangani kedua arah, jalankan instance kedua pada port lain dengan speech repo id.
Tanyakan model yang dimuat oleh server, lalu gunakan id tersebut pada field model:
curl http://127.0.0.1:8010/v1/modelscurl http://127.0.0.1:8010/v1/audio/transcriptions \
-H "Content-Type: multipart/form-data" \
-F file="@voice-note.m4a" \
-F model="faster-whisper-small"Body JSON dengan bentuk {"text": "..."} berarti seluruh path berfungsi. Status 404 pada nama model berarti Anda menebak, bukan membaca output /v1/models.
Tidak satu pun server ini mengaktifkan autentikasi secara default. Bind server ke 127.0.0.1, lalu akses melalui VPN atau reverse proxy yang meminta kredensial. /v1/audio/transcriptions yang terbuka pada IP publik menyediakan CPU gratis bagi siapa pun yang menemukannya. Mereka pasti akan menemukannya.
Antarmuka suara untuk asisten yang di-hosting sendiri
Setelah kedua arah dapat merespons melalui endpoint OpenAI, antarmuka chat dapat menggunakannya. Open WebUI dan alternatifnya menerima base URL yang kompatibel dengan OpenAI untuk audio di pengaturannya. Dengan demikian, satu mesin dapat menjalankan LLM lokal dengan Ollama dan menutup alur suara di kedua sisi.
Perkirakan latensi secara realistis karena ketiga langkah tersebut berjalan berurutan pada core yang sama. Pertanyaan berdurasi 10 detik memerlukan sekitar 1.3 detik untuk ditranskripsikan pada angka 7.6x di atas. Itu belum termasuk waktu yang diperlukan model untuk membaca satu token pun. Tambahkan pembuatan token oleh CPU, dan waktu pulang-pergi menjadi cukup lambat sehingga penguji mengira sistem mengalami crash. Transkripsi batch masih nyaman dilakukan pada CPU. Percakapan tidak demikian. Pada titik inilah VPS dengan GPU mulai sepadan dengan biayanya.
Kapan GPU benar-benar diperlukan?
The data behind this chart
[
{
"label": "openai/whisper, fp16",
"x_realtime": 5.5,
"seconds": 143,
"memory_mb": "4,708"
},
{
"label": "faster-whisper, fp16",
"x_realtime": 12.4,
"seconds": 63,
"memory_mb": "4,525"
},
{
"label": "faster-whisper, int8",
"x_realtime": 13.2,
"seconds": 59,
"memory_mb": "2,926"
},
{
"label": "faster-whisper, int8, batch 8",
"x_realtime": 48.8,
"seconds": 16,
"memory_mb": "4,500"
}
]Pada GPU, model large dalam int8 berjalan pada 13.2x waktu nyata dan menggunakan 2,926 MB VRAM, sedangkan batching meningkatkannya menjadi 48.8x. Perhatikan hal yang tidak ditunjukkan oleh kedua grafik tersebut. Keduanya menjalankan model yang berbeda: baris GPU menggunakan large-v2, sedangkan baris CPU menggunakan small. GPU tidak membuat model small menjadi enam kali lebih cepat. GPU membuat model yang akurat dapat digunakan.
Asal angka-angka ini
Kedua grafik menampilkan kembali benchmark yang dipublikasikan dalam README faster-whisper. Audio yang digunakan adalah satu file berdurasi 13 menit. Baris CPU menggunakan 8 thread pada Intel Core i7-12700K, sedangkan baris GPU menggunakan CUDA 12.4 pada NVIDIA RTX 3070 Ti dengan VRAM 8 GB. Kolom detik dan memori menggunakan angka yang dipublikasikan. Kolom x_realtime dihitung dari angka tersebut: 780 detik audio dibagi waktu pengukuran, lalu dibulatkan menjadi satu angka desimal. Kolom memori menunjukkan RAM sistem pada grafik CPU dan VRAM pada grafik GPU.
Paket vCPU bersama tidak akan mencapai angka CPU tersebut. Benchmark itu menggunakan 8 thread dari prosesor desktop yang cepat secara eksklusif. Anggap 7.6x sebagai batas atas, lalu ukur server Anda sendiri dengan time pada rekaman nyata sebelum membuat rencana berdasarkan angka tersebut.
Empat pedoman umum yang terbukti dalam praktik:
- Transkripsi rekaman sendiri sesekali: CPU, small, int8. Dua vCPU khusus sudah cukup.
- Pekerjaan batch semalaman, seperti membuat subtitle: CPU, small atau medium, int8, yang dijalankan dalam
nice. - Pekerjaan interaktif apa pun, atau seluruh pustaka dalam satu malam: GPU.
- Piper: selalu gunakan CPU. Model suara sebesar ini hampir tidak memperoleh manfaat dari GPU.
Jika Anda sedang menghitung beban lain yang dapat dijalankan pada perangkat keras yang sama, pertanyaan yang lebih luas tentang model AI yang dapat Anda host sendiri membahas ukuran model yang dapat dan tidak dapat ditampung.
Mode kegagalan, dengan string yang akan Anda lihat
error: externally-managed-environment saat instalasi. Python sistem dilindungi oleh distribusi. Buat virtual environment seperti yang ditunjukkan di atas.
Ketidakcocokan cuDNN pada mesin GPU. Kegagalannya terlihat seperti ini:
Unable to load any of {libcudnn_ops.so.9.1.0, libcudnn_ops.so.9.1, libcudnn_ops.so.9, libcudnn_ops.so}
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptorCTranslate2 4.5.0 dan versi yang lebih baru memerlukan cuDNN 9 untuk CUDA 12, sedangkan host menggunakan cuDNN 8. Instal cuDNN 9 atau pin runtime yang lebih lama dengan pip install --force-reinstall ctranslate2==4.4.0. Pilih salah satu. Jika keduanya dilakukan, masalah akan kembali seperti semula.
This CTranslate2 package was not compiled with CUDA support adalah masalah lain dengan gejala yang serupa. Wheel yang terinstal adalah build khusus CPU. Buat ulang virtual environment pada host GPU dan biarkan pip memilih wheel kembali.
Frasa berulang dalam transkrip. Kalimat yang berulang sepuluh kali hampir selalu disebabkan oleh keheningan atau musik yang didekode sebagai ucapan. Aktifkan vad_filter=True terlebih dahulu. Jika masalah tetap terjadi, dengarkan segmennya: audio yang hampir hening tidak memberi Whisper titik acuan, sehingga Whisper mengulang tebakan terakhirnya yang paling meyakinkan.
Bahasa terdeteksi secara keliru. Whisper hanya membuat tebakan berdasarkan 30 detik pertama. Nilai info.language_probability yang jauh di bawah 1.0 berarti Whisper tidak yakin. Hal ini terjadi ketika rekaman diawali musik atau percakapan yang saling tumpang tindih. Gunakan language="en" jika Anda sudah mengetahui jawabannya.
Proses mencetak Killed lalu berhenti. Itu adalah pembunuh proses kehabisan memori pada kernel, dan dmesg akan menampilkan baris oom-kill yang sesuai. large-v3 memerlukan lebih dari 3 GB hanya untuk weights, sebelum memori kerja digunakan. Pada VPS 2 GB, small dengan int8 adalah model terbesar yang dapat digunakan.
Piper tidak dapat menemukan voice. Player mencari voice di direktori kerja, kecuali Anda meneruskan --data-dir. Jalankan ls pada direktori yang Anda harapkan dan pastikan .onnx serta .onnx.json sama-sama tersedia, karena keberadaan salah satunya saja akan gagal, begitu pula jika keduanya tidak ada.
FAQ
Dapatkah saya menjalankan speech to text pada VPS yang hanya menggunakan CPU?
Ya. Untuk pekerjaan batch, ini merupakan pilihan yang tepat. Dengan faster-whisper menggunakan model small pada int8, benchmark yang dipublikasikan proyek tersebut mentranskripsikan audio berdurasi 13 menit dalam 102 detik pada 8 thread desktop i7, atau sekitar 7.6x waktu nyata, dengan penggunaan RAM sebesar 1,477 MB. Paket vCPU bersama berjalan lebih lambat dari itu, jadi ukur kinerja server Anda sendiri. Text to speech dengan Piper bahkan lebih mudah dan tidak memerlukan GPU dalam kondisi apa pun.
Ukuran model Whisper mana yang sebaiknya saya gunakan?
Mulailah dengan small pada int8. Model ini berukuran 484 MB di disk dan dapat menangani rekaman ucapan yang jelas dengan baik. Gunakan medium jika aksen atau kebisingan latar belakang menimbulkan error yang tidak dapat Anda toleransi. Gunakan large-v3 hanya jika akurasi lebih penting daripada hal lainnya, karena model ini memerlukan 3,090 MB ruang disk dan lebih dari 3 GB memori. Sebaliknya, tiny berukuran 75.5 MB berguna untuk deteksi bahasa dan pengujian pipeline, bukan untuk transkrip yang akan dibaca orang.
Mengapa faster-whisper lebih cepat daripada paket Whisper asli?
Modelnya sama. Runtime-nya berbeda. Paket referensi menjalankan Whisper di PyTorch, sedangkan faster-whisper menjalankan bobot yang sama pada CTranslate2, yaitu engine yang dirancang untuk inferensi transformer, melakukan kuantisasi bobot saat dimuat, dan tidak memerlukan instalasi PyTorch. Pada benchmark CPU yang dipublikasikan, paket referensi mencapai 1.9x waktu nyata, sedangkan faster-whisper pada int8 mencapai 7.6x waktu nyata dengan penggunaan memori yang lebih rendah.
Mengapa transkrip saya mengulangi kalimat yang sama terus-menerus?
Whisper menganggap keheningan atau musik sebagai ucapan, lalu menggunakan tebakan terakhirnya yang paling meyakinkan. Atur vad_filter=True dalam pemanggilan transcribe(). Pengaturan ini menjalankan deteksi aktivitas suara Silero terlebih dahulu dan menghapus bagian hening sebelum diproses model. Jika pengulangan masih terjadi, periksa level audio. Rekaman yang hampir sepenuhnya hening tidak memberikan informasi yang cukup bagi model.
Bagaimana cara mendapatkan endpoint audio yang kompatibel dengan OpenAI di server sendiri?
Jalankan server yang mengimplementasikan POST /v1/audio/transcriptions dan POST /v1/audio/speech, lalu arahkan client ke server tersebut menggunakan base URL baru. Speaches merupakan salah satu pilihan. Software ini tersedia sebagai container image dengan build CPU, serta menggunakan faster-whisper untuk transkripsi dan Piper atau Kokoro untuk speech. vox-box merupakan pilihan lain. Instal dengan pip install vox-box dan jalankan dengan vox-box start --huggingface-repo-id. Software ini melayani satu model per proses. Keduanya tidak mengaktifkan autentikasi secara default. Karena itu, bind ke localhost dan tempatkan proxy atau VPN di depannya.