ข้ามไปยังเนื้อหาหลัก

การผสาน Kyutai TTS

รันโมเดล TTS ของ Kyutai ในเครื่องเพื่อแปลงข้อความเป็นเสียงคุณภาพสูง คู่มือนี้ครอบคลุมทั้ง Pocket TTS (CPU) และ TTS 1.6B (GPU) พร้อมเซิร์ฟเวอร์ที่เข้ากันได้กับ OpenAI ซึ่งรวมอยู่ใน Libre WebUI

ภาพรวม

Kyutai มีโมเดล TTS สองแบบ:

โมเดลพารามิเตอร์อุปกรณ์เหมาะสำหรับ
Pocket TTS100MCPU เท่านั้นแล็ปท็อปและสภาพแวดล้อมทรัพยากรน้อย
TTS 1.6B1.6BGPU/MPS/CPUเซิร์ฟเวอร์และการสังเคราะห์คุณภาพสูง

ทั้งสองใช้เฟรมเวิร์ก CALM (Continuous Audio Language Models) และรองรับการโคลนเสียงจากตัวอย่างเสียง

Pocket TTS (CPU)

TTS น้ำหนักเบาที่ทำงานแบบเรียลไทม์บน CPU โดยไม่ต้องใช้ GPU

ข้อกำหนด

ส่วนประกอบขั้นต่ำ
Python3.10 - 3.14
PyTorch2.5+
RAM4GB
Disk500MB

เริ่มต้นอย่างรวดเร็ว

cd examples/kyutai-tts-server

# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt

# Start server
python server.py

เซิร์ฟเวอร์ทำงานที่ http://localhost:8200

ทดสอบ

curl http://localhost:8200/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kyutai-tts", "input": "Hello, welcome to Libre WebUI!", "voice": "alba"}' \
--output speech.wav

เสียง

เสียงคำอธิบาย
Albaหญิง ชัดเจนและเป็นธรรมชาติ
Mariusชาย โทนอุ่น
Javertชาย น่าเชื่อถือ
Jeanชาย นุ่มนวล
Fantineหญิง อ่อนโยน
Cosetteหญิง อายุน้อย
Eponineหญิง มีอารมณ์
Azelmaหญิง สดใส

ประสิทธิภาพ

  • เร็วกว่าระยะเวลาจริงประมาณ 6 เท่าบน MacBook Air M4
  • ความหน่วงประมาณ 200ms สำหรับส่วนเสียงแรก
  • ใช้ CPU เพียง 2 คอร์

TTS 1.6B (GPU)

TTS คุณภาพสูงพร้อมการเร่ง GPU เลือกอุปกรณ์อัตโนมัติ: CUDA > MPS > CPU

ข้อกำหนด

ส่วนประกอบขั้นต่ำแนะนำ
Python3.10+3.12
GPU VRAM6GB8GB+
RAM8GB16GB+
Disk4GB8GB

การรองรับแพลตฟอร์ม

แพลตฟอร์มBackendหมายเหตุ
NVIDIA GPUCUDAประสิทธิภาพดีที่สุด รองรับ bfloat16
Apple SiliconMPSใช้ float16
CPUPyTorchช้ากว่า ใช้ float32

เริ่มต้นอย่างรวดเร็ว

cd examples/kyutai-tts-1.6b-server

# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install PyTorch with CUDA (for NVIDIA GPUs)
pip install torch --index-url https://download.pytorch.org/whl/cu121

# Install dependencies
pip install -r requirements.txt

# Start server (auto-detects GPU)
python server.py

เซิร์ฟเวอร์ทำงานที่ http://localhost:8201

การเลือกอุปกรณ์

# Auto-detect (CUDA > MPS > CPU)
python server.py

# Force specific device
python server.py --device cuda
python server.py --device mps
python server.py --device cpu

ทดสอบ

curl http://localhost:8201/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kyutai-tts-1.6b", "input": "Hello from the GPU!", "voice": "alba"}' \
--output speech.wav

เสียง

Alba MacKenna (CC BY 4.0):

เสียงรูปแบบ
alba / alba-casualการสนทนาสบาย ๆ
alba-merchantตัวละครพ่อค้า
alba-announcerรูปแบบผู้ประกาศ

Expresso (CC BY-NC 4.0 - non-commercial):

เสียงอารมณ์
expresso-happyมีความสุข
expresso-sadเศร้า
expresso-angryโกรธ

VCTK (CC BY 4.0):

  • vctk-p225, vctk-p226, vctk-p227, vctk-p228

การโคลนเสียง

เซิร์ฟเวอร์ทั้งสองรองรับการโคลนเสียงจากไฟล์เสียง

Pocket TTS

# From local file
curl http://localhost:8200/v1/audio/voice-clone \
-F "input=Hello from a cloned voice" \
-F "reference_audio=@my_voice.wav" \
--output cloned.wav

# From HuggingFace URL
curl http://localhost:8200/v1/audio/voice-clone-url \
-H "Content-Type: application/json" \
-d '{
"input": "Hello world!",
"voice_url": "hf://kyutai/tts-voices/alba-mackenna/casual.wav"
}' \
--output speech.wav

TTS 1.6B

ส่งเส้นทางเสียง HuggingFace ใด ๆ เป็นพารามิเตอร์ voice:

curl http://localhost:8201/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "kyutai-tts-1.6b",
"input": "Custom voice synthesis",
"voice": "hf://kyutai/tts-voices/vctk/p230.wav"
}' \
--output speech.wav

เอกสารอ้างอิง API

การสร้างเสียงพูด

Endpoint: POST /v1/audio/speech

{
"model": "kyutai-tts",
"input": "Text to convert to speech",
"voice": "alba",
"response_format": "wav",
"stream": false
}
พารามิเตอร์ชนิดค่าเริ่มต้นคำอธิบาย
modelstringแตกต่างkyutai-tts หรือ kyutai-tts-1.6b
inputstringต้องระบุข้อความที่ต้องสังเคราะห์ (สูงสุด 10,000 อักขระ)
voicestringalbaชื่อเสียงหรือเส้นทาง HuggingFace
response_formatstringwavรูปแบบเสียง (รองรับเฉพาะ wav)
streambooleanfalseเปิด streaming (เฉพาะ Pocket TTS)
cfg_coeffloat2.0การนำทางแบบไม่ใช้ classifier (เฉพาะ 1.6B)

การตอบกลับ: ไฟล์เสียง (audio/wav)

นามแฝงเสียง OpenAI

เพื่อให้เข้ากันได้กับไคลเอนต์ OpenAI TTS:

เสียง OpenAIPocket TTSTTS 1.6B
alloyalbaalba
echomariusvctk-p225
fablecosetteexpresso-happy
onyxjavertvctk-p226
novafantinealba-announcer
shimmereponinealba-merchant

แสดงรายการเสียง

Endpoint: GET /v1/voices

ตรวจสุขภาพ

Endpoint: GET /health


การกำหนดค่า plugin

Pocket TTS

เปิดใน การตั้งค่า > Plugin > Kyutai TTS

ไฟล์ plugin: plugins/kyutai-tts.json

{
"id": "kyutai-tts",
"name": "Kyutai TTS",
"type": "tts",
"endpoint": "http://localhost:8200/v1/audio/speech",
"capabilities": {
"tts": {
"config": {
"voices": [
"Alba",
"Marius",
"Javert",
"Jean",
"Fantine",
"Cosette",
"Eponine",
"Azelma"
],
"default_voice": "Alba",
"supports_streaming": true,
"no_auth_required": true
}
}
}
}

TTS 1.6B

เปิดใน การตั้งค่า > Plugin > Kyutai TTS 1.6B

ไฟล์ plugin: plugins/kyutai-tts-1.6b.json

{
"id": "kyutai-tts-1.6b",
"name": "Kyutai TTS 1.6B",
"type": "tts",
"endpoint": "http://localhost:8201/v1/audio/speech",
"capabilities": {
"tts": {
"config": {
"voices": [
"Alba",
"Alba-Casual",
"Alba-Merchant",
"Alba-Announcer",
"Expresso-Happy",
"Expresso-Sad",
"Expresso-Angry",
"VCTK-P225",
"VCTK-P226"
],
"default_voice": "Alba",
"supports_streaming": true,
"no_auth_required": true
}
}
}
}

การเข้าถึงเครือข่าย

เพื่อเข้าถึงจากเครื่องอื่น:

# Start server on all interfaces
python server.py --host 0.0.0.0

# Access from another machine
curl http://192.168.1.100:8200/v1/audio/speech ...

อัปเดต endpoint plugin ให้สอดคล้อง:

{
"endpoint": "http://192.168.1.100:8200/v1/audio/speech"
}

การแก้ปัญหา

ดาวน์โหลดโมเดลล้มเหลว

โมเดลจะดาวน์โหลดจาก HuggingFace ในการรันครั้งแรก:

# Set token for gated models
export HF_TOKEN=hf_...

หน่วยความจำ CUDA ไม่พอ

สำหรับ TTS 1.6B เมื่อ VRAM จำกัด:

  1. ปิดแอป GPU อื่น
  2. ลอง cfg_coef=1.5 เพื่อลดการใช้หน่วยความจำ
  3. ใช้ Pocket TTS แทน (ใช้ CPU)

ปัญหาคุณภาพเสียง

  • เสียงเหมือนหุ่นยนต์: ลองเสียงอื่น
  • เสียงถูกตัด: ข้อความอาจยาวเกินไป เซิร์ฟเวอร์จะแบ่งอัตโนมัติ
  • ออกเสียงผิด: โมเดลปรับเหมาะสำหรับอังกฤษและฝรั่งเศส

ปัญหา MPS (Apple Silicon)

RuntimeError: MPS backend error

โมเดล 1.6B ใช้ float16 บน MPS หากยังมีปัญหา ให้บังคับใช้ CPU:

python server.py --device cpu

เปรียบเทียบกับ Qwen3-TTS

ฟีเจอร์Kyutai PocketKyutai 1.6BQwen3-TTS
พารามิเตอร์100M1.6B0.6B-1.7B
ต้องใช้ GPUไม่ไม่บังคับใช่
ภาษาอังกฤษEN/FR10 ภาษา
โคลนเสียงใช่ใช่ใช่
ออกแบบเสียงไม่ไม่ใช่
พอร์ต820082018100

เลือก Kyutai สำหรับกรณีเน้นภาษาอังกฤษและตั้งค่าง่ายกว่า เลือก Qwen3-TTS เมื่อต้องการหลายภาษาและฟีเจอร์ออกแบบเสียง


แหล่งข้อมูล