• Docker 环境下 3D Guassian Splatting 的编译和配置


    Title: Docker 环境下 3D Guassian Splatting 的编译和配置



    前言

    3D Guassian Splatting 很火, 也想看一下.

    下面简单记录一下 Docker 环境下编译和配置 3D Guassian Splatting (下面简称 GS) 的过程.

    GS 开源代码地址 https://github.com/graphdeco-inria/gaussian-splatting?tab=readme-ov-file.


    I. 宿主系统上的安装配置

    宿主系统 (主机系统) :

    ~$ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 20.04.6 LTS
    Release:	20.04
    Codename:	focal
    

    显卡:

    ~$ lspci|grep -i vga
    0000:73:00.0 VGA compatible controller: NVIDIA Corporation Device 2204 (rev a1)
    0000:d5:00.0 VGA compatible controller: NVIDIA Corporation Device 2204 (rev a1)
    

    宿主系统上安装 nvidia 驱动等主要是以下三步, 我在其他代码安装时已经处理好了 (没有记录). 网友分享非常多, 参照各类博文步骤处理就行.

    1. 安装 nvidia driver

    2. 安装 docker

    3. 安装 nvidia-container-toolkit

    sudo apt-get install nvidia-container-toolkit
    

    II. Docker 容器安装配置

    1. 拉取 ubuntu 22.04

    docker pull ubuntu:jammy
    

    2. 创建容器

    docker run -it  -d -p 8888:8888 -p 6006:6006 -p 8022:22 \
    	--gpus all \
    	--ipc=host \
    	--name gaussian_splatting -v /home/robot/working_space/python/pytorch:/workspace \
    	--workdir=/workspace \
    	-e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw -e NVIDIA_DRIVER_CAPABILITIES=all\
    	ubuntu:jammy  /bin/bash
    

    其中

    -i , --interactive —— Keep STDIN open even if not attached.

    -t, --tty —— Allocate a pseudo-TTY.

    -it 表示创建一个交互式的容器 -i, 并绑定一个伪终端 -t.

    -d —— Run container in background and print container ID.

    -p —— Publish a container’s port(s) to the host.

    将容器内部的端口映射到宿主机的端口上, 从而使得外部网络可以通过宿主主机的 IP 地址和端口访问容器内的应用程序. 映射规则由两个端口号组成, 中间用冒号分隔,[第一个端口号是宿主主机的端口号:第二个端口号是容器内部的端口号]. 这三个端口映射配置并非安装 GS 所必须, 这里配置是为了容器中运行 jupyter 设置的 (其他目的, 故可按照需求删除 -p 8888:8888 -p 6006:6006 -p 8022:22).

    --gpus 安装 nvidia-container-toolkit 引入的配置参数, 将 GPU 设备分配给容器, 使容器能使用 GPU 进行计算, all 参数将所有 GPU 设备分配给容器.

    -ipc —— IPC mode to use.

    默认情况下容器使用相互隔离的进程间通讯, 而参数 host 使得容器可以与主机上的进程直接进行进程间通信.

    --name string —— Assign a name to the container.

    -v —— Bind mount a volume, 将主机系统上的 /home/robot/working_space/python/pytorch 路径 (改成自己的路径) 挂载到容器的 /workspace 路径 (改成自己的路径), 方便容器和主机之间共享数据.

    --workdir string —— Working directory inside the container.

    -e, --env list —— Set environment variables.

    -e DISPLAY=unix$DISPLAY 修改环境变量 DISPLAY.

    -v /tmp/.X11-unix:/tmp/.X11-unix:rw 表示共享本地unix端口, docker 可以知道本地宿主机上安装的 X11 界面服务.

    Unix/Linux 的主流图形界面服务为 X11, 该图形显示方式实际上是一种 client/server 模式, 在服务端和客户端之间 X11通过 DISPLAY 环境变量来指定将图形显示到何处. 后面的参数就是将主机上 X11的 unix 套接字共享到了容器里面, 每个 unix 套接字实际上就是系统 /tmp/.X11-unix 目录下面的一个特殊文件.

    -e NVIDIA_DRIVER_CAPABILITIES=all 设置显示环境变量. The NVIDIA_DRIVER_CAPABILITIES controls which driver libraries/binaries will be mounted inside the container. The possible values of the NVIDIA_DRIVER_CAPABILITIES variable are: compute, video, graphics, utility, or all. 其中 all 参数enable all available driver capabilities. 也就是说, --gpus 是分配哪几块 GPU 给容器, 而 NVIDIA_DRIVER_CAPABILITIES 是分配到的 GPU 发挥哪些能力. (详细信息 NVIDIA Container Toolkit User GuideSpecialized Configurations with Docker)

    ubuntu:jammy 为 IMAGE 镜像.

    /bin/bash 表示载入容器后运行 bash, docker 中必须要保持一个进程的运行, 不然容器启动后马上 “执行完毕后容器被终止”.

    (可参考docker run的配置参数详解Docker 环境下运行 Fast_LIO 进行三维建模的前/后处理设置)

    3. 进入容器

    A. 进入容器

    docker ps -a
    docker start gaussian_splatting
    docker attach gaussian_splatting
    

    B. 查看容器中操作系统的版本

    /workspace# cat /etc/lsb-release
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=22.04
    DISTRIB_CODENAME=jammy
    DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"
    

    C. 查看容器中 nvidia driver, 确认容器中能够访问 nvidia 驱动

    fig1-nvidia-smi

    D. 容器中系统更换国内源, 比如 sources.list 中增加对应ubuntu版本的清华源、阿里源、中科大源等

    E. 容器中测试一下 X11 Display, 为后面 SIBR_gaussianViewer 的运行做准备

    apt-get install x11-apps
    xclock
    
    fig2-xclock

    4. 容器中安装 cuda SDK

    之前安装 nvidia 驱动已经包含了 cuda driver. 但这不是完整的开发环境, 没有包含编译器等工具. 我们参考 Docker 镜像 中 Cuda 安装 来进行下面步骤.

    A. 下载 CUDA Toolkit 11.8

    地址: https://developer.nvidia.com/cuda-toolkit-archive

    wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.runsudo
    

    B. 安装依赖

    apt-get install gcc g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev
    

    C. 安装 cuda

    sh cuda_11.8.0_520.61.05_linux.run
    
    fig3-cuda-sdk

    D. 容器中设置环境变量

    在 /root/.bashrc 文件尾添加:

    export PATH=/usr/local/cuda-11.8/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
    

    E. 启用新环境

    source ~/.bashrc
    

    F. 安装验证

    /workspace# nvcc -V
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Wed_Sep_21_10:33:58_PDT_2022
    Cuda compilation tools, release 11.8, V11.8.89
    Build cuda_11.8.r11.8/compiler.31833905_0
    

    5. 容器中安装 miniforge 3

    A. 下载

    https://conda-forge.org/download/

    B. 安装

    bash Miniforge3-Linux-x86_64.sh
    

    在安装中间步骤中修改了安装位置 /workspace/miniforge3 (改或不改都可).

    C. 在 .bashrc 中添加系统环境变量

    export PATH=/workspace/miniforge3/bin:$PATH
    
    source ~/.bashrc
    

    E. 激活默认 conda 虚拟环境

    conda init bash
    source ~/.bashrc
    

    6. 安装 cmake

    A. 下载 cmake 源码

    从 https://cmake.org/download/#older 下载 cmake-3.28.5.tar.gz

    B. 安装依赖

    apt-get install libssl-dev
    

    C. 运行构建工具

    使用 tar -zxvf 解压后运行

    cd cmake-3.28.5
    ./bootstrap
    

    D. 编译和安装

    make install -j2
    

    III. 编译与测试 GS

    1. 虚拟环境配置

    A. 源代码 Clone

    git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
    

    B. 创建 GS 的虚拟环境

    cd /workspace/gaussian-splatting/
    conda env create --file environment.yml
    conda activate gaussian_splatting
    

    C. 查看 conda 虚拟环境

    /workspace/gaussian-splatting# conda info --envs
    # conda environments:
    #
    base                     /workspace/miniforge3
    gaussian_splatting    *  /workspace/miniforge3/envs/gaussian_splatting
    

    D. 设置容器开机默认虚拟环境

    将 GS 的虚拟环境设置为该容器开机默认进入的 conda 虚拟环境, 需在 ~/.bashrc 中设置

    conda activate gaussian_splatting
    
    source ~/.bashrc
    

    2. 训练与评估

    A. 训练测试

    python train.py -s ../GaussianSplatting_dataset/tandt_db/tandt/truck/ -m ../GaussianSplatting_dataset/truck/output/
    
    train

    B. 评估测试

    python train.py -s ../GaussianSplatting_dataset/tandt_db/tandt/truck/ --eval
    # Output folder: ./output/bba0c333-0
    python render.py -m ./output/bba0c333-0/
    python metrics.py -m ./output/bba0c333-0/
    
    fig5-evaluate

    C. 问题处理

    运行 metrics.py 时遇到 “Unable to compute metrics for model” 错误, 需要安装依赖 torchmetrics

    (参考 https://github.com/graphdeco-inria/gaussian-splatting/issues/481)

    conda install torchmetrics
    

    如果还是有问题, 请检查网络, 因为第一次运行时需要下载 vgg.pth.

    Downloading: "https://raw.githubusercontent.com/richzhang/PerceptualSimilarity/master/lpips/weights/v0.1/vgg.pth" to /root/.cache/torch/hub/checkpoints/vgg.pth
    

    3. 编译安装 SIBR_gaussianViewer

    A. 安装依赖

    apt install libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev
    apt install git
    

    B. 编译 Viewer

    cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release
    cmake --build build -j2 --target install
    

    C. 测试 Viewer

    cd ./install/bin
    ./SIBR_gaussianViewer_app -m /workspace/GaussianSplatting_dataset/truck/output/
    
    rendering

    小结

    这样安装配置完毕了.

    注意一下网络是否通畅, 因为要自动下载好多依赖库.

  • 相关阅读:
    2.6 动态规划—lc炒股系列
    内裤洗衣机到底值不值得买?四款公认好用的内衣洗衣机推荐
    flink 1.15.1集群安装部署及测试
    模拟信号隔离器在水处理控制系统中的应用方案
    正则表达式简介和使用(Java)
    C/C++航空客运订票系统
    Kafka安装使用
    Django 配置 Email Admin 详细指南
    2022腾讯全球数字生态大会【存储专场】它来了|预约有礼
    web结课作业的源码——HTML+CSS+JavaScript仿oppo官网手机商城(1页)
  • 原文地址:https://blog.csdn.net/woyaomaishu2/article/details/139353111