File size: 8,196 Bytes
4c75661 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # 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"]
|