mirror of
https://github.com/NVIDIA/dgx-spark-playbooks.git
synced 2026-04-23 02:23:53 +00:00
184 lines
6.5 KiB
Docker
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 |