# Образ для развёртывания решателя и валидационной кампании на сервере с NVIDIA. # # Сборка и запуск: # docker build -t kbc2d docs/theory/2d_solver # docker run --rm --gpus all kbc2d --calibrate # проверить, что GPU виден # docker run -d --gpus all -v "$PWD/out:/work/bench/out" --name kbc2d kbc2d --resume # # ГЛАВНАЯ ТОНКОСТЬ — Vulkan в контейнере. NVIDIA Container Toolkit подкладывает внутрь # Vulkan-ICD (nvidia_icd.json) только если в NVIDIA_DRIVER_CAPABILITIES есть `graphics`. # С одним `compute` wgpu не увидит НИ ОДНОГО адаптера и решатель откажется стартовать с # --backend gpu. Поэтому capabilities прописаны в образе, а vulkan-tools положен внутрь, # чтобы первым делом можно было выполнить `vulkaninfo` и убедиться, что карта видна. # ── сборка ─────────────────────────────────────────────────────────────────── # Версия тулчейна закреплена: та же, на которой решатель собирался и проверялся. FROM rust:1.97-bookworm AS build WORKDIR /src # Сначала только манифесты — тогда слой с зависимостями переиспользуется, пока они не менялись. COPY Cargo.toml Cargo.lock ./ RUN mkdir src && echo 'fn main() {}' > src/main.rs \ && cargo build --release --locked 2>/dev/null || true \ && rm -rf src COPY src ./src # touch нужен, чтобы cargo не спутал новые исходники с заглушкой из слоя выше RUN touch src/main.rs && cargo build --release --locked # ── исполнение ─────────────────────────────────────────────────────────────── FROM debian:bookworm-slim # Версия и коммит приходят снаружи (см. bench/publish.sh): образ на сервере должен # однозначно сопоставляться с состоянием репозитория, из которого собран. ARG VERSION=dev ARG REVISION=unknown LABEL org.opencontainers.image.title="kbc2d" LABEL org.opencontainers.image.description="Двумерный решатель LBM D2Q9 с энтропийным столкновением KBC" LABEL org.opencontainers.image.version="${VERSION}" LABEL org.opencontainers.image.revision="${REVISION}" LABEL org.opencontainers.image.source="https://gitea.arseniev.info/NotBigGhost/TurbulenceCAD" RUN apt-get update && apt-get install -y --no-install-recommends \ libvulkan1 vulkan-tools python3 ca-certificates \ && rm -rf /var/lib/apt/lists/* # Без graphics в списке возможностей Vulkan-ICD внутрь не попадёт — см. шапку. ENV NVIDIA_VISIBLE_DEVICES=all ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics WORKDIR /work COPY --from=build /src/target/release/kbc2d /work/target/release/kbc2d COPY bench /work/bench RUN chmod +x /work/bench/run_campaign.sh # Кампания идёт десятки часов, поэтому по умолчанию образ НЕ запускает её: случайный # `docker run` покажет смету и выйдет. WORKDIR /work/bench ENTRYPOINT ["./run_campaign.sh"] CMD ["--dry-run"]