Commit ·
a292ff4
1
Parent(s): 8f1ad8c
revert: to the 8b2e214
Browse files- Dockerfile +24 -57
- video_assembler.py +1 -1
Dockerfile
CHANGED
|
@@ -1,13 +1,13 @@
|
|
| 1 |
# ==============================
|
| 2 |
-
# Финальная, Проверенная Версия Dockerfile
|
| 3 |
# ==============================
|
|
|
|
| 4 |
FROM pytorch/pytorch:2.2.1-cuda12.1-cudnn8-devel
|
| 5 |
|
| 6 |
# ==============================
|
| 7 |
# Переменные окружения
|
| 8 |
# ==============================
|
| 9 |
-
ENV
|
| 10 |
-
PIP_CACHE_DIR=/data/.cache/pip \
|
| 11 |
HF_HOME=/data/.cache/huggingface \
|
| 12 |
OMP_NUM_THREADS=1 \
|
| 13 |
YOLO_CONFIG_DIR=/data/.cache/ultralytics \
|
|
@@ -16,86 +16,53 @@ ENV DEBIAN_FRONTEND=noninteractive \
|
|
| 16 |
FORCE_CUDA=1 \
|
| 17 |
PYTHONUNBUFFERED=1
|
| 18 |
|
| 19 |
-
# !!! Ключевое исправление для Runtime !!!
|
| 20 |
-
# Добавляем путь к библиотекам драйвера NVIDIA в LD_LIBRARY_PATH.
|
| 21 |
-
# Это позволит ffmpeg найти libnvidia-encode.so.1 во время выполнения.
|
| 22 |
-
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib64:${LD_LIBRARY_PATH}
|
| 23 |
-
|
| 24 |
# ==============================
|
| 25 |
-
#
|
| 26 |
# ==============================
|
| 27 |
-
# 1. Устанавливаем все зависимости для сборки
|
| 28 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
unzip \
|
| 35 |
-
wget \
|
| 36 |
-
git \
|
| 37 |
-
libgl1 \
|
| 38 |
-
libglib2.0-0 \
|
| 39 |
-
espeak-ng \
|
| 40 |
-
nasm \
|
| 41 |
-
libx264-dev \
|
| 42 |
-
libx265-dev \
|
| 43 |
-
libnuma-dev \
|
| 44 |
-
libvpx-dev \
|
| 45 |
-
libfdk-aac-dev \
|
| 46 |
-
libmp3lame-dev \
|
| 47 |
-
libopus-dev \
|
| 48 |
&& rm -rf /var/lib/apt/lists/*
|
| 49 |
|
| 50 |
-
# 2. Компилируем и устанавливаем FFmpeg в одном RUN-слое для надежности
|
| 51 |
-
RUN mkdir -p /tmp/ffmpeg_sources && \
|
| 52 |
-
cd /tmp/ffmpeg_sources && \
|
| 53 |
-
# Получаем новейшие заголовки из официального репозитория GitHub
|
| 54 |
-
git clone https://github.com/FFmpeg/nv-codec-headers.git && \
|
| 55 |
-
cd nv-codec-headers && make install && cd .. && \
|
| 56 |
-
# Получаем новейший стабильный исходный код FFmpeg
|
| 57 |
-
wget https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.bz2 && \
|
| 58 |
-
tar xjf ffmpeg-7.0.1.tar.bz2 && \
|
| 59 |
-
cd ffmpeg-7.0.1 && \
|
| 60 |
-
# Конфигурируем, собираем и устанавливаем
|
| 61 |
-
./configure \
|
| 62 |
-
--enable-gpl \
|
| 63 |
-
--enable-nonfree \
|
| 64 |
-
--enable-shared \
|
| 65 |
-
--enable-nvenc \
|
| 66 |
-
--enable-cuda-nvcc \
|
| 67 |
-
--enable-libnpp \
|
| 68 |
-
--extra-cflags="-I/usr/local/cuda/include" \
|
| 69 |
-
--extra-ldflags="-L/usr/local/cuda/lib64" && \
|
| 70 |
-
make -j$(nproc) && \
|
| 71 |
-
make install && \
|
| 72 |
-
ldconfig && \
|
| 73 |
-
# Очищаем временные файлы, чтобы уменьшить размер образа
|
| 74 |
-
cd / && rm -rf /tmp/ffmpeg_sources
|
| 75 |
-
|
| 76 |
# ==============================
|
| 77 |
# Установка Python зависимостей
|
| 78 |
# ==============================
|
| 79 |
WORKDIR /app
|
| 80 |
COPY requirements.txt .
|
| 81 |
|
|
|
|
| 82 |
RUN pip install --upgrade pip setuptools wheel && \
|
| 83 |
-
pip install --no-cache-dir "flash-attn==2.5.8" --no-build-isolation
|
| 84 |
-
|
|
|
|
|
|
|
| 85 |
|
| 86 |
# ==============================
|
| 87 |
# Копируем код и кэшируем модели
|
| 88 |
# ==============================
|
| 89 |
COPY . .
|
| 90 |
|
|
|
|
| 91 |
RUN useradd -m -u 1000 appuser && \
|
| 92 |
mkdir -p /data/.cache && \
|
| 93 |
chown -R appuser:appuser /app /data
|
| 94 |
|
|
|
|
| 95 |
USER appuser
|
| 96 |
|
| 97 |
# --- Кэшируем модели от имени appuser ---
|
|
|
|
| 98 |
RUN iopaint download --model lama
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
RUN echo "y" | python -c "from TTS.utils.manage import ModelManager; mm = ModelManager(); mm.download_model('tts_models/multilingual/multi-dataset/xtts_v2')"
|
| 100 |
|
| 101 |
# ==============================
|
|
|
|
| 1 |
# ==============================
|
| 2 |
+
# Финальная, Проверенная Версия Dockerfile
|
| 3 |
# ==============================
|
| 4 |
+
|
| 5 |
FROM pytorch/pytorch:2.2.1-cuda12.1-cudnn8-devel
|
| 6 |
|
| 7 |
# ==============================
|
| 8 |
# Переменные окружения
|
| 9 |
# ==============================
|
| 10 |
+
ENV PIP_CACHE_DIR=/data/.cache/pip \
|
|
|
|
| 11 |
HF_HOME=/data/.cache/huggingface \
|
| 12 |
OMP_NUM_THREADS=1 \
|
| 13 |
YOLO_CONFIG_DIR=/data/.cache/ultralytics \
|
|
|
|
| 16 |
FORCE_CUDA=1 \
|
| 17 |
PYTHONUNBUFFERED=1
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
# ==============================
|
| 20 |
+
# Системные зависимости
|
| 21 |
# ==============================
|
|
|
|
| 22 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
| 23 |
+
git \
|
| 24 |
+
libgl1 \
|
| 25 |
+
libglib2.0-0 \
|
| 26 |
+
espeak-ng \
|
| 27 |
+
build-essential \
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
&& rm -rf /var/lib/apt/lists/*
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
# ==============================
|
| 31 |
# Установка Python зависимостей
|
| 32 |
# ==============================
|
| 33 |
WORKDIR /app
|
| 34 |
COPY requirements.txt .
|
| 35 |
|
| 36 |
+
# Обновляем pip и ставим flash-attn отдельно, так как он требует сборки
|
| 37 |
RUN pip install --upgrade pip setuptools wheel && \
|
| 38 |
+
pip install --no-cache-dir "flash-attn==2.5.8" --no-build-isolation
|
| 39 |
+
|
| 40 |
+
# Ставим все остальные зависимости из нашего "железобетонного" списка
|
| 41 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 42 |
|
| 43 |
# ==============================
|
| 44 |
# Копируем код и кэшируем модели
|
| 45 |
# ==============================
|
| 46 |
COPY . .
|
| 47 |
|
| 48 |
+
# Создаем пользователя ДО кэширования, чтобы кэш принадлежал ему
|
| 49 |
RUN useradd -m -u 1000 appuser && \
|
| 50 |
mkdir -p /data/.cache && \
|
| 51 |
chown -R appuser:appuser /app /data
|
| 52 |
|
| 53 |
+
# Переключаемся на non-root пользователя
|
| 54 |
USER appuser
|
| 55 |
|
| 56 |
# --- Кэшируем модели от имени appuser ---
|
| 57 |
+
# iopaint Lama
|
| 58 |
RUN iopaint download --model lama
|
| 59 |
+
|
| 60 |
+
# Coqui TTS XTTS-v2
|
| 61 |
+
# Мы скачиваем модель в режиме CPU (gpu=False), чтобы избежать ошибки AssertionError
|
| 62 |
+
# во время сборки. В рантайме модель все равно будет подхвачена на GPU,
|
| 63 |
+
# так как в logic.py мы передаем gpu=(self.device == "cuda").
|
| 64 |
+
# Используем ModelManager для того, чтобы ТОЛЬКО скачать файлы, не загружая их в память.
|
| 65 |
+
# Это предотвратит OOM Killer во время сборки.
|
| 66 |
RUN echo "y" | python -c "from TTS.utils.manage import ModelManager; mm = ModelManager(); mm.download_model('tts_models/multilingual/multi-dataset/xtts_v2')"
|
| 67 |
|
| 68 |
# ==============================
|
video_assembler.py
CHANGED
|
@@ -95,7 +95,7 @@ def assemble_video_with_narration(image_contents: list, audio_chunks: list, outp
|
|
| 95 |
final_video.write_videofile(
|
| 96 |
output_path,
|
| 97 |
fps=24,
|
| 98 |
-
codec="
|
| 99 |
audio_codec="aac",
|
| 100 |
temp_audiofile="temp-audio.m4a",
|
| 101 |
remove_temp=True,
|
|
|
|
| 95 |
final_video.write_videofile(
|
| 96 |
output_path,
|
| 97 |
fps=24,
|
| 98 |
+
codec="libx264",
|
| 99 |
audio_codec="aac",
|
| 100 |
temp_audiofile="temp-audio.m4a",
|
| 101 |
remove_temp=True,
|