feat: обновление конфигурации ASR сервера и поддержка GPU NVIDIA/AMD

This commit is contained in:
2025-09-07 12:01:57 +03:00
parent fcae47cad1
commit 1f13bc4f86
7 changed files with 113 additions and 71 deletions
+52 -39
View File
@@ -6,11 +6,13 @@
- 🎯 Эндпоинт `/transcribe` для распознавания речи
- 🔑 Управление API-ключами без перезапуска сервиса
- 📊 Три формата ответа: `json`, `simple`, `text`
- 📊 Три формата ответа: `json`, `simple`, `text/plain`
- ⚙️ Поддержка всех параметров `whisper.transcribe()`
- 🐳 Docker и native запуск
- 🏥 Health check эндпоинт
- 🔄 Горячая перезагрузка API-ключей
- 🚀 GPU ускорение по умолчанию (NVIDIA/AMD)
- ⚙️ Централизованная конфигурация через .env файл
## Требования
@@ -18,10 +20,12 @@
- FFmpeg (для обработки аудио)
- Минимум 4GB RAM
- Свободное место для моделей (turbo ~1GB, large ~3GB)
- **GPU с поддержкой CUDA или ROCm (рекомендуется)**
Для Docker дополнительно:
- Docker + Docker Compose
- GPU AMD с поддержкой ROCm (опционально)
- NVIDIA Docker runtime (для NVIDIA GPU)
- ROCm (для AMD GPU)
## Быстрый старт
@@ -30,6 +34,10 @@
```bash
git clone https://github.com/SlavaVlad/simple-asr-server.git ./asr
cd asr
# Для AMD GPU оставьте как есть
# Для NVIDIA GPU раскомментируйте соответствующую секцию в docker-compose.yml
docker compose up -d
```
@@ -38,41 +46,54 @@ docker compose up -d
```bash
git clone https://github.com/SlavaVlad/simple-asr-server.git ./asr
cd asr
chmod +x start_server.sh
./start_server.sh
```
## Конфигурация
### Переменные окружения
Создайте файл `.env` для настройки переменных окружения:
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `HOST` | `0.0.0.0` | IP адрес для привязки |
| `PORT` | `9854` | Порт сервера |
| `DEFAULT_MODEL` | `turbo` | Модель Whisper для загрузки |
| `MODEL_DEVICE` | `cuda` | Устройство: `cuda`, `cpu`, или `auto` |
| `MODEL_DOWNLOAD_ROOT` | `./models` | Директория для моделей |
| `KEYS_FILE` | `./data/keys.txt` | Файл с API ключами |
| `LOG_LEVEL` | `info` | Уровень логирования |
| `HSA_OVERRIDE_GFX_VERSION` | `10.3.0` | Версия GPU для AMD ROCm |
| `AUDIO_SPEEDUP` | `1.25` | Ускорение обработки аудио |
### Настройка GPU
**По умолчанию сервис настроен для работы с NVIDIA GPU.**
**Для использования CPU:**
```env
HOST=0.0.0.0
PORT=9854
DEFAULT_MODEL=turbo
MODEL_DOWNLOAD_ROOT=./models
KEYS_FILE=./data/keys.txt
LOG_LEVEL=info
MODEL_DEVICE=cpu
```
### Доступные модели Whisper
- `tiny` - самая быстрая, наименее точная
- `base` - баланс скорости и качества
- `small` - хорошее качество
- `medium` - лучшее качество
- `large` - максимальное качество
- `turbo` - оптимизированная версия (рекомендуется)
- `tiny` - самая быстрая, наименее точная (~40MB)
- `base` - баланс скорости и качества (~150MB)
- `small` - хорошее качество (~500MB)
- `medium` - лучшее качество (~1.5GB)
- `large` - максимальное качество (~3GB)
- `turbo` - оптимизированная версия (~800MB, рекомендуется)
## Управление API-ключами
### Создание ключей
### Автоматическое создание ключей
При первом запуске автоматически создается файл `data/keys.txt` с демонстрационным ключом.
При первом запуске:
1. Если установлен `openssl` - генерируется безопасный 64-символьный ключ
2. Если `openssl` отсутствует - создается пустой файл ключей
### Добавление/удаление ключей
1. Отредактируйте файл `data/keys.txt` (один ключ на строку)
1. Отредактируйте файл `data/keys.txt` (один ключ на строку, 64 hex символа)
2. Вызовите эндпоинт перезагрузки:
```bash
@@ -86,6 +107,16 @@ key1
key2
```
### Генерация новых ключей
```bash
# Генерация нового ключа
openssl rand -hex 32
# Добавление в файл ключей
echo "$(openssl rand -hex 32)" >> data/keys.txt
```
## API Документация
### POST /transcribe
@@ -107,14 +138,14 @@ key2
- `best_of` - количество кандидатов для выбора лучшего
- `compression_ratio_threshold` - порог сжатия для фильтрации
- `logprob_threshold` - порог логарифмической вероятности
- `no_speech_threshold` - порог детекции отсутствия речи
- `no_speech_threshold` - порог отсутствия речи
- `condition_on_previous_text` - использовать предыдущий текст как контекст
- `initial_prompt` - начальная подсказка для модели
- `word_timestamps` - временные метки слов (true/false)
- `prepend_punctuations` - знаки препинания для добавления в начало
- `append_punctuations` - знаки препинания для добавления в конец
- `clip_timestamps` - временные метки для обрезки аудио
- `hallucination_silence_threshold` - порог тишины для детекции галлюцинаций
- `hallucination_silence_threshold` - порог тишины для отрезания галлюцинаций
#### Примеры запросов
@@ -214,24 +245,6 @@ curl "http://localhost:9854/health"
}
```
### POST /keys/reload
Перезагрузка API-ключей без перезапуска:
```bash
curl -X POST "http://localhost:9854/keys/reload" \
-H "X-API-Key: your-api-key"
```
### GET /keys/count
Количество активных ключей:
```bash
curl "http://localhost:9854/keys/count" \
-H "X-API-Key: your-api-key"
```
## Коды ошибок
- `401` - API ключ не предоставлен