# Fish Speech

Fish Speech — это передовая многоязычная система синтеза речи (TTS) с возможностью клонирования голоса в режиме zero-shot. Имея более 15 000 звёзд на GitHub, она поддерживает английский, китайский, японский, корейский, французский, немецкий, арабский, испанский и другие языки — всё в одной модели. Используя всего 10–15 секунд эталонной аудиозаписи, Fish Speech может клонировать любой голос с впечатляющей точностью, что делает её идеальной для производства аудиокниг, дубляжа, виртуальных ассистентов и масштабного создания контента.

Fish Speech использует архитектуру на основе трансформера с вокодером VQGAN, достигая показателей близкой к человеческой естественности в стандартных бенчмарках TTS. WebUI (Gradio) делает её доступной без написания ни строки кода, а REST API обеспечивает бесшовную интеграцию в производственные пайплайны.

{% hint style="success" %}
Все примеры можно запускать на GPU-серверах, арендуемых через [CLORE.AI Маркетплейс](https://clore.ai/marketplace).
{% endhint %}

***

## Требования к серверу

| Параметр | Минимум                 | Рекомендуется           |
| -------- | ----------------------- | ----------------------- |
| GPU      | NVIDIA RTX 3080 (10 ГБ) | NVIDIA RTX 4090 (24 ГБ) |
| VRAM     | 8 ГБ                    | 16–24 ГБ                |
| ОЗУ      | 16 ГБ                   | 32 ГБ                   |
| CPU      | 4 ядра                  | 8+ ядер                 |
| Диск     | 20 ГБ                   | 40 ГБ                   |
| ОС       | Ubuntu 20.04+           | Ubuntu 22.04            |
| CUDA     | 11.8+                   | 12.1+                   |
| Порты    | 22, 7860                | 22, 7860                |

{% hint style="info" %}
Fish Speech эффективно работает на GPU среднего уровня (RTX 3080/3090). Для пакетного вывода или обслуживания нескольких одновременных пользователей рекомендуется RTX 4090 или A100.
{% endhint %}

***

## Быстрое развертывание на CLORE.AI

Самый быстрый способ запустить Fish Speech — использовать официальный Docker-образ напрямую с Docker Hub.

### 1. Найдите подходящий сервер

Перейдите на [CLORE.AI Маркетплейс](https://clore.ai/marketplace) и отфильтруйте по:

* **VRAM**: ≥ 8 ГБ
* **GPU**: RTX 3080, 3090, 4080, 4090, A100, H100
* **Диск**: ≥ 20 ГБ

### 2. Настройте ваше развёртывание

В форме заказа CLORE.AI укажите следующее:

**Docker-образ:**

```
fishaudio/fish-speech:latest
```

**Проброс портов:**

```
22   → доступ по SSH
7860 → веб-интерфейс Gradio
```

**Переменные окружения:**

```
NVIDIA_VISIBLE_DEVICES=all
CUDA_VISIBLE_DEVICES=0
```

**Команда запуска (необязательно — автоматически запускает WebUI):**

```bash
python -m tools.webui --listen 0.0.0.0 --port 7860
```

### 3. Доступ к интерфейсу

После развертывания откройте браузер и перейдите по адресу:

```
http://<your-clore-server-ip>:7860
```

Gradio WebUI загрузится с полным интерфейсом Fish Speech, готовым к использованию.

***

## Пошаговая настройка

### Шаг 1: Подключитесь по SSH к вашему серверу

```bash
ssh root@<ip-вашего-clore-сервера> -p <ssh-порт>
```

### Шаг 2: Скачать и запустить Docker-контейнер

```bash
docker pull fishaudio/fish-speech:latest

docker run -d \
  --name fish-speech \
  --gpus all \
  -p 7860:7860 \
  -p 22:22 \
  -v /workspace/fish-speech:/workspace \
  -e NVIDIA_VISIBLE_DEVICES=all \
  fishaudio/fish-speech:latest \
  python -m tools.webui --listen 0.0.0.0 --port 7860
```

### Шаг 3: Проверить доступ к GPU

```bash
docker exec fish-speech nvidia-smi
```

Вы должны увидеть указанный GPU с доступной видеопамятью (VRAM).

### Шаг 4: Проверить загрузку модели

Fish Speech автоматически скачивает веса модели при первом запуске (\~3–5 ГБ). Отслеживайте прогресс:

```bash
docker logs -f fish-speech
```

Подождите, пока не увидите:

```
Запущено по локальному URL:  http://0.0.0.0:7860
```

### Шаг 5: Доступ к WebUI

Перейдите по адресу `http://<server-ip>:7860` в вашем браузере.

### Шаг 6: (Необязательно) Включить API-сервер

```bash
docker exec -d fish-speech \
  python -m tools.api_server --listen 0.0.0.0 --port 8080
```

***

## Примеры использования

### Пример 1: Базовый синтез речи через WebUI

1. Откройте WebUI по адресу `http://<server-ip>:7860`
2. Введите текст в поле **"Text"** поле:

   ```
   Добро пожаловать в Clore.ai, маркетплейс облачных GPU для задач ИИ.
   ```
3. Выберите язык: **Английский**
4. Нажмите **"Generate"**
5. Скачайте полученный `.wav` файл

***

### Пример 2: Клонирование голоса в режиме Zero-Shot

Клонируйте любой голос, используя всего 10–15 секунд эталонного аудио:

1. В WebUI перейдите в раздел **"Voice Clone"** вкладку
2. Загрузите ваш эталонный аудиофайл (`.wav` или `.mp3`, 10–30 секунд)
3. Введите расшифровку (транскрипт) эталонного аудио (необязательно, но улучшает качество)
4. Введите целевой текст для синтеза
5. Нажмите **"Clone & Generate"**

Модель проанализирует характеристики голоса и синтезирует речь этим голосом.

***

### Пример 3: TTS через API (Python)

```python
import requests
import base64

# Точка подключения Fish Speech API
API_URL = "http://<your-clore-server-ip>:8080/v1/tts"

payload = {
    "text": "Здравствуйте, это тест Fish Speech, запущенного на инфраструктуре GPU Clore.ai.",
    "reference_id": None,  # Использовать голос по умолчанию
    "format": "wav",
    "streaming": False
}

response = requests.post(API_URL, json=payload)

if response.status_code == 200:
    with open("output.wav", "wb") as f:
        f.write(response.content)
    print("Аудио сохранено в output.wav")
else:
    print(f"Ошибка: {response.status_code} - {response.text}")
```

***

### Пример 4: Многоязычный TTS

```python
import requests

API_URL = "http://<your-clore-server-ip>:8080/v1/tts"

texts = {
    "en": "Clore.ai provides affordable GPU cloud computing for AI researchers.",
    "zh": "Clore.ai 为 AI 研究人员提供经济实惠的 GPU 云计算服务。",
    "ja": "Clore.aiはAI研究者向けの手頃なGPUクラウドコンピューティングを提供します。",
    "ko": "Clore.ai는 AI 연구자들을 위한 저렴한 GPU 클라우드 컴퓨ーティング을 제공합니다.",
    "fr": "Clore.ai fournit un calcul GPU cloud abordable pour les chercheurs en IA.",
}

for lang, text in texts.items():
    payload = {"text": text, "format": "wav"}
    response = requests.post(API_URL, json=payload)
    if response.status_code == 200:
        filename = f"output_{lang}.wav"
        with open(filename, "wb") as f:
            f.write(response.content)
        print(f"Сохранено {filename}")
```

***

### Пример 5: Пакетная обработка аудиофайлов

```python
import requests
import os
from pathlib import Path

API_URL = "http://<your-clore-server-ip>:8080/v1/tts"
OUTPUT_DIR = Path("./tts_outputs")
OUTPUT_DIR.mkdir(exist_ok=True)

# Пакет текстов для конвертации
texts = [
    "Глава первая: Начало новой эры в области искусственного интеллекта.",
    "Глава вторая: Как GPU-вычисления преобразили машинное обучение.",
    "Глава третья: Восход технологий синтеза голоса.",
    "Глава четвёртая: Построение будущего с инфраструктурой Clore.ai.",
    "Глава пятая: Заключение и дальнейшие шаги.",
]

for i, text in enumerate(texts):
    payload = {
        "text": text,
        "format": "wav",
        "streaming": False
    }
    response = requests.post(API_URL, json=payload, timeout=60)
    if response.status_code == 200:
        output_path = OUTPUT_DIR / f"chapter_{i+1:02d}.wav"
        with open(output_path, "wb") as f:
            f.write(response.content)
        print(f"✓ Сгенерировано: {output_path}")
    else:
        print(f"✗ Не удалось сгенерировать главу {i+1}: {response.status_code}")

print(f"\nВсе файлы сохранены в {OUTPUT_DIR}")
```

***

## Конфигурация

### Docker Compose (Production Setup)

```yaml
version: '3.8'

services:
  fish-speech:
    image: fishaudio/fish-speech:latest
    container_name: fish-speech
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - CUDA_VISIBLE_DEVICES=0
    ports:
      - "7860:7860"
      - "8080:8080"
    volumes:
      - ./models:/workspace/models
      - ./outputs:/workspace/outputs
      - ./references:/workspace/references
    command: >
      bash -c "python -m tools.webui --listen 0.0.0.0 --port 7860 &
               python -m tools.api_server --listen 0.0.0.0 --port 8080 &
               wait"
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
```

### Ключевые параметры конфигурации

| Опция              | По умолчанию | Описание                                              |
| ------------------ | ------------ | ----------------------------------------------------- |
| `--listen`         | `0.0.0.0`    | Интерфейс, к которому привязывается сервер            |
| `--port`           | `7860`       | Порт для Gradio WebUI                                 |
| `--compile`        | `false`      | Включить torch.compile для более быстрого вывода      |
| `--device`         | `cuda`       | Устройство для использования (`cuda`, `cpu`, `mps`)   |
| `--half`           | `true`       | Использовать половинную точность FP16 (экономит VRAM) |
| `--num_samples`    | `1`          | Количество генерируемых аудиосэмплов                  |
| `--max_new_tokens` | `1024`       | Максимальное число новых токенов для генерации        |

### Варианты модели

| Модель                | Размер   | Языки    | Примечания                         |
| --------------------- | -------- | -------- | ---------------------------------- |
| `fish-speech-1.4`     | \~3 ГБ   | 8 языков | Последний стабильный релиз         |
| `fish-speech-1.2-sft` | \~2.5 ГБ | 8 языков | Вариант с дообучением (fine-tuned) |
| `fish-speech-1.2`     | \~2.5 ГБ | 8 языков | Базовая модель                     |

***

## Советы по производительности

### 1. Включите torch.compile для более быстрого вывода

```bash
# Добавьте флаг --compile при запуске
python -m tools.webui --listen 0.0.0.0 --port 7860 --compile
```

Первый запуск будет медленнее (компиляция занимает 2–5 минут), но последующий вывод будет на 20–40% быстрее.

### 2. Используйте половинную точность (FP16)

FP16 снижает использование VRAM примерно на 50% с минимальной потерей качества:

```bash
python -m tools.webui --listen 0.0.0.0 --port 7860 --half
```

### 3. Предзагрузка эталонных голосов

Храните часто используемые эталонные голоса в директории references контейнера, чтобы избежать повторной обработки:

```bash
# Скопировать эталонное аудио в контейнер
docker cp my_voice.wav fish-speech:/workspace/references/my_voice.wav
```

### 4. Оптимизация использования памяти GPU

```bash
# Установить оптимальную долю выделяемой памяти CUDA
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512

# Очистить кэш GPU между большими пакетами
docker exec fish-speech python -c "import torch; torch.cuda.empty_cache()"
```

### 5. Настройка размера батча

Для пакетных API-запросов оптимальные размеры батчей:

* **RTX 3080 (10 ГБ)**: batch\_size = 1–2
* **RTX 3090/4090 (24 ГБ)**: batch\_size = 4–8
* **A100 (40/80 ГБ)**: batch\_size = 16–32

***

## Устранение неполадок

### Проблема: Контейнер не запускается — CUDA не найдена

```bash
# Проверить драйвер NVIDIA внутри контейнера
docker exec fish-speech nvidia-smi

# Если ошибка сохраняется, проверьте драйвер на хосте
nvidia-smi

# Запустите снова с явными флагами GPU
docker run --gpus all --rm fishaudio/fish-speech:latest nvidia-smi
```

### Проблема: Ошибка нехватки памяти (OOM)

```bash
# Проверить использование VRAM
docker exec fish-speech nvidia-smi

# Используйте FP16, чтобы сократить использование VRAM вдвое
# Перезапустите контейнер с флагом --half
docker stop fish-speech
docker run -d --name fish-speech --gpus all -p 7860:7860 \
  fishaudio/fish-speech:latest \
  python -m tools.webui --listen 0.0.0.0 --port 7860 --half
```

### Проблема: Порт 7860 недоступен

```bash
# Проверьте, что контейнер запущен
docker ps | grep fish-speech

# Проверьте привязку портов
docker port fish-speech

# Проверьте файрвол (на сервере Clore)
# Убедитесь, что порт 7860 указан в конфигурации заказа CLORE.AI
```

### Проблема: Скачивание модели не удаётся / медленно

```bash
# Проверьте подключение к интернету из контейнера
docker exec fish-speech curl -I https://huggingface.co

# Вручную предзагрузите модели
docker exec fish-speech python -c "
from huggingface_hub import snapshot_download
snapshot_download('fishaudio/fish-speech-1.4')
"
```

### Проблема: Плохое качество аудио

* Убедитесь, что эталонное аудио чистое (без фонового шума, частота дискретизации 16 кГц и выше)
* Держите эталонное аудио в диапазоне 10–30 секунд
* Предоставьте транскрипт эталонного аудио для лучшего выравнивания
* Попробуйте увеличить `--num_samples` чтобы сгенерировать несколько вариантов и выбрать лучший

### Проблема: WebUI грузится, но генерация зависает

```bash
# Проверьте загрузку GPU во время генерации
docker exec fish-speech watch -n1 nvidia-smi

# Проверьте логи на предмет ошибок
docker logs fish-speech --tail 50
```

***

## Ссылки

* **GitHub**: <https://github.com/fishaudio/fish-speech>
* **Docker Hub**: <https://hub.docker.com/r/fishaudio/fish-speech>
* **Официальная документация**: <https://speech.fish.audio>
* **Модели на Hugging Face**: <https://huggingface.co/fishaudio/fish-speech-1.4>
* **CLORE.AI Маркетплейс**: <https://clore.ai/marketplace>
* **Сообщество в Discord**: <https://discord.gg/Es5qTB9BcN>

***

## Рекомендации Clore.ai по GPU

| Сценарий использования       | Рекомендуемый GPU | Примерная стоимость на Clore.ai |
| ---------------------------- | ----------------- | ------------------------------- |
| Разработка/Тестирование      | RTX 3090 (24GB)   | \~$0.12/gpu/hr                  |
| Производственный TTS         | RTX 4090 (24GB)   | \~$0.70/gpu/hr                  |
| Высокопроизводительный вывод | A100 80GB         | \~$1.20/gpu/hr                  |

> 💡 Все примеры в этом руководстве можно развернуть на [Clore.ai](https://clore.ai/marketplace) GPU-серверах. Просматривайте доступные GPU и арендуйте по часам — без обязательств, с полным root-доступом.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/fish-speech.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
