feat: обновление конфигурации ASR сервера и поддержка GPU NVIDIA/AMD
This commit is contained in:
36
.env.example
36
.env.example
@@ -1,25 +1,25 @@
|
|||||||
# Device settings
|
# Simple ASR Server Configuration
|
||||||
ASR_DEVICE=rocm
|
# Этот файл содержит переменные окружения для сервера ASR
|
||||||
ASR_MODELS_ROOT=/app/models
|
|
||||||
|
|
||||||
# Server settings
|
# Сервер
|
||||||
PORT=9854
|
|
||||||
HOST=0.0.0.0
|
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
|
LOG_LEVEL=info
|
||||||
|
|
||||||
# Model settings
|
# AMD GPU настройки (для ROCm)
|
||||||
DEFAULT_MODEL=turbo
|
HSA_OVERRIDE_GFX_VERSION=10.3.0
|
||||||
DEFAULT_LANGUAGE=ru
|
|
||||||
|
|
||||||
# Processing settings
|
# Дополнительные настройки
|
||||||
AUDIO_SPEEDUP=1.25
|
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">
|
<component name="Black">
|
||||||
<option name="sdkName" value="Python 3.13 (simple-asr-server)" />
|
<option name="sdkName" value="Python 3.13 (simple-asr-server)" />
|
||||||
</component>
|
</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>
|
</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` для распознавания речи
|
- 🎯 Эндпоинт `/transcribe` для распознавания речи
|
||||||
- 🔑 Управление API-ключами без перезапуска сервиса
|
- 🔑 Управление API-ключами без перезапуска сервиса
|
||||||
- 📊 Три формата ответа: `json`, `simple`, `text`
|
- 📊 Три формата ответа: `json`, `simple`, `text/plain`
|
||||||
- ⚙️ Поддержка всех параметров `whisper.transcribe()`
|
- ⚙️ Поддержка всех параметров `whisper.transcribe()`
|
||||||
- 🐳 Docker и native запуск
|
- 🐳 Docker и native запуск
|
||||||
- 🏥 Health check эндпоинт
|
- 🏥 Health check эндпоинт
|
||||||
- 🔄 Горячая перезагрузка API-ключей
|
- 🔄 Горячая перезагрузка API-ключей
|
||||||
|
- 🚀 GPU ускорение по умолчанию (NVIDIA/AMD)
|
||||||
|
- ⚙️ Централизованная конфигурация через .env файл
|
||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
|
|
||||||
@@ -18,10 +20,12 @@
|
|||||||
- FFmpeg (для обработки аудио)
|
- FFmpeg (для обработки аудио)
|
||||||
- Минимум 4GB RAM
|
- Минимум 4GB RAM
|
||||||
- Свободное место для моделей (turbo ~1GB, large ~3GB)
|
- Свободное место для моделей (turbo ~1GB, large ~3GB)
|
||||||
|
- **GPU с поддержкой CUDA или ROCm (рекомендуется)**
|
||||||
|
|
||||||
Для Docker дополнительно:
|
Для Docker дополнительно:
|
||||||
- Docker + Docker Compose
|
- Docker + Docker Compose
|
||||||
- GPU AMD с поддержкой ROCm (опционально)
|
- NVIDIA Docker runtime (для NVIDIA GPU)
|
||||||
|
- ROCm (для AMD GPU)
|
||||||
|
|
||||||
## Быстрый старт
|
## Быстрый старт
|
||||||
|
|
||||||
@@ -30,6 +34,10 @@
|
|||||||
```bash
|
```bash
|
||||||
git clone https://github.com/SlavaVlad/simple-asr-server.git ./asr
|
git clone https://github.com/SlavaVlad/simple-asr-server.git ./asr
|
||||||
cd asr
|
cd asr
|
||||||
|
|
||||||
|
# Для AMD GPU оставьте как есть
|
||||||
|
# Для NVIDIA GPU раскомментируйте соответствующую секцию в docker-compose.yml
|
||||||
|
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -38,41 +46,54 @@ docker compose up -d
|
|||||||
```bash
|
```bash
|
||||||
git clone https://github.com/SlavaVlad/simple-asr-server.git ./asr
|
git clone https://github.com/SlavaVlad/simple-asr-server.git ./asr
|
||||||
cd asr
|
cd asr
|
||||||
|
|
||||||
chmod +x start_server.sh
|
chmod +x start_server.sh
|
||||||
./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
|
```env
|
||||||
HOST=0.0.0.0
|
MODEL_DEVICE=cpu
|
||||||
PORT=9854
|
|
||||||
DEFAULT_MODEL=turbo
|
|
||||||
MODEL_DOWNLOAD_ROOT=./models
|
|
||||||
KEYS_FILE=./data/keys.txt
|
|
||||||
LOG_LEVEL=info
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Доступные модели Whisper
|
### Доступные модели Whisper
|
||||||
|
|
||||||
- `tiny` - самая быстрая, наименее точная
|
- `tiny` - самая быстрая, наименее точная (~40MB)
|
||||||
- `base` - баланс скорости и качества
|
- `base` - баланс скорости и качества (~150MB)
|
||||||
- `small` - хорошее качество
|
- `small` - хорошее качество (~500MB)
|
||||||
- `medium` - лучшее качество
|
- `medium` - лучшее качество (~1.5GB)
|
||||||
- `large` - максимальное качество
|
- `large` - максимальное качество (~3GB)
|
||||||
- `turbo` - оптимизированная версия (рекомендуется)
|
- `turbo` - оптимизированная версия (~800MB, рекомендуется)
|
||||||
|
|
||||||
## Управление API-ключами
|
## Управление API-ключами
|
||||||
|
|
||||||
### Создание ключей
|
### Автоматическое создание ключей
|
||||||
|
|
||||||
При первом запуске автоматически создается файл `data/keys.txt` с демонстрационным ключом.
|
При первом запуске:
|
||||||
|
1. Если установлен `openssl` - генерируется безопасный 64-символьный ключ
|
||||||
|
2. Если `openssl` отсутствует - создается пустой файл ключей
|
||||||
|
|
||||||
### Добавление/удаление ключей
|
### Добавление/удаление ключей
|
||||||
|
|
||||||
1. Отредактируйте файл `data/keys.txt` (один ключ на строку)
|
1. Отредактируйте файл `data/keys.txt` (один ключ на строку, 64 hex символа)
|
||||||
2. Вызовите эндпоинт перезагрузки:
|
2. Вызовите эндпоинт перезагрузки:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -86,6 +107,16 @@ key1
|
|||||||
key2
|
key2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Генерация новых ключей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Генерация нового ключа
|
||||||
|
openssl rand -hex 32
|
||||||
|
|
||||||
|
# Добавление в файл ключей
|
||||||
|
echo "$(openssl rand -hex 32)" >> data/keys.txt
|
||||||
|
```
|
||||||
|
|
||||||
## API Документация
|
## API Документация
|
||||||
|
|
||||||
### POST /transcribe
|
### POST /transcribe
|
||||||
@@ -107,14 +138,14 @@ key2
|
|||||||
- `best_of` - количество кандидатов для выбора лучшего
|
- `best_of` - количество кандидатов для выбора лучшего
|
||||||
- `compression_ratio_threshold` - порог сжатия для фильтрации
|
- `compression_ratio_threshold` - порог сжатия для фильтрации
|
||||||
- `logprob_threshold` - порог логарифмической вероятности
|
- `logprob_threshold` - порог логарифмической вероятности
|
||||||
- `no_speech_threshold` - порог детекции отсутствия речи
|
- `no_speech_threshold` - порог отсутствия речи
|
||||||
- `condition_on_previous_text` - использовать предыдущий текст как контекст
|
- `condition_on_previous_text` - использовать предыдущий текст как контекст
|
||||||
- `initial_prompt` - начальная подсказка для модели
|
- `initial_prompt` - начальная подсказка для модели
|
||||||
- `word_timestamps` - временные метки слов (true/false)
|
- `word_timestamps` - временные метки слов (true/false)
|
||||||
- `prepend_punctuations` - знаки препинания для добавления в начало
|
- `prepend_punctuations` - знаки препинания для добавления в начало
|
||||||
- `append_punctuations` - знаки препинания для добавления в конец
|
- `append_punctuations` - знаки препинания для добавления в конец
|
||||||
- `clip_timestamps` - временные метки для обрезки аудио
|
- `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 ключ не предоставлен
|
- `401` - API ключ не предоставлен
|
||||||
|
|||||||
@@ -2,25 +2,38 @@ services:
|
|||||||
asr-server:
|
asr-server:
|
||||||
build: .
|
build: .
|
||||||
ports:
|
ports:
|
||||||
- "${PORT:-9854}:9854"
|
- "${PORT:-9854}:${PORT:-9854}"
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- HOST=${HOST:-0.0.0.0}
|
- HOST=${HOST}
|
||||||
- PORT=${PORT:-9854}
|
- PORT=${PORT}
|
||||||
- DEFAULT_MODEL=${DEFAULT_MODEL:-turbo}
|
- DEFAULT_MODEL=${DEFAULT_MODEL}
|
||||||
- MODEL_DOWNLOAD_ROOT=${MODEL_DOWNLOAD_ROOT:-/app/models}
|
- MODEL_DEVICE=${MODEL_DEVICE}
|
||||||
- KEYS_FILE=${KEYS_FILE:-/app/data/keys.txt}
|
- MODEL_DOWNLOAD_ROOT=/app/models
|
||||||
- HSA_OVERRIDE_GFX_VERSION=${HSA_OVERRIDE_GFX_VERSION:-10.3.0}
|
- KEYS_FILE=/app/data/keys.txt
|
||||||
- LOG_LEVEL=${LOG_LEVEL:-info}
|
- HSA_OVERRIDE_GFX_VERSION=${HSA_OVERRIDE_GFX_VERSION}
|
||||||
- AUDIO_SPEEDUP=${AUDIO_SPEEDUP:-1.25}
|
- LOG_LEVEL=${LOG_LEVEL}
|
||||||
|
- AUDIO_SPEEDUP=${AUDIO_SPEEDUP}
|
||||||
volumes:
|
volumes:
|
||||||
- ./models:/app/models
|
- ./models:/app/models
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
devices:
|
# GPU support - раскомментируйте нужную секцию
|
||||||
- /dev/kfd:/dev/kfd
|
# Для NVIDIA GPU:
|
||||||
- /dev/dri:/dev/dri
|
# 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
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:9854/health"]
|
test: ["CMD", "curl", "-f", "http://localhost:${PORT:-9854}/health"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ fi
|
|||||||
export HOST=${HOST:-"0.0.0.0"}
|
export HOST=${HOST:-"0.0.0.0"}
|
||||||
export PORT=${PORT:-9854}
|
export PORT=${PORT:-9854}
|
||||||
export DEFAULT_MODEL=${DEFAULT_MODEL:-"turbo"}
|
export DEFAULT_MODEL=${DEFAULT_MODEL:-"turbo"}
|
||||||
|
export MODEL_DEVICE=${MODEL_DEVICE:-"cuda"}
|
||||||
export MODEL_DOWNLOAD_ROOT=${MODEL_DOWNLOAD_ROOT:-"${APP_DIR}/models"}
|
export MODEL_DOWNLOAD_ROOT=${MODEL_DOWNLOAD_ROOT:-"${APP_DIR}/models"}
|
||||||
export KEYS_FILE=${KEYS_FILE:-"${APP_DIR}/data/keys.txt"}
|
export KEYS_FILE=${KEYS_FILE:-"${APP_DIR}/data/keys.txt"}
|
||||||
export LOG_LEVEL=${LOG_LEVEL:-"info"}
|
export LOG_LEVEL=${LOG_LEVEL:-"info"}
|
||||||
@@ -86,6 +87,7 @@ echo "Starting Simple ASR Server..."
|
|||||||
echo "Host: ${HOST}"
|
echo "Host: ${HOST}"
|
||||||
echo "Port: ${PORT}"
|
echo "Port: ${PORT}"
|
||||||
echo "Default Model: ${DEFAULT_MODEL}"
|
echo "Default Model: ${DEFAULT_MODEL}"
|
||||||
|
echo "Model Device: ${MODEL_DEVICE}"
|
||||||
echo "Model Download Root: ${MODEL_DOWNLOAD_ROOT}"
|
echo "Model Download Root: ${MODEL_DOWNLOAD_ROOT}"
|
||||||
echo "Keys File: ${KEYS_FILE}"
|
echo "Keys File: ${KEYS_FILE}"
|
||||||
echo "Log Level: ${LOG_LEVEL}"
|
echo "Log Level: ${LOG_LEVEL}"
|
||||||
|
|||||||
Reference in New Issue
Block a user