# vkgs-sim 개발 이미지 로컬 개발 환경(`scripts/local_setup.sh` 가 만드는 micromamba 환경 `vkgs`)을 같은 버전 그대로 담은 Docker 이미지. 로컬 개발은 그대로 두고, 같은 환경을 다른 기계나 다른 사람에게 옮길 때 쓴다. | 무엇 | 어디서 | |---|---| | 컴파일러 gcc 12 · CUDA 12.1 nvcc · Vulkan 로더/헤더 · glslc · cmake · Tracy 의존성 | `docker/conda-lock.txt` (conda 잠금) | | torch 2.4.1+cu121 · torchvision 0.19.1 · gsplat 1.4.0 (확장 미리 빌드) | `docker/Dockerfile` | | 나머지 파이썬 패키지 | `docker/requirements.lock.txt` (pip 잠금, `--no-deps`) | | 소스 · 설정 · outputs · cache | 이미지에 없음 — 실행 때 저장소를 **호스트와 같은 경로**로 bind-mount | ArtiFixer 추론 환경(micromamba `artifixer`)은 들어 있지 않다. ## 쓰기 ```bash docker compose build dev # 이미지 dzqf0000/vulkansim:1.0 (처음 약 20~30분) xhost +local: # 창 뷰어를 쓸 때 (호스트에서 한 번) docker compose run --rm dev vkgs-doctor # CUDA · Vulkan · 데이터셋 점검 docker compose run --rm dev bash # 셸 — 안에서 바로 nusim, cmake, pytest ``` 안에서 처음 한 번 뷰어를 빌드한다: ```bash cmake -S src/vkgs -B build -GNinja && cmake --build build ``` - `build/` 는 호스트의 `build-docker/` 로 가려진다. 호스트 `build/` 는 호스트 conda 컴파일러 경로를 담은 CMake 캐시라 같이 쓰면 서로 깨진다. nusim 은 `<저장소>/build/vkgs_viewer` 를 찾으므로 안에서는 경로가 그대로다. - 저장소를 호스트와 같은 경로(`$PWD`)로 마운트한다. `outputs/gs_day/*/segments.txt` 같은 파일이 절대 경로를 담고 있다. - nuScenes 원본은 `:ro` 로 마운트된다 (`NUSCENES_ROOT`, 기본은 호스트 NAS 경로). - 컨테이너 사용자는 uid 1000 — outputs/ 에 만든 파일이 호스트 사용자 소유가 된다. - GPU 는 하나(8 GB)다. 호스트에서 학습·ArtiFixer 가 돌고 있으면 컨테이너 안 뷰어도 메모리 부족으로 실패한다. ## 잠금 파일 다시 뽑기 (로컬 환경에 패키지를 더했을 때) ```bash ~/.local/bin/micromamba env export -n vkgs --explicit > docker/conda-lock.txt # pip 잠금: pip 로 설치된 것만 (conda 가 넣은 파이썬 패키지 · torch · gsplat · nusim 제외) ~/micromamba/envs/vkgs/bin/python - > docker/requirements.lock.txt <<'E' import importlib.metadata as m skip = {"nusim", "gsplat", "torch", "torchvision", "triton", "pip", "setuptools", "wheel", "nuscenes-devkit", "lpips", "piq"} rows = sorted((f"{d.metadata['Name']}=={d.version}" for d in m.distributions() if (d.read_text("INSTALLER") or "").strip() == "pip" and d.metadata["Name"].lower() not in skip and not d.metadata["Name"].lower().startswith("nvidia-")), key=str.lower) print("# docker/Dockerfile 이 --no-deps 로 넣는 pip 패키지 — 로컬 vkgs 환경에서 뽑은 것") print("\n".join(rows)) E docker compose build dev ```