# Stage 1: Build Cuda toolkit FROM ubuntu:22.04 as cuda-setup ARG DEBIAN_FRONTEND=noninteractive # Install necessary libraries including libxml2 RUN apt-get update && \ apt-get install -y gcc libxml2 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* COPY cuda_12.4.0_550.54.14_linux.run . # Install wget, download cuda-toolkit and run RUN chmod +x cuda_12.4.0_550.54.14_linux.run && \ ./cuda_12.4.0_550.54.14_linux.run --silent --toolkit --override # Second Stage: Copy necessary CUDA directories install flash-attn FROM ubuntu:22.04 as base-layer # Copy the CUDA toolkit from the first stage COPY --from=cuda-setup /usr/local/cuda-12.4 /usr/local/cuda-12.4 # Set environment variables to enable CUDA commands ENV PATH=/usr/local/cuda-12.4/bin:${PATH} ENV LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:${LD_LIBRARY_PATH} # Install Python, pip, and virtualenv RUN apt-get update && \ apt-get install -y python3 python3-pip python3-venv git && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Create a virtual environment and install dependencies RUN python3 -m venv /venv ENV PATH="/venv/bin:$PATH" FROM ubuntu:22.04 as cuda-setup ARG DEBIAN_FRONTEND=noninteractive # Install necessary libraries including libxml2 RUN apt-get update && \ apt-get install -y gcc libxml2 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* COPY cuda_12.4.0_550.54.14_linux.run . # Install wget, download cuda-toolkit and run RUN chmod +x cuda_12.4.0_550.54.14_linux.run && \ ./cuda_12.4.0_550.54.14_linux.run --silent --toolkit --override # Second Stage: Copy necessary CUDA directories install flash-attn FROM ubuntu:22.04 as base-layer # Copy the CUDA toolkit from the first stage COPY --from=cuda-setup /usr/local/cuda-12.4 /usr/local/cuda-12.4 # Set environment variables to enable CUDA commands ENV PATH=/usr/local/cuda-12.4/bin:${PATH} ENV LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:${LD_LIBRARY_PATH} # Install Python, pip, and virtualenv RUN apt-get update && \ apt-get install -y python3 python3-pip python3-venv git && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Create a virtual environment and install dependencies RUN python3 -m venv /venv ENV PATH="/venv/bin:$PATH" # Llama.cpp requires the ENV variable be set to signal the CUDA build and be built with the CMAKE variables from pip for python use ENV LLAMA_CUBLAS=1 RUN pip install --no-cache-dir torch packaging wheel && \ pip install flash-attn && \ RUN pip install --no-cache-dir torch packaging wheel && \ pip install flash-attn && \ pip install gradio && \ CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama_cpp_python==0.2.55 && \ CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama_cpp_python==0.2.55 && \ pip install pillow && \ pip install diffusers && \ pip install accelerate && \ pip install transformers && \ pip install peft && \ pip install pip install PyGithub FROM ubuntu:22.04 as final-layer COPY --from=base-layer /usr/local/cuda-12.4 /usr/local/cuda-12.4 COPY --from=base-layer /venv /venv ENV PATH=/usr/local/cuda-12.4/bin:/venv/bin:${PATH} ENV LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:${LD_LIBRARY_PATH} ENV LLAMA_CPP_LIB=/venv/lib/python3.10/site-packages/llama_cpp/libllama.so ENV VIRTUAL_ENV=/venv # Install Python and create a user RUN apt-get update && apt-get install -y python3 python3-venv && apt-get clean && rm -rf /var/lib/apt/lists/* && \ useradd -m -u 1000 user # Install Python and create a user RUN apt-get update && apt-get install -y python3 python3-venv && apt-get clean && rm -rf /var/lib/apt/lists/* && \ useradd -m -u 1000 user ENV PATH="$VIRTUAL_ENV/bin:$PATH" # Set working directory and user COPY . /home/user/app # Set working directory and user COPY . /home/user/app WORKDIR /home/user/app RUN chown -R user:user /home/user/app/ && \ mkdir -p /home/user/app/output && \ chown -R user:user /home/user/app/image_temp && \ chown -R user:user /home/user/app/output USER user # Set the entrypoint EXPOSE 8000 ENTRYPOINT ["python", "main.py"]