feat: обновление конфигурации ASR сервера и поддержка GPU NVIDIA/AMD
This commit is contained in:
36
.env.example
36
.env.example
@@ -1,25 +1,25 @@
|
||||
# Device settings
|
||||
ASR_DEVICE=rocm
|
||||
ASR_MODELS_ROOT=/app/models
|
||||
# Simple ASR Server Configuration
|
||||
# Этот файл содержит переменные окружения для сервера ASR
|
||||
|
||||
# Server settings
|
||||
PORT=9854
|
||||
# Сервер
|
||||
HOST=0.0.0.0
|
||||
PORT=9854
|
||||
|
||||
# Модель Whisper
|
||||
DEFAULT_MODEL=turbo
|
||||
MODEL_DEVICE=cuda
|
||||
MODEL_DOWNLOAD_ROOT=./models
|
||||
|
||||
# Файлы и директории
|
||||
KEYS_FILE=./data/keys.txt
|
||||
LOG_LEVEL=info
|
||||
|
||||
# Model settings
|
||||
DEFAULT_MODEL=turbo
|
||||
DEFAULT_LANGUAGE=ru
|
||||
# AMD GPU настройки (для ROCm)
|
||||
HSA_OVERRIDE_GFX_VERSION=10.3.0
|
||||
|
||||
# Processing settings
|
||||
# Дополнительные настройки
|
||||
AUDIO_SPEEDUP=1.25
|
||||
MAX_UPLOAD_SIZE_MB=50 # 50MB in bytes
|
||||
|
||||
# Cache settings
|
||||
CACHE_DIR=/app/cache
|
||||
ENABLE_CACHE=true
|
||||
|
||||
# Security settings
|
||||
CORS_ORIGINS=*
|
||||
MAX_REQUESTS_PER_MINUTE=60
|
||||
|
||||
# Настройки для GPU (по умолчанию CUDA)
|
||||
# Для использования CPU установите MODEL_DEVICE=cpu
|
||||
# Для AMD GPU убедитесь что установлен ROCm и используется подходящая версия PyTorch
|
||||
|
||||
7
.idea/dictionaries/project.xml
generated
Normal file
7
.idea/dictionaries/project.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="project">
|
||||
<words>
|
||||
<w>конфигурироемость</w>
|
||||
</words>
|
||||
</dictionary>
|
||||
</component>
|
||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -3,5 +3,5 @@
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.13 (simple-asr-server)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (simple-asr-server)" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (whisper)" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
7
.idea/whisper.iml
generated
Normal file
7
.idea/whisper.iml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="4">
|
||||
<component name="PyDocumentationSettings">
|
||||
<option name="format" value="PLAIN" />
|
||||
<option name="myDocStringFormat" value="Plain" />
|
||||
</component>
|
||||
</module>
|
||||
91
README.MD
91
README.MD
@@ -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 ключ не предоставлен
|
||||
|
||||
@@ -2,25 +2,38 @@ services:
|
||||
asr-server:
|
||||
build: .
|
||||
ports:
|
||||
- "${PORT:-9854}:9854"
|
||||
- "${PORT:-9854}:${PORT:-9854}"
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- HOST=${HOST:-0.0.0.0}
|
||||
- PORT=${PORT:-9854}
|
||||
- DEFAULT_MODEL=${DEFAULT_MODEL:-turbo}
|
||||
- MODEL_DOWNLOAD_ROOT=${MODEL_DOWNLOAD_ROOT:-/app/models}
|
||||
- KEYS_FILE=${KEYS_FILE:-/app/data/keys.txt}
|
||||
- HSA_OVERRIDE_GFX_VERSION=${HSA_OVERRIDE_GFX_VERSION:-10.3.0}
|
||||
- LOG_LEVEL=${LOG_LEVEL:-info}
|
||||
- AUDIO_SPEEDUP=${AUDIO_SPEEDUP:-1.25}
|
||||
- HOST=${HOST}
|
||||
- PORT=${PORT}
|
||||
- DEFAULT_MODEL=${DEFAULT_MODEL}
|
||||
- MODEL_DEVICE=${MODEL_DEVICE}
|
||||
- MODEL_DOWNLOAD_ROOT=/app/models
|
||||
- KEYS_FILE=/app/data/keys.txt
|
||||
- HSA_OVERRIDE_GFX_VERSION=${HSA_OVERRIDE_GFX_VERSION}
|
||||
- LOG_LEVEL=${LOG_LEVEL}
|
||||
- AUDIO_SPEEDUP=${AUDIO_SPEEDUP}
|
||||
volumes:
|
||||
- ./models:/app/models
|
||||
- ./data:/app/data
|
||||
# GPU support - раскомментируйте нужную секцию
|
||||
# Для NVIDIA GPU:
|
||||
# deploy:
|
||||
# resources:
|
||||
# reservations:
|
||||
# devices:
|
||||
# - driver: nvidia
|
||||
# count: all
|
||||
# capabilities: [gpu]
|
||||
# Для AMD GPU (ROCm):
|
||||
devices:
|
||||
- /dev/kfd:/dev/kfd
|
||||
- /dev/dri:/dev/dri
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9854/health"]
|
||||
test: ["CMD", "curl", "-f", "http://localhost:${PORT:-9854}/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -33,6 +33,7 @@ fi
|
||||
export HOST=${HOST:-"0.0.0.0"}
|
||||
export PORT=${PORT:-9854}
|
||||
export DEFAULT_MODEL=${DEFAULT_MODEL:-"turbo"}
|
||||
export MODEL_DEVICE=${MODEL_DEVICE:-"cuda"}
|
||||
export MODEL_DOWNLOAD_ROOT=${MODEL_DOWNLOAD_ROOT:-"${APP_DIR}/models"}
|
||||
export KEYS_FILE=${KEYS_FILE:-"${APP_DIR}/data/keys.txt"}
|
||||
export LOG_LEVEL=${LOG_LEVEL:-"info"}
|
||||
@@ -86,6 +87,7 @@ echo "Starting Simple ASR Server..."
|
||||
echo "Host: ${HOST}"
|
||||
echo "Port: ${PORT}"
|
||||
echo "Default Model: ${DEFAULT_MODEL}"
|
||||
echo "Model Device: ${MODEL_DEVICE}"
|
||||
echo "Model Download Root: ${MODEL_DOWNLOAD_ROOT}"
|
||||
echo "Keys File: ${KEYS_FILE}"
|
||||
echo "Log Level: ${LOG_LEVEL}"
|
||||
|
||||
Reference in New Issue
Block a user