aducsdr commited on
Commit
42f4c11
·
verified ·
1 Parent(s): 31a6753

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -87
app.py CHANGED
@@ -1,87 +1,55 @@
1
- import gradio as gr
2
- import subprocess
3
- import os
4
-
5
- # Não precisamos mais de nenhuma função de setup, clone ou pip install aqui!
6
- # O Dockerfile cuidou de tudo.
7
-
8
- def run_inference_app(video_file, seed_num):
9
- if video_file is None:
10
- return None, "Por favor, envie um arquivo de vídeo."
11
-
12
- # O app roda de dentro do diretório /app/SeedVR, então os caminhos são relativos
13
- input_folder = "inputs"
14
- os.makedirs(input_folder, exist_ok=True)
15
-
16
- # O Gradio nos um caminho temporário, vamos movê-lo para um local conhecido
17
- input_video_path = os.path.join(input_folder, os.path.basename(video_file.name))
18
- os.rename(video_file.name, input_video_path)
19
-
20
- output_folder = "outputs"
21
- os.makedirs(output_folder, exist_ok=True)
22
-
23
- # Comando de inferência. O ambiente conda está "ativado" graças ao Dockerfile.
24
- command = [
25
- "torchrun", "--nproc-per-node=4",
26
- "projects/inference_seedvr2_3b.py",
27
- "--video_path", input_folder,
28
- "--output_dir", output_folder,
29
- "--seed", str(seed_num),
30
- "--res_h", "320",
31
- "--res_w", "512",
32
- ]
33
-
34
- log_output = "Iniciando a inferência...\n" + ' '.join(command) + "\n\n"
35
-
36
- try:
37
- process = subprocess.Popen(
38
- command,
39
- stdout=subprocess.PIPE,
40
- stderr=subprocess.STDOUT,
41
- text=True,
42
- encoding='utf-8'
43
- )
44
-
45
- while True:
46
- line = process.stdout.readline()
47
- if not line:
48
- break
49
- log_output += line
50
- print(line.strip())
51
- yield None, log_output
52
-
53
- process.wait()
54
-
55
- if process.returncode != 0:
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"]