FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime # Set environment variables ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV HF_HOME=/app/.cache/huggingface ENV TRANSFORMERS_CACHE=/app/.cache/huggingface/transformers ENV PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 # Create necessary directories with proper permissions RUN mkdir -p /app/.cache/huggingface/transformers && \ chmod -R 777 /app # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ git \ curl \ ca-certificates \ python3-pip \ python3-dev \ && rm -rf /var/lib/apt/lists/* # Create a working directory WORKDIR /app # Create and install requirements RUN echo "transformers==4.37.2\n\ accelerate==0.30.0\n\ safetensors==0.4.1\n\ einops\n\ gradio==3.38.0\n\ numpy\n\ Pillow\n\ torch>=2.0.0\n\ sentencepiece\n\ timm==0.9.2" > requirements.txt # Install Python dependencies RUN pip3 install --no-cache-dir --upgrade pip && \ pip3 install --no-cache-dir -r requirements.txt # Copy the application file COPY app.py /app/app.py # Add diagnostic script for startup RUN echo '#!/bin/bash \n\ echo "Starting diagnostics..." \n\ echo "===== System Information =====" \n\ python3 -c "import sys; print(f\"Python version: {sys.version}\")" \n\ python3 -c "import torch; print(f\"PyTorch version: {torch.__version__}\")" \n\ echo "\n===== CUDA Information =====" \n\ python3 -c "import torch; print(f\"CUDA available: {torch.cuda.is_available()}\")" \n\ if [ $(python3 -c "import torch; print(torch.cuda.is_available())") = "True" ]; then \n\ python3 -c "import torch; print(f\"CUDA version: {torch.version.cuda}\")" \n\ python3 -c "import torch; print(f\"GPU count: {torch.cuda.device_count()}\")" \n\ python3 -c "import torch; for i in range(torch.cuda.device_count()): print(f\"GPU {i}: {torch.cuda.get_device_name(i)}\")" \n\ python3 -c "import torch; print(f\"Total GPU memory: {torch.cuda.get_device_properties(0).total_memory / 1024 / 1024 / 1024:.2f} GB\")" \n\ fi \n\ echo "\n===== Package Information =====" \n\ pip3 list | grep -E "transformers|einops|torch|sentencepiece|timm|gradio" \n\ echo "\n===== Starting Application =====" \n\ exec "$@"' > /entrypoint.sh && \ chmod +x /entrypoint.sh # Expose port 7860 for Gradio EXPOSE 7860 # Use entrypoint script ENTRYPOINT ["/entrypoint.sh"] # Start the application CMD ["python3", "app.py"]