diff --git a/Dockerfile b/Dockerfile index dee6264..e7c6094 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,14 @@ FROM nvidia/cuda:13.2.1-cudnn-devel-ubuntu24.04 ENV DEBIAN_FRONTEND=noninteractive + +# "Unminify" RUN rm -f /etc/dpkg/dpkg.cfg.d/excludes && \ rm -f /etc/apt/apt.conf.d/docker-clean && \ rm -f /etc/apt/apt.conf.d/01-nodoc && \ rm -f /usr/bin/man && \ dpkg-divert --quiet --remove /usr/bin/man +# Install packages RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt update && apt-get dist-upgrade --autoremove -y && apt-get install -y \ @@ -21,15 +24,23 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ git \ cmake -RUN python3 -m venv /root/venv -ENV PATH="/root/venv/bin:${PATH}" +# Set up nvfp4 python virtual environment +WORKDIR /opt/nvfp4 +RUN python3 -m venv /opt/nvfp4/py-venv +ENV PATH="/opt/nvfp4/py-venv/bin:${PATH}" RUN --mount=type=cache,target=/root/.cache/pip,sharing=locked pip3 install torch torchvision torchaudio --upgrade --index-url \ https://download.pytorch.org/whl/cu132/ -WORKDIR /root -RUN mkdir llama.cpp -COPY --exclude=build/ llama.cpp ./llama.cpp/ -WORKDIR /root/llama.cpp + +# Fetch convert_to_quant, and install it into our python venv. +WORKDIR /opt/nvfp4 +RUN git clone --depth=1 https://github.com/silveroxides/convert_to_quant && cd convert_to_quant && rm -rf .git && pip3 install -r requirements.txt && pip3 install . + +# Clone and compile llama.cpp (save some space by removing unneeded .git data) +RUN git clone --depth=1 https://github.com/ggml-org/llama.cpp && rm -rf llama.cpp/.git +WORKDIR /opt/nvfp4/llama.cpp + +# Build llama.cpp, the ldconfig is important RUN echo "/usr/local/cuda-13.2/compat" > /etc/ld.so.conf.d/988-cuda-compat.conf && ldconfig RUN cmake -B build -S . \ -DCMAKE_BUILD_TYPE=Release \ @@ -41,22 +52,23 @@ RUN cmake -B build -S . \ && cmake --build build --target install \ && rm -rf build -WORKDIR /root -RUN git clone https://github.com/silveroxides/convert_to_quant && cd convert_to_quant && pip3 install -r requirements.txt && pip3 install . - +# Copy and install zefie's nvfp4 quant scripts RUN mkdir nvfp4_gguf_quant -WORKDIR /root/nvfp4_gguf_quant +WORKDIR /opt/nvfp4/nvfp4_gguf_quant COPY --exclude=__pycache__ nvfp4gguf ./nvfp4gguf COPY --chmod=0644 gguf_to_nvfp4_gguf.py hf_to_nvfp4_gguf.py hf_to_nvfp4_safetensors.py requirements.txt safetensors_to_nvfp4_gguf.py hf_info.py gguf_info.py . +# Install requirements for zefie's nvfp4 quant scripts RUN --mount=type=cache,target=/root/.cache/pip,sharing=locked pip3 install -r requirements.txt COPY --chmod=0644 docker/README.txt /workspace/README.txt COPY --chmod=0755 docker/hf_info docker/gguf_info docker/hf_to_nvfp4_gguf docker/hf_to_nvfp4_safetensors docker/gguf_to_nvfp4_gguf docker/safetensors_to_nvfp4_gguf /usr/local/bin/ +# Install manpages for zefie's nvfp4 quant scripts, ctq, and heretic RUN mkdir -p /usr/local/share/man/man1 COPY --chmod=0644 man/man1/* /usr/local/share/man/man1/ - RUN --mount=type=cache,target=/root/.cache/pip,sharing=locked pip3 install heretic-llm +# Finalize and settle at /workspace +ENV DEBIAN_FRONTEND= WORKDIR /workspace - +ENTRYPOINT [] diff --git a/docker/gguf_info b/docker/gguf_info index 8e0b64b..f2350e5 100755 --- a/docker/gguf_info +++ b/docker/gguf_info @@ -1,2 +1,2 @@ #!/bin/bash -python /root/nvfp4_gguf_quant/gguf_info.py "${@}" +python /opt/nvfp4/nvfp4_gguf_quant/gguf_info.py "${@}" diff --git a/docker/gguf_to_nvfp4_gguf b/docker/gguf_to_nvfp4_gguf index d3495a4..75b001e 100755 --- a/docker/gguf_to_nvfp4_gguf +++ b/docker/gguf_to_nvfp4_gguf @@ -1,2 +1,2 @@ #!/bin/bash -python /root/nvfp4_gguf_quant/gguf_to_nvfp4_gguf.py --llama-cpp /root/llama.cpp "${@}" +python /opt/nvfp4/nvfp4_gguf_quant/gguf_to_nvfp4_gguf.py --llama-cpp /opt/nvfp4/llama.cpp "${@}" diff --git a/docker/hf_info b/docker/hf_info index 0f030ab..8b4316c 100755 --- a/docker/hf_info +++ b/docker/hf_info @@ -1,2 +1,2 @@ #!/bin/bash -python /root/nvfp4_gguf_quant/hf_info.py "${@}" +python /opt/nvfp4/nvfp4_gguf_quant/hf_info.py "${@}" diff --git a/docker/hf_to_nvfp4_gguf b/docker/hf_to_nvfp4_gguf index c6ca43e..e7c9097 100755 --- a/docker/hf_to_nvfp4_gguf +++ b/docker/hf_to_nvfp4_gguf @@ -1,2 +1,2 @@ #!/bin/bash -python /root/nvfp4_gguf_quant/hf_to_nvfp4_gguf.py --llama-cpp /root/llama.cpp "${@}" +python /opt/nvfp4/nvfp4_gguf_quant/hf_to_nvfp4_gguf.py --llama-cpp /opt/nvfp4/llama.cpp "${@}" diff --git a/docker/hf_to_nvfp4_safetensors b/docker/hf_to_nvfp4_safetensors index 7db788f..803a0db 100755 --- a/docker/hf_to_nvfp4_safetensors +++ b/docker/hf_to_nvfp4_safetensors @@ -1,2 +1,2 @@ #!/bin/bash -python /root/nvfp4_gguf_quant/hf_to_nvfp4_safetensors.py --convert-to-quant /root/convert_to_quant "${@}" +python /opt/nvfp4/nvfp4_gguf_quant/hf_to_nvfp4_safetensors.py --convert-to-quant /opt/nvfp4/convert_to_quant "${@}" diff --git a/docker/safetensors_to_nvfp4_gguf b/docker/safetensors_to_nvfp4_gguf index 67e4326..6ec1587 100755 --- a/docker/safetensors_to_nvfp4_gguf +++ b/docker/safetensors_to_nvfp4_gguf @@ -1,2 +1,2 @@ #!/bin/bash -python /root/nvfp4_gguf_quant/safetensors_to_nvfp4_gguf.py --llama-cpp /root/llama.cpp "${@}" +python /opt/nvfp4/nvfp4_gguf_quant/safetensors_to_nvfp4_gguf.py --llama-cpp /opt/nvfp4/llama.cpp "${@}"