VPS üzerinde self-hosted Whisper ve Piper kurulumu
Kendi sunucunuzda Whisper ve Piper ile ses işleme süreçlerini yönetin. CPU tabanlı VPS maliyetleri, disk gereksinimleri ve OpenAI uyumlu API uç noktası kurulumunu öğrenin.
Self-hosted konuşmadan metne ve metinden konuşmaya (TTS) kısaca
Self-hosted konuşmadan metne ve metinden konuşmaya (TTS) dönüştürme, kendi sunucunuzda çalıştırabileceğiniz en düşük maliyetli yapay zeka türüdür. Transkripsiyon işlemi, faster-whisper çalışma zamanı üzerinden Whisper ile gerçekleştirilir. Sentezleme ise Piper ile çalışır. Her ikisi de GPU gerektirmeyen standart bir CPU VPS üzerinde çalışabilir. Küçük Whisper modeli yaklaşık 484 MB disk alanı gerektirir ve bir Piper ses dosyası 150 MB'ın oldukça altındadır.
Ses teknolojileri bu yüzden başlangıç için en uygun alandır. Self-hosted bir görsel oluşturucu ve self-hosted video oluşturma araçlarının her ikisi de kullanılabilir hale gelmeleri için bir GPU gerektirir. Ses teknolojileri ise gerektirmez.
Bu kılavuz her iki yönü ve bunları birleştiren katmanı ele almaktadır. Whisper, sesi metne dönüştürür. Piper, metni sese dönüştürür. Her ikisinin önünde yer alan OpenAI uyumlu bir HTTP sunucusu, mevcut bir istemcinin yalnızca base URL değişikliği ile sunucunuza bağlanmasını sağlar.
Burada adı geçen her sürüm, Ağustos 2026 itibarıyla günceldir.
Neden referans Whisper paketi değil de faster-whisper?
OpenAI'nin whisper paketi, modeli PyTorch üzerinde çalıştırır. faster-whisper ise aynı model ağırlıklarını, özellikle transformer modelleri için yazılmış bir çıkarım motoru olan CTranslate2 üzerinde çalıştırır. Ağırlıklar aynı olduğu için transkript de aynıdır. Aradaki fark tamamen çalışma zamanından kaynaklanır.
CTranslate2, ağırlıkları yüklerken niceler (quantize eder); bu nedenle compute_type="int8" ayrı bir dönüştürme adımı değil, tek bir argümandır. Ayrıca PyTorch bağımlılığı yoktur. pip install faster-whisper; CTranslate2, bir tokenizer ve ses kod çözme için PyAV çeker; bu sayede sanal ortam boyutu birkaç gigabayt yerine yüzlerce megabayt seviyesinde kalır. 40 GB diske sahip bir VPS üzerinde bu fark, sistemin rahat çalışması ile daralması arasındaki farktır.
Aşağıda, small modeli için CPU üzerinde yayınlanan proje verileri yer almaktadır. Karşılaştırma testi, Intel Core i7-12700K üzerinde 8 iş parçacığı (thread) kullanılarak 13 dakikalık sesin transkripsiyonunu yapmaktadır. x_realtime sütunu, 13 dakikanın ölçülen süreye bölünmüş halidir: 7.6 değeri, 13 dakikalık bir kaydın 1 dakika 40 saniyenin biraz üzerinde bir sürede tamamlandığı anlamına gelir.
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"
}
]İkinci satırı dikkatle inceleyin. fp32 modunda whisper.cpp, bu CPU üzerinde faster-whisper'dan daha hızlıdır; 6.2x değerine karşılık 5.0x hızıyla çalışır ve bunu bellek kullanımının yarısından daha azıyla yapar. Bu, yerel LLM yığınının llama.cpp tarafının arkasındaki aynı ggml ailesidir. faster-whisper, int8 ve toplu işleme (batching) etkinleştirildiğinde 15.3x hızına ulaşarak öne geçer ve bunun için 3,608 MB RAM kullanır. Özetle: Python API ve toplu işleme için faster-whisper'ı, RAM'in aşamayacağınız bir kısıt olduğu durumlarda ise whisper.cpp'yi seçin.
İlk satır, bu bölümün ana fikridir. Referans paket aynı makinede 1.9x gerçek zamanlı hızdadır; bu da bir saatlik sesin yarım saatlik CPU süresi alması demektir.
Whisper model ağırlıkları ne kadar disk alanı gerektirir?
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"
}
]Bunlar, float16 formatındaki yayınlanmış CTranslate2 dönüştürmeleridir. compute_type="int8" aracının ne yapmadığına dikkat edin: indirme boyutunu küçültmez. Ağırlıklar float16 olarak gelir ve CTranslate2 bunları yükleme sırasında bellekte niceler (quantize eder); bu nedenle large-v3, float16 veya int8 modunda çalıştırılsa da diskte 3,090 MB yer kaplar. int8 kullanımı size diskten değil, RAM ve hızdan tasarruf sağlar.
Modeller ilk kullanımda ~/.cache/huggingface/hub dizinine indirilir. Küçük bir root bölümüne sahip bir VPS üzerinde çalışıyorsanız, download_root argümanını veya HF_HOME ortam değişkenini kullanarak bu dizini yeterli alanı olan bir yere yönlendirin; aksi takdirde ilk çalıştırmada disk dolar ve işlem indirme sırasında yarıda kesilir.
Sistem Python'ını bozmadan faster-whisper kurulumu
Ubuntu 24.04 ve Debian 13, sistem Python'ını harici olarak yönetilen (externally managed) şeklinde işaretler. Bir sanal ortam dışında pip install faster-whisper çalıştırmak şu hata ile derhal durur:
error: externally-managed-environmentBu durum, paket yönetim sisteminin apt tarafından sahip olunan dosyaları korumasından kaynaklanır. Bir sanal ortam kullanın.
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.1Sürüm 1.2.1, Ekim 2025'te yayınlanan güncel sürümdür. faster-whisper, ses dosyalarını kendi ffmpeg kütüphanelerini içeren PyAV aracılığıyla çözer; bu sayede ayrı bir ffmpeg ikili dosyasına ihtiyaç duymadan mp3 veya m4a dosyalarını okuyabilir. Yukarıdaki ffmpeg paketi, bu kılavuzun ilerleyen bölümlerindeki video işlemleri içindir.
Üç gigabaytlık ağırlık dosyalarını indirmeden önce kurulumu doğrulayın:
~/stt/bin/python -c "from faster_whisper import WhisperModel; print('ok')"ok yazan bir satır, paketlerin başarıyla kurulduğu anlamına gelir. ctranslate2 adını içeren bir ImportError hatası, mimarinize uygun paketin kurulmadığını gösterir; bu durum 32-bit ARM imajlarında yaşanır.
Toplantı kaydını veya sesli notu metne dökme
Bunu transcribe.py olarak kaydedin:
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))Bunu ~/stt/bin/python transcribe.py ile çalıştırın. İlk çalıştırmada ağırlıklar indirildiği için bir süre çıktı alınmaz. Daha sonra model önbellekten birkaç saniye içinde yüklenir.
segments bir üreticidir (generator), bu nedenle metne dökme işlemi siz üzerinde yineleme yapana kadar başlamaz. Kullanıcılar transcribe() çağrısını zamanlayıp anında döndüğünü görünce bir şeylerin bozuk olduğunu düşünür. Hiçbir şey bozuk değildir. İşlem döngü içinde gerçekleşir.
vad_filter=True önce Silero VAD (ses etkinliği algılama) çalıştırır ve sessiz bölümleri Whisper görmeden önce eler. Uzun boşluklar içeren bir toplantı kaydında bu, elde edilebilecek en büyük hız kazancıdır; çünkü Whisper konuşma içermeyen ses üzerinde hiç zaman harcamaz. Ayrıca bu yöntem, Whisper'a sessizlik verildiğinde ve içinde kelime bulmaya çalıştığında oluşan tekrarlayan cümle döngülerini de engeller.
cpu_threads değerini sahip olduğunuz gerçek çekirdek sayısına ayarlayın. Bu değeri vCPU sayınızın üzerine çıkarmak metne dökme işlemini yavaşlatır; çünkü fazladan iş parçacıkları aynı çekirdek için rekabet eder ve zamanlayıcı her geçiş için bir maliyet öder.
Jellyfin kütüphanesi için altyazılar
Jellyfin, video dosyasıyla aynı dizinde bulunan ve aynı ismi paylaşan harici altyazı dosyalarını okur; bu nedenle Movie (2019).en.srt dosyasının Movie (2019).mkv yanında bulunması, transkodlama veya kütüphane yeniden oluşturma gerektirmeden İngilizce bir altyazı izi olarak görünmesini sağlar.
Önce sesi ayıklayın. Whisper, dahili olarak her şeyi 16 kHz mono formatına dönüştürür; bu nedenle ona doğrudan 16 kHz mono ses vermek, her iki taraftaki iş yükünü azaltır:
ffmpeg -i "Movie (2019).mkv" -vn -ac 1 -ar 16000 -c:a pcm_s16le "Movie (2019).wav"faster-whisper içinde SRT yazıcı bulunmaz, bu yüzden segmentleri kendiniz biçimlendirin. Bunu srt.py olarak kaydedin:
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())Ardından kütüphaneyi tarayın:
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 bir süs değildir. Bu olmadan ffmpeg, döngünün standart girişinden okuma yapar, dosya listesinin geri kalanını yutar ve döngü, hata mesajı vermeden tek bir filmden sonra durur.
Başlamadan önce süreyi planlayın. Yukarıdaki 7.6x gerçek zamanlı değerine göre, 100 dakikalık bir film yaklaşık 13 dakikalık CPU süresine ihtiyaç duyar; dolayısıyla elli filmlik bir kütüphane bir gecelik iştir. Paylaşımlı bir vCPU planında bu süre daha uzundur; nice tam olarak bu amaçla kullanılır: altyazı işlemi, sunucuda o an çalışan diğer işlere öncelik vererek kaynakları serbest bırakır.
Piper ile metinden sese dönüştürme
Piper, CPU üzerinde ONNX ses modelini çalıştıran sinirsel bir metinden sese dönüştürme motorudur. Metni fonemlere dönüştürmek için espeak-ng içerir, bu nedenle ayrıca kurulması gereken bir fonemleyici yoktur. Güncel sürüm 1.6.0 olup Temmuz 2026 tarihinde yayınlanmıştır.
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, çalışma dizinine iki dosya yazar: .onnx ağırlıkları ve örnekleme hızı ile konuşmacı listesini tutan bir .onnx.json yapılandırma dosyası. Bu dosyalar bir arada tutulmalıdır. Ses dosyalarını sabit bir konumda tutuyorsanız, her iki komuta da --data-dir parametresini geçin; aksi takdirde oynatıcı çalışma dizinine bakar ve orada olmayan bir sesi bulamaz.
Metinden önceki -- de önemlidir. Bu olmadan, tire ile başlayan her cümle komut satırı seçeneği olarak ayrıştırılır.
Sesler çeşitli kalite seviyelerinde sunulur. Orta seviye bir İngilizce sesi yaklaşık 60 MB, yüksek seviyeli olan ise bunun yaklaşık iki katıdır. Daha yüksek kalite, farklı bir konuşmacı değil, daha büyük bir model ve konuşma saniyesi başına daha fazla CPU kullanımı anlamına gelir.
CLI'yı bir döngü içinde çağırmayın. Her çağrıda modeli yükler ve model yükleme süresi, kısa bir cümlenin maliyetinde baskın faktördür. Bunun yerine HTTP sunucusunu çalıştırın:
~/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/synthesizeOynatabileceğiniz bir test.wav, çalıştığı anlamına gelir. Bu uç nokta Piper'ın kendi yapısıdır, OpenAI'ınki değildir; bu nedenle /v1/audio/speech bekleyen bir istemci onunla iletişim kuramaz. Bir sonraki bölüm bunu düzeltir.
Kapatacağınız bir terminal yerine bir unit dosyası ile çalışır durumda tutun:
[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 onu başlatır ve yeniden başlatma sonrasında tekrar ayağa kaldırır. Yukarıdaki curl komutu hiçbir şey döndürmezse, journalctl -u piper -n 50 nedenini tutar; eksik bir ses dosyası genellikle karşılaşılan nedendir.
OpenAI uyumlu sunucu yapısı
Ses işleyen çoğu yazılım halihazırda OpenAI ses API'sini destekler: dosya için /v1/audio/transcriptions adresine çok parçalı (multipart) bir POST isteği, cümle için /v1/audio/speech adresine bir JSON POST isteği gönderilir. Bu iki yolu kendi sunucunuzda barındırdığınızda, istemcinin yalnızca temel URL (base URL) ayarını değiştirmesi yeterli olur.
Speaches, her iki yönü de destekleyen bir sunucudur. Transkripsiyon için faster-whisper, konuşma için ise Piper veya Kokoro'yu OpenAI yolları arkasında çalıştırır. Mevcut sürüm, Aralık 2025 tarihli v0.9.0-rc.3'tür; henüz 1.0 sürümüne ulaşmadığı için imaj etiketini sabitleyin ve yükseltme yapmadan önce sürüm notlarını okuyun.
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 --detachCompose dosyalarıyla uğraşmak istemiyorsanız, tek konteynerli form şu şekildedir:
docker run --rm --detach --publish 8000:8000 --name speaches \
--volume hf-hub-cache:/home/ubuntu/.cache/huggingface/hub \
ghcr.io/speaches-ai/speaches:latest-cpuİsimlendirilmiş birim (named volume), kullanıcıların genellikle gözden kaçırdığı kısımdır. Bu birim olmadan model önbelleği konteynerin içinde kalır; bu durumda her yeniden başlatmada, ilk istek yanıtlanmadan önce gigabaytlarca ağırlık (weights) tekrar indirilir.
Speech, /v1/audio/speech yanıt vermeden önce bir ses dosyasının indirilmesini gerektirir:
uvx speaches-cli model download speaches-ai/Kokoro-82M-v1.0-ONNXBundan sonra, temel URL değiştirilerek herhangi bir OpenAI istemcisi kullanılabilir:
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())api_key yer tutucusu gereklidir çünkü OpenAI istemci kütüphanesi, bu değer olmadan istek göndermeyi reddeder. Siz gerçek bir anahtar yapılandırana kadar sunucu bu değeri görmezden gelir.
vox-box, burada bahsedilmeye değer diğer projedir. Bir konteynerden ziyade bir Python paketidir ve Whisper, FunASR, Bark, Dia veya CosyVoice ile aynı yolları sunar. Aralık 2025 tarihli 0.0.21 sürümü günceldir ve Python 3.10 veya üzerini gerektirir.
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 8010Projenin kendi örneği, root yetkisi gerektiren 80 numaralı portu bağlar. Başka işlemlerin de çalıştığı bir sunucuda, bir reverse proxy arkasında yüksek bir port kullanmak daha iyi bir yapıdır. vox-box start tek bir model alır, bu nedenle her iki yönü de kapsamak için ses deposu kimliğiyle ikinci bir portta ikinci bir örnek çalıştırmak gerekir.
Sunucuya neleri yüklediğini sorun, ardından bu kimliği model alanında kullanın:
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"{"text": "..."} biçimindeki bir JSON gövdesi, tüm yolun çalıştığı anlamına gelir. Model adında 404 hatası alıyorsanız, /v1/models çıktısını okumak yerine tahminde bulunmuşsunuz demektir.
Bu sunucuların hiçbiri varsayılan olarak kimlik doğrulamasını açmaz. Bunları 127.0.0.1 adresine bağlayın ve bir VPN veya kimlik bilgisi soran bir reverse proxy üzerinden erişin. Genel bir IP üzerinde açık bir /v1/audio/transcriptions, onu bulan herkes için bedava CPU kaynağıdır ve mutlaka bulunacaktır.
Self-hosted bir asistan için sesli ön yüz
Her iki yön de OpenAI yollarında yanıt vermeye başladığında, bir sohbet ön yüzü bunları yönetebilir. Open WebUI ve alternatifleri, ayarlarında ses için OpenAI uyumlu bir temel URL kabul eder; böylece tek bir sunucu Ollama ile yerel bir LLM çalıştırabilir ve ses döngüsünü her iki uçta da kapatabilir.
Gecikme süresini gerçekçi bir şekilde hesaplayın, çünkü bu üç adım aynı çekirdekler üzerinde sırayla çalışır. 10 saniyelik bir soru, yukarıdaki 7.6x değerinde yaklaşık 1,3 saniyede yazıya dökülür ve bu süre, model henüz tek bir token bile okumadan önce gerçekleşir. Buna CPU tabanlı token üretimini de eklediğinizde, gidiş-dönüş süresi test edenlerin sistemin çöktüğünü düşünmesine neden olacak kadar yavaşlar. Toplu transkripsiyon CPU üzerinde rahatlıkla çalışır. Ancak karşılıklı konuşma için bu durum geçerli değildir ve işte bu nokta, GPU destekli bir VPS'in maliyetini hak etmeye başladığı yerdir.
GPU kullanımı ne zaman gerçekten değerlidir?
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"
}
]GPU üzerinde, int8 formatındaki büyük model 13.2x gerçek zamanlı hızda ve 2,926 MB VRAM kullanımıyla çalışır; toplu işleme (batching) ile bu hız 48.8x seviyesine çıkar. İki tablonun neyi belirtmediğine dikkat edin. Farklı modeller çalıştırılmaktadır: GPU satırları large-v2, CPU satırları ise small modeline aittir. GPU, küçük modeli altı kat hızlandırmaz. GPU, yüksek doğruluklu modelin kullanılabilir olmasını sağlar.
Bu verilerin kaynağı
Her iki tablo da faster-whisper README dosyasında yayınlanan benchmark sonuçlarını yansıtır. Ses dosyası 13 dakikalık tek bir kayıttır. CPU satırlarında Intel Core i7-12700K üzerinde 8 iş parçacığı (thread), GPU satırlarında ise 8 GB VRAM'e sahip NVIDIA RTX 3070 Ti üzerinde CUDA 12.4 kullanılmıştır. Saniye ve bellek sütunları yayınlanan verilerdir. x_realtime sütunu, 780 saniyelik sesin ölçülen süreye bölünmesi ve bir ondalık basamağa yuvarlanmasıyla elde edilen aritmetik bir sonuçtur. Bellek sütunu, CPU tablosu için sistem RAM'ini, GPU tablosu için ise VRAM'i ifade eder.
Paylaşımlı bir vCPU planı, bu CPU değerlerine ulaşamaz. Söz konusu benchmark, hızlı bir masaüstü işlemcisinin 8 iş parçacığını tamamen kullanmıştır. 7.6x değerini bir üst sınır olarak kabul edin ve herhangi bir planlama yapmadan önce kendi sunucunuzda time ile gerçek bir kayıt üzerinde ölçüm yapın.
Uygulamada geçerli olan dört temel kural:
- Kendi kayıtlarınızın ara sıra deşifre edilmesi: CPU, small, int8. İki adet ayrılmış vCPU yeterlidir.
- Altyazı oluşturma gibi gece boyunca süren toplu işler: CPU, small veya medium, int8,
niceile sarmalanmış şekilde. - Etkileşimli tüm işlemler veya bir akşamda tüm kütüphanenin işlenmesi: GPU.
- Piper: Her zaman CPU. Bu boyuttaki bir ses modeli, GPU kullanımından neredeyse hiçbir kazanım sağlamaz.
Aynı donanımın başka neleri kaldırabileceğini hesaplıyorsanız, self-host edebileceğiniz yapay zeka modelleri hakkındaki daha geniş kapsamlı soru, hangi modellerin sığıp hangilerinin sığmadığını açıklamaktadır.
Hata modları ve karşılaşacağınız dizgeler
Kurulum sırasında error: externally-managed-environment. Sistem Python'ı dağıtım tarafından korunmaktadır. Yukarıda gösterildiği gibi bir sanal ortam oluşturun.
GPU sunucusunda cuDNN uyuşmazlığı. Hata şu şekilde görünür:
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 ve sonraki sürümleri, CUDA 12 için cuDNN 9 gerektirir ancak ana makinede cuDNN 8 yüklüdür. Ya cuDNN 9 kurun ya da eski çalışma zamanını pip install --force-reinstall ctranslate2==4.4.0 ile sabitleyin. Bu iki işlemden yalnızca birini yapın. İkisini birden yapmak sizi başlangıç noktasına geri döndürür.
This CTranslate2 package was not compiled with CUDA support, benzer bir his uyandıran farklı bir hatadır. Yüklenen paket, yalnızca CPU sürümüdür. Sanal ortamı GPU ana makinesinde yeniden oluşturun ve pip'in paketi tekrar seçmesine izin verin.
Transkriptte tekrarlanan ifadeler. On kez döngüye giren bir cümle, neredeyse her zaman konuşma olarak çözümlenen sessizlik veya müziktir. Öncelikle vad_filter=True özelliğini açın. Sorun devam ederse ilgili bölümü dinleyin: neredeyse sessiz olan ses kayıtları, Whisper'ın tutunabileceği bir veri sağlamaz ve model en son emin olduğu tahmini tekrarlar.
Yanlış dil algılandı. Whisper, dili yalnızca ilk 30 saniyeye bakarak tahmin eder. 1.0 değerinin çok altındaki bir info.language_probability, modelin emin olmadığını gösterir; bu durum kayıt müzik veya çapraz konuşmalarla başladığında yaşanır. Dilin ne olduğunu zaten biliyorsanız language="en" parametresini kullanın.
İşlem Killed çıktısı veriyor ve duruyor. Bu, çekirdeğin bellek yetersizliği nedeniyle süreci sonlandırmasıdır (OOM killer) ve dmesg komutu ilgili oom-kill satırını gösterecektir. large-v3 modeli, herhangi bir çalışma belleği ayrılmadan önce yalnızca ağırlıklar için 3 GB'tan fazla alana ihtiyaç duyar. 2 GB RAM'e sahip bir VPS üzerinde, int8 formatındaki small modeli sığabilecek en büyük modeldir.
Piper ses dosyasını bulamıyor. Oynatıcı, --data-dir parametresini kullanmadığınız sürece çalışma dizinine bakar. Beklediğiniz dizinde ls komutunu çalıştırın ve .onnx ile .onnx.json dosyalarının her ikisinin de mevcut olduğunu doğrulayın; çünkü biri olmadan diğeri de hiçbiri yokmuş gibi başarısız olur.
FAQ
Sadece CPU içeren bir VPS üzerinde konuşmadan metne dönüştürme işlemi yapabilir miyim?
Evet, toplu işlemler için bu mantıklı bir tercihtir. faster-whisper ile small modelini int8 formatında kullanarak, projenin yayınladığı kıyaslama sonuçlarına göre 13 dakikalık ses kaydı, masaüstü bir i7 işlemcinin 8 izleğinde 102 saniyede, yani gerçek zamanın 7.6 katı hızda ve 1,477 MB RAM kullanımıyla dönüştürülebilmektedir. Paylaşımlı bir vCPU planı bundan daha yavaş çalışacaktır, bu nedenle kendi sunucunuzda ölçüm yapmalısınız. Piper ile metinden konuşmaya dönüştürme işlemi ise çok daha kolaydır ve hiçbir koşulda GPU gerektirmez.
Hangi Whisper model boyutunu kullanmalıyım?
small modelinin int8 sürümüyle başlayın. Disk üzerinde 484 MB yer kaplar ve net kaydedilmiş konuşmaları başarıyla işler. Aksanlar veya arka plan gürültüsü kabul edilemez hatalara yol açtığında medium modeline geçin. Doğruluğun her şeyden önemli olduğu durumlarda ise large-v3 modelini tercih edin; ancak bu model 3,090 MB disk alanı ve 3 GB'ın üzerinde bellek gerektirir. Diğer taraftan, 75.5 MB boyutundaki tiny modeli, dil tespiti ve bir işlem hattını test etmek için kullanışlıdır; ancak insanlar tarafından okunacak transkriptler için uygun değildir.
Neden faster-whisper orijinal Whisper paketinden daha hızlıdır?
Model aynıdır ancak çalışma zamanı farklıdır. Referans paket Whisper'ı PyTorch üzerinde çalıştırırken, faster-whisper aynı ağırlıkları, transformer çıkarımı için özel olarak geliştirilmiş, ağırlıkları yükleme sırasında nicemleyen (quantize) ve PyTorch kurulumu gerektirmeyen CTranslate2 motoru üzerinde çalıştırır. Yayınlanan CPU kıyaslama sonuçlarında referans paket gerçek zamanın 1.9 katı hızda çalışırken, faster-whisper int8 ile 7.6 katı hızda ve daha az bellek tüketimiyle çalışmaktadır.
Transkriptim neden aynı cümleyi sürekli tekrarlıyor?
Whisper, sessizliği veya müziği konuşma olarak algılamakta ve en son emin olduğu tahmine geri dönmektedir. Silero ses etkinliği algılamasını (VAD) önceden çalıştıran ve model görmeden önce sessiz bölümleri kaldıran vad_filter=True parametresini transcribe() çağrısı içerisinde ayarlayın. Tekrarlar devam ediyorsa ses seviyesini kontrol edin; çünkü neredeyse tamamen sessiz olan bir kayıt, modele üzerinde çalışabileceği hiçbir veri sunmaz.
Kendi sunucumda OpenAI uyumlu bir ses uç noktasına nasıl sahip olabilirim?
POST /v1/audio/transcriptions ve POST /v1/audio/speech protokollerini uygulayan bir sunucu çalıştırın ve istemciyi yeni bir temel URL ile bu sunucuya yönlendirin. Speaches, transkripsiyon için faster-whisper, konuşma için ise Piper veya Kokoro kullanan ve CPU yapısı ile container imajı olarak yayınlanan bir seçenektir. Bir diğer seçenek olan vox-box, pip install vox-box ile kurulur ve her süreç için bir model sunan vox-box start --huggingface-repo-id ile başlatılır. Varsayılan olarak kimlik doğrulama özelliği bulunmadığından, sunucuyu localhost adresine bağlayın ve önüne bir proxy veya VPN yerleştirin.