FROM nvidia/cuda:12.1.1-devel-ubuntu22.04 # Configura las variables de entorno para CUDA (a nivel de sistema). ENV CUDA_HOME=/usr/local/cuda-12.1 ENV LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH ENV PATH=$CUDA_HOME/bin:$PATH # Define las arquitecturas CUDA para la compilación de kernels. ENV TORCH_CUDA_ARCH_LIST="7.0 7.5 8.0 8.6 8.9 9.0+PTX" # Instala las dependencias del sistema operativo necesarias como root. # Estas instalaciones no dependen del WORKDIR. RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ build-essential wget nano curl ninja-build unzip libgl-dev ffmpeg \ libgl1-mesa-glx libsm6 libxext6 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # --- Configuración de usuario no-root para seguridad y permisos --- # Crea un nuevo usuario llamado "user" con UID 1000 y su directorio home. RUN useradd -m -u 1000 user # Instala Miniconda en el directorio home del nuevo usuario. # Aseguramos que el script de instalación y el directorio de conda sean propiedad del usuario. ENV CONDA_DIR=/home/user/miniconda RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /home/user/miniconda.sh && \ chown user:user /home/user/miniconda.sh && \ /bin/bash /home/user/miniconda.sh -b -p $CONDA_DIR && \ rm /home/user/miniconda.sh && \ chown -R user:user $CONDA_DIR # Cambia al usuario no-root "user". Todas las instrucciones posteriores se ejecutarán como este usuario. USER user # Establece el directorio HOME y actualiza el PATH para el nuevo usuario. # Incluye variables de entorno específicas para Hugging Face Spaces y Gradio. ENV HOME=/home/user \ PATH=$CONDA_DIR/bin:$PATH \ PYTHONPATH=/home/user/app \ PYTHONUNBUFFERED=1 \ GRADIO_ALLOW_FLAGGING=never \ GRADIO_NUM_PORTS=1 \ GRADIO_SERVER_NAME=0.0.0.0 \ GRADIO_THEME=huggingface \ SYSTEM=spaces # Establece el directorio de trabajo final para la aplicación bajo el usuario. WORKDIR $HOME/app # Copia todo el código fuente de tu proyecto al directorio de trabajo del usuario, # asegurando que los archivos sean propiedad del usuario. COPY --chown=user . $HOME/app/ # Configura Conda para usar el solucionador libmamba, que es más rápido y robusto. RUN conda update -n base conda -y && \ conda install -n base conda-libmamba-solver -y && \ conda config --set solver libmamba # Crea el entorno Conda específico para EDGS con Python 3.10 y pip. RUN conda create -y -n edgs python=3.10 pip # Establece el SHELL por defecto para los comandos RUN, CMD, ENTRYPOINT para este usuario. SHELL ["conda", "run", "-n", "edgs", "/bin/bash", "-c"] # Instala PyTorch, torchvision y torchaudio con soporte CUDA 12.1. RUN conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia -y # Instala los paquetes que requieren compilación de extensiones CUDA en modo editable. RUN pip install -e submodules/gaussian-splatting/submodules/diff-gaussian-rasterization --no-build-isolation && \ pip install -e submodules/gaussian-splatting/submodules/simple-knn --no-build-isolation # Instala pycolmap, una librería Python para COLMAP. RUN pip install pycolmap # Instala otras dependencias de Python. RUN pip install wandb hydra-core tqdm torchmetrics lpips matplotlib rich plyfile imageio imageio-ffmpeg && \ conda install numpy=1.26.4 -y -c conda-forge --override-channels # Instala el módulo RoMa en modo editable. RUN pip install -e submodules/RoMa # Instala Jupyter y otras herramientas para interfaz de usuario y visualización. RUN pip install plotly scikit-learn moviepy==2.1.1 ffmpeg && \ pip install fastapi[standard] # Documenta el puerto que la aplicación expone. EXPOSE 7860 CMD ["/bin/bash", "-c", "source /home/user/miniconda/bin/activate edgs && exec uvicorn main:app --host 0.0.0.0 --port 7860"] #CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]