Jinsi ya kuendesha Whisper na Piper kwenye VPS yako
Jifunze kuendesha Whisper na Piper kwenye VPS bila GPU. Mwongozo huu unaeleza matumizi ya CPU, nafasi ya diski, na jinsi ya kusanidi endpoint inayooana na OpenAI kwa urahisi.
Self-hosted speech-to-text na TTS kwa ufupi
Self-hosted speech-to-text na TTS (text-to-speech) ndiyo aina yafuu zaidi ya AI unayoweza kuendesha kwenye seva unayomiliki. Transcription huendesha Whisper kupitia runtime ya faster-whisper. Synthesis huendesha Piper. Zote hufanya kazi kwenye CPU VPS ya kawaida bila kuhitaji GPU yoyote. Model ndogo ya Whisper inahitaji takriban 484 MB ya diski, na sauti ya Piper ni faili moja iliyo chini ya 150 MB.
Hii ndiyo sababu sauti ndiyo sehemu nzuri ya kuanzia. Jenereta ya picha inayojiendesha (self-hosted) na utengenezaji wa video unaojiendesha (self-hosted) zote zinahitaji GPU ili ziweze kutumika. Sauti haihitaji hivyo.
Mwongozo huu unashughulikia pande zote mbili na safu inayozikutanisha. Whisper hubadilisha sauti kuwa matini (text). Piper hubadilisha matini kuwa sauti. Seva ya HTTP inayooana na OpenAI iliyowekwa mbele ya zote mbili inaruhusu mteja aliyepo aelekeze kwenye seva yako bila kubadilisha kitu chochote isipokuwa base URL.
Kila toleo lililotajwa hapa lilikuwa la sasa kufikia Agosti 2026.
Kwa nini utumie faster-whisper, badala ya kifurushi cha marejeleo cha Whisper
Kifurushi cha whisper cha OpenAI huendesha modeli hiyo ndani ya PyTorch. faster-whisper huendesha uzito (weights) uleule wa modeli kwenye CTranslate2, injini ya inference iliyoandikwa mahususi kwa ajili ya modeli za transformer. Uzito huo ni sawa, kwa hivyo nakala ya maandishi (transcript) inayotokea ni ileile. Tofauti yote iko kwenye runtime.
CTranslate2 hufanya quantization ya uzito wakati wa kuipakia, ndiyo maana compute_type="int8" ni hoja (argument) moja na si hatua tofauti ya ubadilishaji. Pia haina utegemezi wa PyTorch. pip install faster-whisper huvuta CTranslate2, tokenizer, na PyAV kwa ajili ya kusimbua sauti (audio decoding), hivyo mazingira ya virtual (virtual environment) yanachukua mamia ya megabytes badala ya gigabytes kadhaa. Kwenye VPS yenye diski ya 40 GB, pengo hilo ni tofauti kati ya kuwa na nafasi ya kutosha na kuwa na nafasi finyu.
Hizi hapa ni takwimu zilizochapishwa na mradi wenyewe kwa ajili ya modeli ya small kwenye CPU. Benchmark hiyo hufanya transcription ya dakika 13 za sauti kwa kutumia threads 8 kwenye Intel Core i7-12700K. Safu ya x_realtime ni zile dakika 13 zikigawanywa kwa muda uliopimwa: 7.6 inamaanisha rekodi ya dakika 13 imekamilika kwa muda kidogo zaidi ya dakika 1 na sekunde 40.
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"
}
]Soma safu ya pili kwa umakini. Katika fp32, whisper.cpp ni ya haraka kuliko faster-whisper kwenye CPU hii, 6.2x dhidi ya 5.0x, na inafanya hivyo kwa kutumia chini ya nusu ya kumbukumbu. Ni familia ileile ya ggml inayopatikana nyuma ya upande wa llama.cpp wa stack ya LLM ya ndani. faster-whisper hupata kasi zaidi pindi int8 na batching zinapowashwa, ikifikia 15.3x, na inatumia 3,608 MB ya RAM kwa ajili hiyo. Kwa hivyo: chagua faster-whisper kwa ajili ya Python API na batching, chagua whisper.cpp wakati RAM ndiyo kizuizi ambacho huwezi kukiepuka.
Safu ya kwanza ndiyo hoja kuu ya sehemu hii. Kifurushi cha marejeleo kina kasi ya 1.9x ya muda halisi kwenye mashine hiyo hiyo, jambo linalomaanisha kuwa saa moja ya sauti inachukua nusu saa ya CPU.
Je, uzito wa modeli ya Whisper unahitaji nafasi kiasi gani kwenye diski?
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"
}
]Hizi ni conversion zilizochapishwa za CTranslate2, katika float16. Zingatia kile ambacho compute_type="int8" haifanyi: haipunguzi ukubwa wa faili ya download. Uzito wa modeli hufika katika float16 na CTranslate2 huifanyia quantization kwenye kumbukumbu (RAM) wakati wa kuipakia, kwa hivyo large-v3 hutumia 3,090 MB kwenye diski bila kujali kama unaendesha kwa float16 au int8. int8 inakupa faida ya RAM na kasi, siyo nafasi ya diski.
Modeli hupakuliwa wakati wa matumizi ya kwanza kwenye ~/.cache/huggingface/hub. Kwenye VPS yenye root volume ndogo, elekeza hifadhi hiyo mahali penye nafasi kwa kutumia argument ya download_root au variable ya mazingira ya HF_HOME, vinginevyo jaribio lako la kwanza litajaza diski na mchakato utafeli katikati ya download.
Sakinisha faster-whisper bila kuharibu Python ya mfumo
Ubuntu 24.04 na Debian 13 huweka alama kwenye Python ya mfumo kama inayodhibitiwa na mfumo wa nje. Kuendesha pip install faster-whisper nje ya virtual environment husimama mara moja na kuleta ujumbe huu:
error: externally-managed-environmentHuo ni mfumo wa vifurushi unaolinda faili ambazo apt inazimiliki. Tumia virtual environment.
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.1Toleo la 1.2.1 ndilo toleo la sasa, lililochapishwa Oktoba 2025. faster-whisper hufafanua sauti kupitia PyAV, ambayo huja na maktaba zake za ffmpeg, kwa hivyo husoma mp3 au m4a bila kuhitaji binary tofauti ya ffmpeg. Kifurushi cha ffmpeg hapo juu ni kwa ajili ya kazi za video baadaye katika mwongozo huu.
Thibitisha usakinishaji kabla ya kupakua gigabytes tatu za weights:
~/stt/bin/python -c "from faster_whisper import WhisperModel; print('ok')"Mstari unaosomeka ok unamaanisha kuwa wheels zimefanikiwa kusakinishwa. ImportError inayotaja ctranslate2 inamaanisha kuwa wheel ya usanifu wako haikusakinika, jambo ambalo hutokea kwenye picha za 32-bit ARM.
Nakili rekodi ya mkutano au ujumbe wa sauti
Hifadhi hii kama 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))Iendeshe kwa kutumia ~/stt/bin/python transcribe.py. Mara ya kwanza inapakua uzito (weights), kwa hivyo hakuna kitakachochapishwa kwa muda. Baada ya hapo, modeli hupakia kutoka kwenye cache ndani ya sekunde chache.
segments ni generator, kwa hivyo unukuzi hauanzi hadi utakapopitia (iterate) juu yake. Watu hupima muda wa mwito wa transcribe(), huona unarejea mara moja, na kudhani kuna kitu kimeharibika. Hakuna kilichoharibika. Kazi hufanyika ndani ya loop.
vad_filter=True huendesha Silero VAD (voice activity detection) kwanza na kuondoa sehemu za kimya kabla Whisper haijaziona. Kwenye rekodi ya mkutano yenye mapengo marefu, hii ndiyo njia bora zaidi ya kuongeza kasi, kwa sababu Whisper haitumii muda wowote kwenye sauti isiyo na maneno. Pia inazuia kurudiarudia kwa sentensi ambako Whisper huzalisha inapoingiziwa kimya na kujaribu kutafuta maneno ndani yake.
Weka cpu_threads kwenye idadi ya cores ulizonazo kweli. Kuiweka juu ya idadi ya vCPU zako hufanya unukuzi kuwa polepole, kwa sababu threads za ziada hushindania core moja na scheduler hulipia kila switch.
Manukuu kwa ajili ya maktaba ya Jellyfin
Jellyfin husoma faili za manukuu za nje zilizopo kando ya video na zenye jina sawa, kwa hivyo Movie (2019).en.srt iliyo kando ya Movie (2019).mkv huonekana kama track ya Kiingereza bila kuhitaji transcoding wala kujenga upya maktaba.
Toa sauti kwanza. Whisper hufanya resampling ya kila kitu kuwa 16 kHz mono ndani yake, kwa hivyo kuipa faili ya 16 kHz mono hupunguza kazi kwa pande zote mbili:
ffmpeg -i "Movie (2019).mkv" -vn -ac 1 -ar 16000 -c:a pcm_s16le "Movie (2019).wav"faster-whisper haina SRT writer, kwa hivyo panga sehemu hizo wewe mwenyewe. Hifadhi hii kama 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())Kisha pitia maktaba nzima:
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 siyo mapambo. Bila hiyo, ffmpeg husoma kutoka kwenye standard input ya loop, humeza orodha iliyobaki ya faili, na loop husimama baada ya filamu moja bila ujumbe wa hitilafu.
Panga muda kabla ya kuanza. Kwa kutumia takwimu ya 7.6x hapo juu, filamu ya dakika 100 inahitaji takriban dakika 13 za CPU, kwa hivyo maktaba ya filamu hamsini ni kazi ya usiku kucha. Kwenye mpango wa vCPU iliyoshirikiwa, kasi huwa ndogo zaidi, na ndiyo maana ya nice: mchakato wa manukuu hupisha kazi nyingine zozote zinazofanywa na seva wakati huo.
Ubadilishaji wa matini kuwa sauti kwa kutumia Piper
Piper ni injini ya neural text-to-speech inayotumia modeli ya sauti ya ONNX kwenye CPU. Inajumuisha espeak-ng ili kubadilisha matini kuwa fonimu, kwa hivyo hakuna haja ya kusakinisha phonemizer tofauti. Toleo la sasa ni 1.6.0, lililochapishwa Julai 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 huandika faili mbili kwenye saraka ya kazi: .onnx weights na .onnx.json config inayohifadhi kiwango cha sampuli (sample rate) na orodha ya wazungumzaji. Faili hizi lazima zibaki pamoja. Ikiwa unahifadhi sauti katika eneo maalum, pitisha --data-dir kwa amri zote mbili, kwa sababu kicheza sauti hutafuta kwenye saraka ya kazi na hakiwezi kupata sauti isiyokuwepo hapo.
-- kabla ya matini ni muhimu pia. Bila hiyo, sentensi yoyote inayoanza na alama ya hyphen huchukuliwa kama chaguo la mstari wa amri (command-line option).
Sauti hutolewa katika viwango mbalimbali vya ubora. Sauti ya Kiingereza ya kiwango cha kati ni takriban 60 MB na ya ubora wa juu ni mara mbili ya hiyo. Ubora wa juu unamaanisha modeli kubwa na matumizi makubwa ya CPU kwa kila sekunde ya matamshi, si mzungumzaji tofauti.
Usiite CLI ndani ya loop. Inapakia modeli kila inapoitwa, na upakiaji wa modeli huchukua muda mrefu kuliko sentensi fupi. Endesha seva ya HTTP badala yake:
~/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/synthesizetest.wav unayoweza kuicheza inamaanisha kuwa inafanya kazi. Endpoint hiyo ina umbo la Piper, si la OpenAI, kwa hivyo mteja anayetarajia /v1/audio/speech hataweza kuwasiliana nayo. Sehemu inayofuata inarekebisha hilo.
Iweke ikiendelea kufanya kazi kwa kutumia unit file badala ya terminal ambayo utaifunga:
[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 huianzisha na kuirejesha baada ya reboot. Ikiwa curl iliyo hapo juu hairejeshi chochote, journalctl -u piper -n 50 ina sababu ya tatizo hilo, na faili ya sauti iliyokosekana ndiyo sababu ya kawaida.
Muundo wa seva inayooana na OpenAI
Programu nyingi zinazoshughulikia sauti tayari zinatumia API ya sauti ya OpenAI: POST ya sehemu nyingi kwenda /v1/audio/transcriptions kwa ajili ya faili, na JSON POST kwenda /v1/audio/speech kwa ajili ya sentensi. Hudumia njia hizo mbili wewe mwenyewe na mteja atahitaji mabadiliko moja tu, URL yake ya msingi (base URL).
Speaches ni seva moja inayofanya kazi zote mbili. Inaendesha faster-whisper kwa ajili ya transcription na Piper au Kokoro kwa ajili ya hotuba, nyuma ya njia za OpenAI. Toleo la sasa ni v0.9.0-rc.3 la Desemba 2025, bado kabla ya 1.0, kwa hivyo funga (pin) tag ya image yako na usome maelezo ya toleo (release notes) kabla ya kufanya 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 --detachMuundo wa container moja, ikiwa hutaki kuhifadhi faili za 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 ndiyo sehemu ambayo watu husahau. Bila hiyo, cache ya model hukaa ndani ya container, kwa hivyo kila restart itapakua upya gigabytes za weights kabla ya ombi la kwanza kujibiwa.
Speech inahitaji sauti (voice) kupakuliwa kabla ya /v1/audio/speech kujibu:
uvx speaches-cli model download speaches-ai/Kokoro-82M-v1.0-ONNXBaada ya hapo, mteja yeyote wa OpenAI hufanya kazi kwa kubadilisha URL ya msingi:
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 inahitajika kwa sababu maktaba ya mteja wa OpenAI hukataa kutuma ombi bila hiyo. Seva hupuuza thamani yake hadi utakaposanidi ufunguo (key) halisi.
vox-box ni mradi mwingine unaostahili kutajwa hapa. Ni kifurushi cha Python badala ya container, na inahudumia njia zilezile na Whisper, FunASR, Bark, Dia au CosyVoice nyuma yake. Toleo la 0.0.21 ndilo la sasa, la Desemba 2025, na linahitaji Python 3.10 au zaidi.
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 8010Mfano wa mradi wenyewe hufunga port 80, ambayo inahitaji root. Port ya juu nyuma ya reverse proxy ndiyo muundo bora kwenye seva inayofanya kazi nyingine yoyote. vox-box start huchukua model moja, kwa hivyo kufunika pande zote mbili inamaanisha instance ya pili kwenye port ya pili na id ya repo ya hotuba.
Iulize seva kile ilichopakia, kisha tumia id hiyo katika sehemu ya 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"Mwili wa JSON wa mfumo wa {"text": "..."} unamaanisha kuwa njia nzima inafanya kazi. 404 kwenye jina la model inamaanisha ulikisia badala ya kusoma matokeo ya /v1/models.
Hakuna seva kati ya hizi inayowasha uthibitishaji (authentication) kwa chaguo-msingi. Zifunge kwenye 127.0.0.1 na uzifikie kupitia VPN au reverse proxy inayoomba vitambulisho. /v1/audio/transcriptions iliyo wazi kwenye IP ya umma ni CPU ya bure kwa yeyote atakayeipata, na wataipata.
Kiolesura cha sauti kwa msaidizi unayejiendeshea mwenyewe
Mara tu pande zote mbili zinapojibu kwenye njia za OpenAI, kiolesura cha gumzo kinaweza kuziongoza. Open WebUI na njia mbadala zake hukubali URL ya msingi inayooana na OpenAI kwa ajili ya sauti katika mipangilio yao, hivyo sanduku moja linaweza kuendesha LLM ya ndani kwa kutumia Ollama na kukamilisha mzunguko wa sauti pande zote mbili.
Panga muda wa kusubiri (latency) kwa uaminifu, kwa sababu hatua hizo tatu huendeshwa moja baada ya nyingine kwenye cores zilezile. Swali la sekunde 10 huchukua takriban sekunde 1.3 kutafsiriwa kwa kutumia takwimu ya 7.6x iliyo hapo juu, na hiyo ni kabla ya modeli kusoma tokeni hata moja. Ongeza muda wa uzalishaji wa tokeni kwenye CPU na mzunguko mzima unakuwa polepole kiasi kwamba watumiaji hufikiri kuwa mfumo umekwama. Utafsiri wa kundi (batch transcription) unafanya kazi vizuri kwenye CPU. Mazungumzo hayafanyi kazi vizuri, na hapo ndipo VPS yenye GPU inapoanza kustahili gharama yake.
Ni lini GPU inafaa kutumika?
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"
}
]Kwenye GPU, modeli kubwa katika int8 huendeshwa kwa 13.2x ya muda halisi ndani ya 2,926 MB ya VRAM, na utumiaji wa batch huifikisha hadi 48.8x. Zingatia kwa makini yale ambayo chati hizi mbili hazisemi. Zinaendesha modeli tofauti: safu za GPU ni large-v2, safu za CPU ni small. GPU haifanyi modeli ndogo kuwa na kasi mara sita zaidi. Inafanya modeli sahihi kuwa inayoweza kutumika.
Chanzo cha namba hizi
Chati zote mbili zinarejelea benchmark iliyochapishwa kwenye README ya faster-whisper. Faili ya sauti ni moja yenye urefu wa dakika 13. Safu za CPU zilitumia threads 8 kwenye Intel Core i7-12700K, na safu za GPU zilitumia CUDA 12.4 kwenye NVIDIA RTX 3070 Ti yenye 8 GB ya VRAM. Safu za sekunde na kumbukumbu ni takwimu zilizochapishwa. Safu ya x_realtime ni hesabu iliyofanywa juu ya takwimu hizo: sekunde 780 za sauti zikigawanywa kwa muda uliopimwa, zikikokotolewa hadi desimali moja. Safu ya kumbukumbu ni RAM ya mfumo kwa chati ya CPU na VRAM kwa chati ya GPU.
Mpango wa vCPU iliyoshirikiwa hautafikia takwimu za CPU. Benchmark hiyo ilikuwa na threads 8 za sehemu ya desktop yenye kasi inayojitegemea. Ichukulie 7.6x kama ukomo, kisha pima mashine yako mwenyewe kwa kutumia time kwenye rekodi halisi kabla ya kupanga chochote kuizunguka.
Kanuni nne za kidole gumba zinazofanya kazi kivitendo:
- Unukuzi wa mara kwa mara wa rekodi zako mwenyewe: CPU, small, int8. vCPU mbili zilizojitolea zinatosha.
- Kazi za batch za usiku kucha kama vile kutengeneza subtitle: CPU, small au medium, int8, zilizofungwa ndani ya
nice. - Kitu chochote cha mwingiliano (interactive), au maktaba nzima kwa jioni moja: GPU.
- Piper: CPU, kila wakati. Modeli ya sauti ya ukubwa huu haipati faida yoyote kutoka kwa GPU.
Ikiwa unatafuta kujua ni nini kingine vifaa hivyo vinaweza kubeba, swali pana zaidi la ni modeli zipi za AI unazoweza kujiendeshea mwenyewe linaelezea ukubwa unaotoshea na usiotoshea.
Njia za kufeli, pamoja na ujumbe utakaouona
error: externally-managed-environment wakati wa usakinishaji. Python ya mfumo inalindwa na usambazaji (distribution). Unda virtual environment kama ilivyoonyeshwa hapo juu.
Kutolingana kwa cuDNN kwenye seva ya GPU. Hitilafu inaonekana hivi:
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 na matoleo mapya zaidi yanahitaji cuDNN 9 kwa ajili ya CUDA 12, lakini seva yako ina cuDNN 8. Sakinisha cuDNN 9, au funga (pin) runtime ya zamani kwa kutumia pip install --force-reinstall ctranslate2==4.4.0. Fanya mojawapo ya mambo haya mawili. Kufanya yote mawili kutakurudisha pale ulipoanzia.
This CTranslate2 package was not compiled with CUDA support ni hitilafu tofauti yenye dalili zinazofanana. Faili la wheel lililosakinishwa ni la toleo la CPU pekee. Unda upya virtual environment kwenye seva ya GPU na uruhusu pip ichague wheel inayofaa tena.
Misemo inayojirudia kwenye maandishi. Sentensi inayojirudia mara kumi karibu kila mara inatokana na ukimya au muziki unaotafsiriwa kama hotuba. Washa vad_filter=True kwanza. Ikiwa tatizo litaendelea, sikiliza sehemu hiyo: sauti ya chini sana haimpi Whisper kitu cha kushikilia, hivyo hurudia makisio yake ya mwisho.
Lugha isiyo sahihi imetambuliwa. Whisper hukisia lugha kulingana na sekunde 30 za kwanza pekee. info.language_probability iliyo chini sana ya 1.0 inamaanisha haikuwa na uhakika, jambo linalotokea wakati rekodi inapoanza na muziki au mazungumzo ya watu wengi. Tumia language="en" ikiwa tayari unajua lugha inayotumika.
Mchakato huchapisha Killed na kusimama. Hii ni ishara ya kernel out-of-memory killer, na dmesg itaonyesha mstari husika wa oom-kill. Toleo la large-v3 linahitaji zaidi ya 3 GB kwa ajili ya weights pekee kabla ya kumbukumbu ya kazi (working memory). Kwenye VPS ya 2 GB, small katika int8 ndilo modeli kubwa zaidi inayoweza kutoshea.
Piper haiwezi kupata sauti. Kichezaji hutafuta kwenye saraka ya kazi (working directory) isipokuwa utatumia --data-dir. Endesha ls kwenye saraka unayotarajia na uthibitishe kuwa .onnx na .onnx.json zote zipo, kwa sababu kukosekana kwa moja kati ya hizo kutasababisha hitilafu kama vile zote hazipo.
FAQ
Je, ninaweza kuendesha speech-to-text kwenye VPS ya CPU pekee?
Ndiyo, na kwa kazi za kundi (batch work) hili ndilo chaguo la busara. Kwa kutumia faster-whisper na model ya small katika int8, benchmark iliyochapishwa ya mradi huu inabadilisha dakika 13 za sauti kuwa maandishi ndani ya 102 sekunde kwenye thread 8 za desktop i7, ikiwa ni takriban 7.6x ya muda halisi, kwa kutumia 1,477 MB ya RAM. Mpango wa vCPU ya pamoja (shared vCPU) hufanya kazi polepole zaidi kuliko hiyo, kwa hivyo pima seva yako mwenyewe. Text-to-speech kwa kutumia Piper ni rahisi zaidi na haihitaji GPU katika hali yoyote.
Ni ukubwa gani wa model ya Whisper ninaopaswa kutumia?
Anza na small katika int8. Ina ukubwa wa 484 MB kwenye diski na inashughulikia vizuri sauti zilizorekodiwa kwa uwazi. Hamia kwenye medium wakati lafudhi au kelele za chinichini zinasababisha makosa ambayo huwezi kuyavumilia, na tumia large-v3 pale tu usahihi unapokuwa muhimu zaidi ya kila kitu kingine, kwa sababu inahitaji 3,090 MB ya diski na zaidi ya 3 GB ya kumbukumbu. Kwa upande mwingine, tiny yenye 75.5 MB ni muhimu kwa ajili ya kutambua lugha na kupima mtiririko wa kazi (pipeline), si kwa ajili ya nakala ambazo mtu atazisoma.
Kwa nini faster-whisper ni ya haraka kuliko kifurushi cha asili cha Whisper?
Model ni ileile. Runtime yake ndiyo tofauti. Kifurushi cha marejeo huendesha Whisper kwenye PyTorch, wakati faster-whisper huendesha weights zilezile kwenye CTranslate2, injini iliyojengwa kwa ajili ya transformer inference inayofanya quantization ya weights wakati wa kuzipakia na haihitaji usakinishaji wa PyTorch. Kwenye benchmark ya CPU iliyochapishwa, hiyo ni 1.9x ya muda halisi kwa kifurushi cha marejeo dhidi ya 7.6x kwa faster-whisper katika int8, huku ikitumia kumbukumbu kidogo zaidi.
Kwa nini nakala yangu inarudia sentensi ileile mara kwa mara?
Whisper inatafsiri ukimya au muziki kama hotuba na kurudi kwenye ubashiri wake wa mwisho ulio na uhakika. Weka vad_filter=True kwenye mwito wa transcribe(), ambao huendesha Silero voice activity detection kwanza na kuondoa vipindi vya ukimya kabla model haijaviona. Ikiwa bado inarudia, angalia kiwango cha sauti, kwa sababu rekodi ambayo ni kimya karibu muda wote haipi model kitu cha kufanyia kazi.
Ninawezaje kupata audio endpoint inayooana na OpenAI kwenye seva yangu mwenyewe?
Endesha seva inayotekeleza POST /v1/audio/transcriptions na POST /v1/audio/speech, kisha uelekeze mteja (client) kwake kwa kutumia base URL mpya. Speaches ni chaguo moja, iliyochapishwa kama container image yenye CPU build, inayotumia faster-whisper kwa ajili ya transcription na Piper au Kokoro kwa ajili ya hotuba. vox-box ni nyingine, inayowekwa kwa pip install vox-box na kuanzishwa kwa vox-box start --huggingface-repo-id, ambayo huhudumia model moja kwa kila mchakato (process). Hakuna kati ya hizi inayowezesha uthibitishaji (authentication) kwa chaguo-msingi, kwa hivyo funga kwenye localhost na uweke proxy au VPN mbele yake.