dgx-spark-playbooks/nvidia/vlm-finetuning/assets/Dockerfile
2025-10-06 19:24:34 +00:00

184 lines
6.5 KiB
Docker

#
# SPDX-FileCopyrightText: Copyright (c) 1993-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Dockerfile stage to build GPU-accelerated ffmpeg
FROM nvcr.io/nvidia/pytorch:25.09-py3 AS ffmpeg-builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
yasm \
libx264-dev \
libfaac-dev \
libmp3lame-dev \
libtheora-dev \
libvorbis-dev \
libxvidcore-dev \
libxext-dev \
libxfixes-dev \
build-essential \
git \
pkg-config && \
apt-get update && \
apt-get install -y --no-install-recommends gcc-11 g++-11
ENV PATH=/usr/local/cuda/bin:${PATH} \
CUDA_HOME=/usr/local/cuda \
NVCC=/usr/local/cuda/bin/nvcc \
CC=/usr/bin/gcc-11 \
CXX=/usr/bin/g++-11 \
CUDAHOSTCXX=/usr/bin/g++-11 \
FFMPEG_VERSION=4.4.6 \
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
RUN mkdir -p /deps && \
cd /deps && \
wget -q https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz && \
tar -xf ffmpeg-${FFMPEG_VERSION}.tar.xz && \
rm ffmpeg-${FFMPEG_VERSION}.tar.xz && \
cd /deps/ffmpeg-${FFMPEG_VERSION} && \
apt-get update && \
apt-get install -y libdrm-dev && \
./configure \
--prefix=/usr/local \
--enable-nonfree \
--enable-shared \
--disable-static \
--enable-libdrm \
--enable-v4l2-m2m \
--enable-gpl \
--enable-libx264 \
--extra-cflags="-I/usr/include/aarch64-linux-gnu" \
--extra-ldflags="-L/usr/lib/aarch64-linux-gnu/tegra" \
--nvccflags="-ccbin=/usr/bin/g++-11" \
|| (echo "---- tail ffbuild/config.log ----" && tail -n 200 ffbuild/config.log && exit 1) && \
make -j"$(nproc)" && \
make install && \
ldconfig && \
echo "✅ FFmpeg installed:" && \
ffmpeg -hide_banner -version | head -n 8 && \
rm -rf /var/lib/apt/lists/*
# Dockerfile stage to compile decord from source
FROM nvcr.io/nvidia/pytorch:25.09-py3 AS decord-builder
COPY --from=ffmpeg-builder /usr/local /usr/local
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
git \
cmake \
ninja-build \
pkg-config \
python3-dev \
python3-pip \
gcc-11 \
g++-11 \
&& rm -rf /var/lib/apt/lists/*
ENV CC=/usr/bin/gcc-11 \
CXX=/usr/bin/g++-11 \
PATH=/usr/local/bin:/lib/aarch64-linux-gnu:${PATH} \
LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/:/lib/aarch64-linux-gnu/:/usr/local/lib:/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} \
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}
RUN ln -sf /usr/lib/aarch64-linux-gnu/libnvcuvid.so.1 /usr/lib/aarch64-linux-gnu/libnvcuvid.so && \
cp /usr/lib/aarch64-linux-gnu/libnvcuvid.so* /usr/local/cuda/lib64/ || true && \
ln -sf /usr/lib/aarch64-linux-gnu/libnvcuvid.so.1 /usr/local/cuda/lib64/libnvcuvid.so && \
echo "/usr/lib/aarch64-linux-gnu" > /etc/ld.so.conf.d/nvidia.conf && \
ldconfig && \
python3 -m pip install --no-cache-dir --upgrade pip wheel build numpy && \
python3 -m pip install --no-cache-dir --upgrade pip ninja && \
apt-get update && \
apt-get install -y --no-install-recommends libnvidia-decode-575 libnvidia-encode-575
RUN cd /workspace && \
git clone --recursive https://github.com/dmlc/decord && \
cmake -S /workspace/decord -B /workspace/decord/build \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_CUDA=ON \
-DCMAKE_CUDA_HOST_COMPILER=/usr/bin/g++-11 \
-DCMAKE_C_COMPILER=/usr/bin/gcc-11 \
-DCMAKE_CXX_COMPILER=/usr/bin/g++-11 \
-DFFMPEG_ROOT=/usr/local \
-DUSE_VIDEO_CODEC=OFF && \
cd /workspace/decord/build && \
ninja -j"$(nproc)" && \
cd /workspace/decord/python && \
python3 -m pip install --no-cache-dir --upgrade pip setuptools wheel build && \
python3 -m build --wheel
# Dockerfile for demo
FROM nvcr.io/nvidia/pytorch:25.09-py3
COPY --from=ffmpeg-builder /usr/local /usr/local
COPY --from=decord-builder /workspace/decord/python/dist/*.whl /tmp/wheels/
ARG HF_TOKEN
RUN pip install --no-cache-dir /tmp/wheels/*.whl && \
rm -rf /tmp/wheels && \
apt-get update && \
apt-get install -y libdrm2 libdrm-dev libx264-dev && \
pip install streamlit timm wandb && \
hf auth login --token $HF_TOKEN
# Set CUDA environment variables
ENV CUDA_HOME=/usr/local/cuda-13.0/
ENV CUDA_PATH=$CUDA_HOME
ENV PATH=$CUDA_HOME/bin:$PATH
ENV LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
ENV C_INCLUDE_PATH=$CUDA_HOME/include:$C_INCLUDE_PATH
ENV CPLUS_INCLUDE_PATH=$CUDA_HOME/include:$CPLUS_INCLUDE_PATH
# install triton from source for latest blackwell support
RUN git clone https://github.com/triton-lang/triton.git && \
cd triton && \
git checkout c5d671f91d90f40900027382f98b17a3e04045f6 && \
pip install -r python/requirements.txt && \
pip install . && \
cd ..
# install xformers from source for blackwell support
RUN git clone https://github.com/facebookresearch/xformers && \
cd xformers && \
git checkout 5146f2ab37b2163985c19fb4e8fbf6183e82f8ce && \
git submodule update --init --recursive && \
export TORCH_CUDA_ARCH_LIST="12.1" && \
python setup.py install && \
cd ..
# install unsloth without depedencies so we can build them from source
RUN pip install unsloth==2025.9.11 unsloth_zoo==2025.9.14 bitsandbytes==0.48.0
CMD ["/bin/bash"]
# docker run \
# --rm \
# --gpus=all \
# --ipc=host \
# --net=host \
# --ulimit memlock=-1 \
# --ulimit stack=67108864 \
# -w $(pwd) \
# -v $(pwd):$(pwd) \
# -v $HOME/.cache/huggingface:/root/.cache/huggingface \
# nvcr.io/nvidia/vllm:25.09-py3 \
# vllm serve "unsloth/Qwen2.5-VL-7B-Instruct" --port "8000" --served-model-name "base-model" --max-model-len 16384 --gpu-memory-utilization 0.3 --async-scheduling --enable_prefix_caching