vkgs-sim / docker /Dockerfile
kimjunhan's picture
Add files using upload-large-folder tool
4c75661 verified
Raw History Blame Contribute Delete
8.2 kB
# syntax=docker/dockerfile:1.7-labs
# ---------------------------------------------------------------------------
# vkgs-sim ๊ฐœ๋ฐœ ์ด๋ฏธ์ง€ โ€” ๋กœ์ปฌ micromamba ํ™˜๊ฒฝ `vkgs` ๋ฅผ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธด ๊ฒƒ
#
# ๋กœ์ปฌ ๊ฐœ๋ฐœ(scripts/local_setup.sh)๊ณผ ๊ฐ™์€ ์Šคํƒ์„ ๊ฐ™์€ ๋ฒ„์ „์œผ๋กœ ๋„ฃ๋Š”๋‹ค:
# conda docker/conda-lock.txt (micromamba env export -n vkgs --explicit)
# gcc 12 ยท CUDA 12.1 nvcc ยท Vulkan ๋กœ๋”/ํ—ค๋” ยท glslc ยท cmake ยท Tracy ์˜์กด์„ฑ
# pip torch 2.4.1+cu121 ยท gsplat 1.4.0 ยท docker/requirements.lock.txt (pip freeze)
# ์ž ๊ธˆ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋ฝ‘๋Š” ๋ฒ•์€ docker/README.md.
#
# ์ €์žฅ์†Œ ์ „์ฒด(์†Œ์Šค ยท ์„ค์ • ยท third_party ยท assets ยท docs ยท cache ยท outputs)๋ฅผ ์‹ค์ œ ํŒŒ์ผ๋กœ ๋‹ด๋Š”๋‹ค โ€” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š”
# ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ tar -h ๋กœ ๋„˜๊ฒจ ์›๋ณธ ํŒŒ์ผ๋กœ ํ’€์–ด ๋„ฃ๋Š”๋‹ค (docker/build_image.sh). ๊ฒฝ๋กœ๋Š” ํ˜ธ์ŠคํŠธ์™€ ๊ฐ™์€
# /home/mm/Downloads/vkgs-sim โ€” outputs/ ์˜ segments.txt ๋“ฑ์ด ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
# nuScenes ์›๋ณธ(67 TB NFS)์€ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค โ€” ์‹คํ–‰ ๋•Œ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธ (docker/README.md).
# ํ˜ธ์ŠคํŠธ: Ubuntu 20.04 / NVIDIA 535 (์ตœ๋Œ€ CUDA 12.2) / RTX 3060 Ti (sm_86).
# ---------------------------------------------------------------------------
FROM nvidia/cuda:12.1.1-base-ubuntu22.04
ARG CUDA_ARCH="8.6"
ARG USERNAME=dev
ARG UID=1000
ARG GID=1000
ENV DEBIAN_FRONTEND=noninteractive \
TZ=Asia/Seoul \
LANG=C.UTF-8 \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
MAMBA_ROOT_PREFIX=/opt/conda \
TORCH_CUDA_ARCH_LIST=${CUDA_ARCH}
# Vulkan ์€ graphics,display ๊ฐ€ ์žˆ์–ด์•ผ ์ปจํ…Œ์ด๋„ˆ์— NVIDIA ICD ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค (์—†์œผ๋ฉด ์žฅ์น˜ 0๊ฐœ).
ENV NVIDIA_VISIBLE_DEVICES=all \
NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics,display
# --------------------------------------------------------------- 1. ์‹œ์Šคํ…œ (์ตœ์†Œ)
# ์ปดํŒŒ์ผ๋ŸฌยทCUDAยทVulkan ์€ ์ „๋ถ€ conda ๊ฐ€ ๋„ฃ๋Š”๋‹ค. ์—ฌ๊ธฐ๋Š” conda ๊ฐ€ ๋ชป ์ฃผ๋Š” ๊ฒƒ๊ณผ ์…ธ ๋„๊ตฌ๋งŒ.
# libegl1 ยท libgl1 ยท libx11-6 ๋“ฑ์€ NVIDIA ๋“œ๋ผ์ด๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์ปจํ…Œ์ด๋„ˆ ํˆดํ‚ท์ด ์ฃผ์ž…)๊ฐ€ ๋งํฌํ•œ๋‹ค.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
rm -f /etc/apt/apt.conf.d/docker-clean && \
apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl bzip2 git git-lfs sudo locales tzdata \
less vim tmux htop tree jq rsync \
libegl1 libgl1 libglvnd0 libx11-6 libxext6 libxrandr2 libxinerama1 libxcursor1 libxi6 \
libxkbcommon0 libxkbcommon-x11-0 libwayland-client0 libxxf86vm1 \
fonts-noto-cjk \
&& rm -rf /var/lib/apt/lists/*
# --------------------------------------------------------------- 2. conda ํ™˜๊ฒฝ (์ž ๊ธˆ ๊ทธ๋Œ€๋กœ)
# ๋ฒ„์ „ ๊ณ ์ • ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ (micro.mamba.pm ์˜ latest tar ๋Š” ๋นŒ๋“œ ์ค‘ ๊นจ์ง„ ์‘๋‹ต์„ ์ค€ ์ ์ด ์žˆ๋‹ค)
ARG MICROMAMBA_VERSION=2.0.5-0
RUN curl -fsSL --retry 5 -o /usr/local/bin/micromamba \
https://github.com/mamba-org/micromamba-releases/releases/download/${MICROMAMBA_VERSION}/micromamba-linux-64 && \
chmod +x /usr/local/bin/micromamba && micromamba --version
COPY docker/conda-lock.txt /tmp/conda-lock.txt
RUN --mount=type=cache,target=/opt/conda/pkgs \
micromamba create -y -n vkgs -f /tmp/conda-lock.txt
# ์ดํ›„ RUN ์€ ์ „๋ถ€ ํ™œ์„ฑํ™”๋œ ํ™˜๊ฒฝ์—์„œ (conda ์ปดํŒŒ์ผ๋Ÿฌ๋Š” activate.d ๊ฐ€ CC/CXX ๋กœ ๊ฑด๋‹ค โ€” ์—†์œผ๋ฉด CMake ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋ชป ์ฐพ๋Š”๋‹ค)
COPY docker/activate.sh /usr/local/bin/vkgs-activate
RUN echo 'source /usr/local/bin/vkgs-activate' >> /etc/bash.bashrc
ENV BASH_ENV=/usr/local/bin/vkgs-activate
SHELL ["/bin/bash", "-c"]
# --------------------------------------------------------------- 3. Python (local_setup.sh 3~4๋‹จ๊ณ„์™€ ๊ฐ™์€ ์ˆœ์„œ)
# torch ๋ฅผ ๋‹จ๋… ๋ ˆ์ด์–ด๋กœ โ€” 2 GB ๊ฐ€ ๋„˜์–ด ์•„๋ž˜๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ๋ฐ›์œผ๋ฉด ๊ฐ๋‹น์ด ์•ˆ ๋œ๋‹ค.
RUN --mount=type=cache,target=/root/.cache/pip \
python -m pip install --index-url https://download.pytorch.org/whl/cu121 \
torch==2.4.1 torchvision==0.19.1
COPY docker/requirements.lock.txt /tmp/requirements.lock.txt
RUN --mount=type=cache,target=/root/.cache/pip \
python -m pip install --no-deps -r /tmp/requirements.lock.txt && \
python -m pip install --no-deps nuscenes-devkit==1.1.11 lpips==0.1.4 piq==0.8.0
# gsplat CUDA ํ™•์žฅ์„ ์„ค์น˜ ์‹œ์ ์— ๋นŒ๋“œ (์ฒซ ํ•™์Šต์˜ JIT 10๋ถ„ ๋ฐฉ์ง€). GPU ์—†์ด nvcc ๋งŒ์œผ๋กœ ๋œ๋‹ค.
RUN --mount=type=cache,target=/root/.cache/pip \
MAX_JOBS=8 python -m pip install --no-build-isolation gsplat==1.4.0 && \
python -c "import gsplat, torch; print('gsplat', gsplat.__version__, 'torch', torch.__version__)"
# --------------------------------------------------------------- 4. ์‚ฌ์šฉ์ž (ํ˜ธ์ŠคํŠธ uid/gid ์™€ ๋งž์ถ˜๋‹ค โ€” outputs/ ์†Œ์œ ๊ถŒ)
# /opt/conda ๋Š” root ์†Œ์œ  ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค โ€” chown -R ์€ overlay ์—์„œ ํ™˜๊ฒฝ ์ˆ˜ GB ๋ฅผ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•œ ์ธต์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ ๋‹ค.
# ํŒจํ‚ค์ง€๋ฅผ ๋” ๋„ฃ์œผ๋ ค๋ฉด sudo pip (์‚ฌ์šฉ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†๋Š” sudo).
RUN groupadd -g ${GID} ${USERNAME} && useradd -m -u ${UID} -g ${GID} -s /bin/bash ${USERNAME} && \
echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${USERNAME} && chmod 0440 /etc/sudoers.d/${USERNAME}
# NVIDIA Vulkan ICD โ€” ์ปจํ…Œ์ด๋„ˆ ํˆดํ‚ท(1.20, --gpus all)์€ libGLX_nvidia ๋“ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋„ฃ์–ด ์ฃผ์ง€๋งŒ ์ด JSON ์€
# ๋„ฃ์ง€ ์•Š๋Š”๋‹ค (์—†์œผ๋ฉด vulkaninfo ์žฅ์น˜ 0๊ฐœ). ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„๋งŒ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „๊ณผ ๋ฌด๊ด€.
RUN mkdir -p /etc/vulkan/icd.d /usr/share/glvnd/egl_vendor.d && \
printf '{"file_format_version":"1.0.0","ICD":{"library_path":"libGLX_nvidia.so.0","api_version":"1.3.242"}}\n' > /etc/vulkan/icd.d/nvidia_icd.json && \
printf '{"file_format_version":"1.0.0","ICD":{"library_path":"libEGL_nvidia.so.0"}}\n' > /usr/share/glvnd/egl_vendor.d/10_nvidia.json
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# --------------------------------------------------------------- 5. ์ž‘์—… ๊ณต๊ฐ„ (ํ˜ธ์ŠคํŠธ์™€ ๊ฐ™์€ ๊ฒฝ๋กœ)
ARG WORKSPACE=/home/mm/Downloads/vkgs-sim
ENV VKGS_WORKSPACE=${WORKSPACE} \
CCACHE_DIR=${WORKSPACE}/cache/ccache \
NUSCENES_ROOT=/home/mm/nas2/nuscenes_original_junhan/nuscenes/original/full
RUN mkdir -p ${WORKSPACE} && chown ${UID}:${GID} ${WORKSPACE} /home/mm
WORKDIR ${WORKSPACE}
# ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ €, ์†Œ์Šค๋ฅผ ๋‚˜์ค‘์— โ€” ์†Œ์Šค๋งŒ ๊ณ ์ณ ๋‹ค์‹œ ๊ตฌ์šธ ๋•Œ ์ˆ˜๋ฐฑ GB ์ธต์„ ๋‹ค์‹œ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ฒŒ.
# outputs ๋Š” ํฐ ํด๋”๋งˆ๋‹ค ์ธต์„ ๋‚˜๋ˆˆ๋‹ค (ํ•œ ์ธต์ด ์ˆ˜๋ฐฑ GB ๋ฉด ๋‚ด๋ณด๋‚ด๊ธฐ ยท ํ‘ธ์‹œ๊ฐ€ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต๋‹ค).
COPY --chown=${UID}:${GID} outputs/gs_day ${WORKSPACE}/outputs/gs_day
COPY --chown=${UID}:${GID} outputs/aug ${WORKSPACE}/outputs/aug
COPY --chown=${UID}:${GID} outputs/gs ${WORKSPACE}/outputs/gs
COPY --chown=${UID}:${GID} outputs/artifixer ${WORKSPACE}/outputs/artifixer
COPY --chown=${UID}:${GID} --exclude=gs_day --exclude=aug --exclude=gs --exclude=artifixer outputs ${WORKSPACE}/outputs
COPY --chown=${UID}:${GID} cache ${WORKSPACE}/cache
COPY --chown=${UID}:${GID} third_party ${WORKSPACE}/third_party
COPY --chown=${UID}:${GID} assets ${WORKSPACE}/assets
COPY --chown=${UID}:${GID} docs ${WORKSPACE}/docs
COPY --chown=${UID}:${GID} --exclude=outputs --exclude=cache --exclude=third_party --exclude=assets --exclude=docs \
. ${WORKSPACE}
RUN python -m pip install --no-deps --no-build-isolation -e src/nusim && chown -R ${UID}:${GID} src/nusim
USER ${USERNAME}
# ๋ทฐ์–ด ยท ๋„๊ตฌ ๋นŒ๋“œ (ํ˜ธ์ŠคํŠธ build/ ๋Š” ์ปจํ…์ŠคํŠธ์—์„œ ๋น ์ง„๋‹ค โ€” ํ˜ธ์ŠคํŠธ conda ๊ฒฝ๋กœ๋ฅผ ๋‹ด์€ CMake ์บ์‹œ๋ผ์„œ)
RUN cmake -S src/vkgs -B build -GNinja -DCMAKE_BUILD_TYPE=Release && cmake --build build && ls build/vkgs_viewer
# gsplat CUDA ํ™•์žฅ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ (pip ํœ ์€ ์ฒซ ์‚ฌ์šฉ ๋•Œ JIT โ€” ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฒ˜์Œ ํ•™์Šต์ด 10๋ถ„ ๋ฉˆ์ถ”์ง€ ์•Š๊ฒŒ). GPU ์—†์ด nvcc ๋งŒ.
RUN MAX_JOBS=4 python -c "from gsplat.cuda._backend import _C; print('gsplat ext', _C is not None)" # 10๋ณ‘๋ ฌ์€ ํ•™์Šต๊ณผ ๊ฐ™์ด ๋Œ ๋•Œ cc1plus ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ICE (2026-10-17)
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["bash"]