Ubuntu 24 и 25 setup files

This commit is contained in:
Mikhail Shardin
2026-04-15 14:44:54 +05:00
parent 7094faf5ff
commit 77c87be188
2 changed files with 351 additions and 4 deletions

View File

@@ -28,8 +28,8 @@
# конфликтов доступа у Docker-контейнера. # конфликтов доступа у Docker-контейнера.
# #
# Порядок использования: # Порядок использования:
# 1. Сделайте скрипт исполняемым: chmod +x whisperx_diarization_setup.sh # 1. Сделайте скрипт исполняемым: chmod +x whisperx_diarization_setup_ubuntu24.sh
# 2. Запустите его: ./whisperx_diarization_setup.sh # 2. Запустите его: ./whisperx_diarization_setup_ubuntu24.sh
# 3. После завершения может потребоваться перезагрузка системы. # 3. После завершения может потребоваться перезагрузка системы.
# Следить за состоянием GPU: $ watch -n 5 nvidia-smi # Следить за состоянием GPU: $ watch -n 5 nvidia-smi
@@ -118,7 +118,7 @@ install_docker() {
# Добавление пользователя в группу docker, если еще не там # Добавление пользователя в группу docker, если еще не там
if ! groups "$USER" | grep -q '\bdocker\b'; then if ! groups "$USER" | grep -q '\bdocker\b'; then
log "Добавление пользователя $USER в группу docker..." log "Добавление пользователя $USER в группу docker..."
sudo usermod -aG docker "$USER" sudo usmod -aG docker "$USER"
warning "Для применения изменений группы docker требуется перезагрузка или перелогин." warning "Для применения изменений группы docker требуется перезагрузка или перелогин."
log "Вы можете выполнить 'sudo reboot' после завершения установки." log "Вы можете выполнить 'sudo reboot' после завершения установки."
fi fi
@@ -329,4 +329,4 @@ main() {
} }
# Запуск основной функции # Запуск основной функции
main main

View File

@@ -0,0 +1,347 @@
#!/usr/bin/env bash
# 🛠️ Скрипт установки WhisperX с диаризацией (Docker + NVIDIA) 🛠️
#
# Этот Shell-скрипт полностью автоматизирует подготовку системы Ubuntu
# 25 для работы с WhisperX через Docker с ускорением на GPU
# от NVIDIA. Он устанавливает все компоненты, настраивает их и создает
# готовое к работе окружение.
#
# Напоминание: скрипт следует официальным инструкциям NVIDIA и Docker
# для обеспечения максимальной надежности и совместимости.
#
# Основные задачи:
# - Проверка системы: Определяет дистрибутив и наличие драйверов NVIDIA.
# - Установка Docker: Устанавливает Docker Engine и добавляет пользователя
# в нужную группу для работы без `sudo`.
# - Установка NVIDIA Container Toolkit: Позволяет Docker-контейнерам
# напрямую использовать ресурсы GPU.
# - Тестирование GPU в Docker: Запускает тестовый контейнер для проверки
# корректности настройки.
# - Загрузка образа WhisperX: Скачивает готовый Docker-образ со всеми
# зависимостями.
# - Создание рабочего пространства:
# - Локальные папки `audio/` и `results/`.
# - Глобальный кеш для моделей в `~/whisperx/` для экономии места.
# - Файл конфигурации `config.env` с настройками по умолчанию.
# - Управление правами: Назначает корректные права на папки, чтобы избежать
# конфликтов доступа у Docker-контейнера.
#
# Порядок использования:
# 1. Сделайте скрипт исполняемым: chmod +x whisperx_diarization_setup_ubuntu25.sh
# 2. Запустите его: ./whisperx_diarization_setup_ubuntu25.sh
# 3. После завершения может потребоваться перезагрузка системы.
# Следить за состоянием GPU: $ watch -n 5 nvidia-smi
#
# Автор: Михаил Шардин https://shardin.name/
# Дата создания: 14.04.2026
# Версия: 2.3
#
# Актуальная версия скрипта всегда здесь: https://github.com/empenoso/offline-audio-transcriber
#
# ===================================================================
## Строгий режим для bash. Прерывает выполнение при любой ошибке.
set -euo pipefail
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функции логирования (используем printf для большей надежности)
log() { printf "${BLUE}[INFO]${NC} %s\n" "$1"; }
success() { printf "${GREEN}[SUCCESS]${NC} %s\n" "$1"; }
warning() { printf "${YELLOW}[WARNING]${NC} %s\n" "$1"; }
error() { printf "${RED}[ERROR]${NC} %s\n" "$1" >&2; } # Ошибки выводим в stderr
# --- Функции проверки системы ---
check_distro() {
if ! [ -f /etc/os-release ]; then
error "Не удалось определить операционную систему."
exit 1
fi
. /etc/os-release
if [[ "$ID" != "ubuntu" && "$ID" != "debian" ]]; then
error "Этот скрипт предназначен для Ubuntu/Debian. Обнаружено: $PRETTY_NAME"
exit 1
fi
success "Обнаружена совместимая система: $PRETTY_NAME"
}
check_gpu() {
log "Проверка наличия NVIDIA GPU и драйверов..."
if ! command -v nvidia-smi &> /dev/null; then
error "Команда 'nvidia-smi' не найдена. Установите драйверы NVIDIA."
printf "Рекомендуемые команды:\n"
printf " sudo ubuntu-drivers autoinstall\n"
printf " sudo reboot\n"
exit 1
fi
if ! nvidia-smi &> /dev/null; then
error "'nvidia-smi' не отвечает. Возможно, требуется перезагрузка после установки драйверов."
exit 1
fi
GPU_INFO=$(nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits)
DRIVER_VERSION=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader,nounits)
success "Найден GPU: $GPU_INFO"
log "Версия драйвера: $DRIVER_VERSION"
}
# --- Функции установки компонентов ---
install_docker() {
if command -v docker &> /dev/null && docker --version &> /dev/null; then
success "Docker уже установлен: $(docker --version)"
else
log "Установка Docker Engine..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
success "Docker успешно установлен."
fi
# Добавление пользователя в группу docker, если еще не там
if ! groups "$USER" | grep -q '\bdocker\b'; then
log "Добавление пользователя $USER в группу docker..."
sudo usermod -aG docker "$USER"
warning "Для применения изменений группы docker требуется перезагрузка или перелогин."
log "Вы можете выполнить 'sudo reboot' после завершения установки."
fi
}
install_nvidia_toolkit() {
log "Установка NVIDIA Container Toolkit..."
if command -v nvidia-ctk &> /dev/null; then
success "NVIDIA Container Toolkit уже установлен."
else
log "Настройка репозитория NVIDIA..."
# Добавлен флаг --yes для gpg, чтобы избежать вопроса о перезаписи
# Ключ
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# Архитектура
ARCH=$(dpkg --print-architecture)
# Репозиторий (без sed)
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/${ARCH} /" | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null
log "Обновление списка пакетов и установка..."
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
success "NVIDIA Container Toolkit успешно установлен."
fi
log "Конфигурирование Docker для работы с NVIDIA GPU..."
sudo nvidia-ctk runtime configure --runtime=docker
# === Генерация CDI профиля для Docker 29+ (Ubuntu 25+) ===
log "Генерация CDI профиля для GPU..."
sudo mkdir -p /etc/cdi
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
# ==========================================================
log "Перезапуск Docker daemon для применения конфигурации..."
sudo systemctl restart docker
sleep 3 # Даем демону время на перезапуск
success "Docker настроен для работы с NVIDIA GPU."
}
test_docker_gpu() {
log "Тестирование Docker с поддержкой GPU..."
if ! sudo docker run --rm hello-world > /dev/null 2>&1; then
error "Базовый Docker не работает. Проверьте 'systemctl status docker'"
exit 1
fi
success "Базовый тест Docker пройден."
log "Проверка доступа к GPU из контейнера..."
local cuda_image="nvidia/cuda:12.4.1-base-ubuntu22.04" # Используем актуальный образ
log "Используем тестовый образ: $cuda_image"
if ! sudo docker pull "$cuda_image" > /dev/null; then
warning "Не удалось загрузить тестовый образ $cuda_image. Пропускаем тест GPU."
return 1
fi
# Пытаемся выполнить nvidia-smi внутри контейнера
local gpu_name_in_container
gpu_name_in_container=$(sudo docker run --rm --gpus all "$cuda_image" nvidia-smi --query-gpu=name --format=csv,noheader)
if [[ -n "$gpu_name_in_container" ]]; then
success "🎉 GPU успешно обнаружен в Docker контейнере: $gpu_name_in_container"
return 0 # Успех
else
error "Не удалось получить доступ к GPU из Docker контейнера."
warning "WhisperX будет работать на CPU (значительно медленнее)."
log "Возможные причины:"
log " - Конфликт версий драйвера, toolkit или docker."
log " - Необходимо перезагрузить систему: 'sudo reboot'"
return 1 # Неудача
fi
}
pull_whisperx_image() {
log "Загрузка Docker образа WhisperX..."
local whisperx_image="ghcr.io/jim60105/whisperx:latest"
if sudo docker pull "$whisperx_image"; then
success "Образ $whisperx_image загружен успешно."
local image_size_bytes
image_size_bytes=$(sudo docker image inspect "$whisperx_image" --format='{{.Size}}')
local image_size_gb
image_size_gb=$(awk "BEGIN {printf \"%.2f\", $image_size_bytes/1024/1024/1024}")
log "Размер образа: ~${image_size_gb} GB"
else
error "Не удалось загрузить образ WhisperX: $whisperx_image"
exit 1
fi
}
setup_workspace() {
log "Создание рабочих директорий и конфигурации..."
local base_dir="."
local cache_dir="$HOME/whisperx"
mkdir -p "$base_dir"/{audio,results}
mkdir -p "$cache_dir"
log "Установка прав 777 на папки..."
chmod -R 777 "$base_dir"/audio "$base_dir"/results "$cache_dir"
success "Созданы директории:"
printf " 📂 %s/audio - для входных аудиофайлов\n" "$(pwd)"
printf " 📂 %s/results - для результатов\n" "$(pwd)"
printf " 🧠 %s - для кеширования моделей\n" "$cache_dir"
local config_file="$base_dir/config.env"
if [ -f "$config_file" ]; then
# ИЗМЕНЕНИЕ: Исправлена переменная $config.env на $config_file
success "Конфигурационный файл $config_file уже существует. Пропускаем создание."
else
log "Создание конфигурационного файла: $config_file"
cat > "$config_file" << 'EOF'
# Конфигурация WhisperX
# HuggingFace токен для диаризации (получите на https://huggingface.co/settings/tokens)
# ВАЖНО: Примите лицензии на:
# https://huggingface.co/pyannote/speaker-diarization-3.1
# https://huggingface.co/pyannote/segmentation-3.0
HF_TOKEN=your_token_here
# Модель Whisper (tiny, base, small, medium, large-v1, large-v2, large-v3)
WHISPER_MODEL=large-v3
# Язык аудио (ru, en, auto для автоопределения)
LANGUAGE=ru
# Размер батча (чем больше - тем быстрее, но больше памяти GPU)
BATCH_SIZE=16
# Устройство для вычислений (cuda или cpu)
DEVICE=cuda
# Включить диаризацию (разделение по спикерам)
ENABLE_DIARIZATION=true
# Минимальное количество спикеров (оставить пустым для автоопределения)
MIN_SPEAKERS=
# Максимальное количество спикеров (оставить пустым для автоопределения)
MAX_SPEAKERS=
# Тип вычислений (float16, float32, int8)
COMPUTE_TYPE=float16
# Метод VAD для обнаружения речи (pyannote, silero)
VAD_METHOD=pyannote
# Размер чанков в секундах
CHUNK_SIZE=30
EOF
success "Конфигурационный файл создан: $config_file"
fi
}
final_check() {
log "Выполнение финальной проверки установки..."
if ! command -v docker &>/dev/null; then error "Docker не найден!"; exit 1; fi
if ! sudo docker image inspect "ghcr.io/jim60105/whisperx:latest" &>/dev/null; then error "Образ WhisperX не найден!"; exit 1; fi
if ! [ -d "./audio" ]; then error "Рабочая директория не найдена!"; exit 1; fi
if ! [ -d "$HOME/whisperx" ]; then error "Директория кеша моделей не найдена!"; exit 1; fi
success "Все компоненты установлены и готовы к работе!"
}
show_usage() {
printf "\n=====================================================================\n"
printf "🎉 УСТАНОВКА ЗАВЕРШЕНА УСПЕШНО!\n"
printf "=====================================================================\n\n"
printf "🔥 ВАЖНЫЕ СЛЕДУЮЩИЕ ШАГИ:\n\n"
printf "1. 🔑 ${YELLOW}Отредактируйте токен Hugging Face${NC} для диаризации:\n"
printf " - Откройте файл: nano ./config.env\n"
printf " - Замените 'your_token_here' на ваш токен с https://huggingface.co/settings/tokens\n\n"
printf "2. 🔄 ${YELLOW}Перезагрузите систему${NC}, если вы не были в группе docker:\n"
printf " sudo reboot\n\n"
printf "После перезагрузки:\n"
printf "3. 📁 Скопируйте ваши аудиофайлы в ./audio/\n"
printf "4. 🚀 Запустите обработку: python3 whisperx_diarization.py\n\n"
printf "Рабочие директории:\n"
printf " 📂 ./audio - Входные файлы (*.wav, *.mp3, *.m4a)\n"
printf " 📂 ./results - Результаты распознавания\n"
printf " 🧠 ~/whisperx/ - Кеш моделей (общий для всех проектов)\n"
printf " ⚙️ ./config.env - Настройки\n\n"
printf "=====================================================================\n"
}
# --- Основная функция ---
main() {
printf "=====================================================================\n"
printf "🎙️ УСТАНОВКА WHISPERX ДЛЯ ДИАРИЗАЦИИ РЕЧИ (DOCKER + NVIDIA)\n"
printf "=====================================================================\n\n"
check_distro
check_gpu
install_docker
install_nvidia_toolkit
if test_docker_gpu; then
log "Тест GPU пройден. WhisperX будет использовать видеокарту."
else
warning "Тест GPU не пройден. Проверьте настройки в './config.env' и установите DEVICE=cpu, если GPU не заработает."
fi
pull_whisperx_image
setup_workspace
final_check
show_usage
}
# Запуск основной функции
main