Update app.py
Browse files
app.py
CHANGED
|
@@ -1,87 +1,55 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
#
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
raise RuntimeError("O script de inferência falhou. Verifique os logs.")
|
| 57 |
-
|
| 58 |
-
result_files = [os.path.join(output_folder, f) for f in os.listdir(output_folder) if f.endswith('.mp4')]
|
| 59 |
-
if not result_files:
|
| 60 |
-
return None, log_output + "\n\nERRO: Nenhum vídeo foi gerado."
|
| 61 |
-
|
| 62 |
-
return result_files, log_output + "\n\nInferência concluída com sucesso!"
|
| 63 |
-
|
| 64 |
-
except Exception as e:
|
| 65 |
-
error_message = f"{log_output}\n\nOcorreu um erro: {str(e)}"
|
| 66 |
-
return None, error_message
|
| 67 |
-
|
| 68 |
-
with gr.Blocks() as demo:
|
| 69 |
-
gr.Markdown("# 🚀 Inferência SeedVR2 com Ambiente Conda")
|
| 70 |
-
gr.Markdown("Este ambiente foi construído com Conda usando um Dockerfile para máxima estabilidade.")
|
| 71 |
-
|
| 72 |
-
with gr.Row():
|
| 73 |
-
with gr.Column(scale=1):
|
| 74 |
-
video_input = gr.File(label="Vídeo de Entrada")
|
| 75 |
-
seed_input = gr.Number(label="Seed", value=123)
|
| 76 |
-
run_button = gr.Button("Gerar Vídeo", variant="primary")
|
| 77 |
-
with gr.Column(scale=2):
|
| 78 |
-
gallery_output = gr.Gallery(label="Vídeo de Saída", show_label=True)
|
| 79 |
-
log_display = gr.Textbox(label="Logs de Execução", lines=15, interactive=False, autoscroll=True)
|
| 80 |
-
|
| 81 |
-
run_button.click(
|
| 82 |
-
fn=run_inference_app,
|
| 83 |
-
inputs=[video_input, seed_input],
|
| 84 |
-
outputs=[gallery_output, log_display]
|
| 85 |
-
)
|
| 86 |
-
|
| 87 |
-
demo.launch()
|
|
|
|
| 1 |
+
# Dockerfile (VERSÃO FINAL CORRIGIDA)
|
| 2 |
+
|
| 3 |
+
# 1. COMEÇAR COM A BASE CORRETA: Uma imagem oficial da NVIDIA com CUDA 12.1.1 e as ferramentas de desenvolvimento (devel)
|
| 4 |
+
FROM nvidia/cuda:12.1.1-devel-ubuntu22.04
|
| 5 |
+
|
| 6 |
+
# 2. INSTALAR DEPENDÊNCIAS DO SISTEMA
|
| 7 |
+
# Precisamos de wget para baixar o miniconda e git para clonar o repositório.
|
| 8 |
+
# DEBIAN_FRONTEND=noninteractive evita que a instalação peça inputs.
|
| 9 |
+
ENV DEBIAN_FRONTEND=noninteractive
|
| 10 |
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
| 11 |
+
wget \
|
| 12 |
+
git \
|
| 13 |
+
&& apt-get clean \
|
| 14 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 15 |
+
|
| 16 |
+
# 3. INSTALAR O MINICONDA SOBRE A IMAGEM NVIDIA
|
| 17 |
+
# Baixamos o instalador, executamos em modo silencioso (-b) no diretório /opt/conda (-p)
|
| 18 |
+
# e depois limpamos o instalador.
|
| 19 |
+
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
|
| 20 |
+
/bin/bash ~/miniconda.sh -b -p /opt/conda && \
|
| 21 |
+
rm ~/miniconda.sh
|
| 22 |
+
|
| 23 |
+
# 4. ADICIONAR CONDA AO PATH DO SISTEMA
|
| 24 |
+
# Isso garante que os comandos 'conda' e 'pip' usarão a instalação que acabamos de fazer.
|
| 25 |
+
ENV PATH /opt/conda/bin:$PATH
|
| 26 |
+
|
| 27 |
+
# 5. CRIAR O AMBIENTE CONDA A PARTIR DO NOSSO ARQUIVO
|
| 28 |
+
# Copiamos o environment.yml e deixamos o conda instalar as dependências principais.
|
| 29 |
+
COPY environment.yml .
|
| 30 |
+
RUN conda env create -f environment.yml
|
| 31 |
+
|
| 32 |
+
# 6. INSTALAR FLASH_ATTN DENTRO DO AMBIENTE
|
| 33 |
+
# Agora este comando vai funcionar, pois nvcc e CUDA_HOME estão presentes na imagem base.
|
| 34 |
+
# 'conda run -n seedvr ...' executa o comando dentro do nosso ambiente específico.
|
| 35 |
+
RUN conda run -n seedvr pip install "flash_attn==2.5.9.post1" --no-build-isolation
|
| 36 |
+
|
| 37 |
+
# 7. DEFINIR O AMBIENTE CONDA COMO PADRÃO PARA O RESTO DO DOCKERFILE
|
| 38 |
+
# Esta é a linha corrigida, em formato JSON válido e completo.
|
| 39 |
+
SHELL ["conda", "run", "-n", "seedvr", "/bin/bash", "-c"]
|
| 40 |
+
|
| 41 |
+
# 8. PREPARAR O APLICATIVO
|
| 42 |
+
WORKDIR /app
|
| 43 |
+
RUN git clone https://github.com/bytedance-seed/SeedVR.git
|
| 44 |
+
WORKDIR /app/SeedVR
|
| 45 |
+
|
| 46 |
+
# 9. BAIXAR O MODELO DURANTE A CONSTRUÇÃO
|
| 47 |
+
# O comando huggingface-cli já está disponível no ambiente conda.
|
| 48 |
+
RUN huggingface-cli download ByteDance-Seed/SeedVR2-3B --local-dir ckpts --local-dir-use-symlinks False
|
| 49 |
+
|
| 50 |
+
# 10. COPIAR O CÓDIGO DO NOSSO APP
|
| 51 |
+
COPY app.py .
|
| 52 |
+
|
| 53 |
+
# 11. DEFINIR O COMANDO DE EXECUÇÃO
|
| 54 |
+
# O comando 'python' já será o do ambiente 'seedvr'.
|
| 55 |
+
CMD ["python", "app.py"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|