diff --git a/.env.example b/.env.example
index 2da884f..c012278 100644
--- a/.env.example
+++ b/.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
diff --git a/.idea/dictionaries/project.xml b/.idea/dictionaries/project.xml
new file mode 100644
index 0000000..dcd2d28
--- /dev/null
+++ b/.idea/dictionaries/project.xml
@@ -0,0 +1,7 @@
+
+
+
+ конфигурироемость
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b79d30e..5872f1b 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,5 +3,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/whisper.iml b/.idea/whisper.iml
new file mode 100644
index 0000000..ec63674
--- /dev/null
+++ b/.idea/whisper.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.MD b/README.MD
index 8046386..21c4cf0 100644
--- a/README.MD
+++ b/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 ключ не предоставлен
diff --git a/docker-compose.yml b/docker-compose.yml
index 5393700..18538c7 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -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
- devices:
- - /dev/kfd:/dev/kfd
- - /dev/dri:/dev/dri
+ # 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
diff --git a/start_server.sh b/start_server.sh
index 2884ff6..1bcfa99 100755
--- a/start_server.sh
+++ b/start_server.sh
@@ -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}"