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

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


文章目录

  • 前言
  • I. 宿主系统上的安装配置
    • 1. 安装 nvidia driver
    • 2. 安装 docker
    • 3. 安装 nvidia-container-toolkit
  • II. Docker 容器安装配置
    • 1. 拉取 ubuntu 22.04
    • 2. 创建容器
    • 3. 进入容器
    • 4. 容器中安装 cuda SDK
    • 5. 容器中安装 miniforge 3
    • 6. 安装 cmake
  • III. 编译与测试 GS
    • 1. 虚拟环境配置
    • 2. 训练与评估
    • 3. 编译安装 SIBR_gaussianViewer
  • 小结


前言

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 Guide 或 Specialized 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

小结

这样安装配置完毕了.

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)

1. 模型检验 1.1 Holdout交叉验证 1.1.1 算法 在这种交叉验证技术中,整个数据集被随机划分为训练集和验证集。根据经验,整个数据集的近 70% 用作训练集,其余 30% 用作验证集。 优点:可以快速进行区分,仅仅通过一次区…

从零开始:CANDelaStudio之CDD S3 Server时间异常

0 前言 关于CDD制作有疑问的小伙伴可以参考以下文章: 从零开始:CANDelaStudio之CDD制作(一) 从零开始:CANDelaStudio之CDD制作(二) 本文主要对日常在CDD中碰到的一些问题做一个补充。 1 …

生成树协议STP(Spanning Tree Protocol)

为了提高网络可靠性,交换网络中通常会使用冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol&#xff0…

Spring Cloud Alibaba-09-Seata分布式事务

Lison <dreamlison163.com>, v1.0.0, 2024.5.03 Spring Cloud Alibaba-09-Seata分布式事务 文章目录 Spring Cloud Alibaba-09-Seata分布式事务分布式事务基础事务本地事务分布式事务分布式事务的场景 分布式事务的解决方案全局事务可靠消息服务最大努力通知TCC事务 Se…

PDF高效编辑器革新:一键智能转换PDF至HTML,轻松开启文件处理全新时代!

信息爆炸的时代&#xff0c;PDF文件因其跨平台、不易修改的特性&#xff0c;成为了商务、教育、出版等领域不可或缺的文件格式。然而&#xff0c;PDF文件的固定性也带来了诸多不便&#xff0c;特别是在需要对其内容进行编辑或格式转换时。这时&#xff0c;一款高效、易用的PDF编…

基于Springboot + vue实现的文化民俗网站

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

宝塔 nginx 配置负载均衡 upstream

nginx 主配置文件加入 upstream myapp1 {server 192.168.124.101:5051;server 192.168.124.102:5052;server 192.168.124.111:5050;}站点配置文件中加入 location / {proxy_pass http://myapp1;}80端口映射到外网域名配置方法 加入红框中的代码 upstream myapp3 {server 192.16…

STL:vector

文章目录 标准库中的vectorvector的构造vector的迭代器vector的容量vector的元素访问data vector的修改 vector和string的迭代器失效问题resize、reserve、insert、push_back、assigneraseg 和 vs 的区别string解决迭代器失效的方法 标准库中的vector vector是表示可变大小数组…

深度学习设计模式之装饰器模式

文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 装饰器模式属于结构型模式&#xff0c;又叫包装设计模式&#xff0c;动态的将责任添加到对象上。 一、介绍 装饰器模式又叫包装设计模式&#xff0c;为现有的类的一个…

STL中list的模拟实现

目录 list模拟实现 list节点 list的push_back()函数 list的迭代器操作&#xff08;非const&#xff09; list的迭代器操作&#xff08;const&#xff09; list迭代器const 非const优化 list的insert()函数 list的erase()函数 list的pop_back() push_front() pop_front(…

M3/M4 Ultra Mac Pro:你需要知道的一切

本文翻译自&#xff1a;M3/M4 Ultra Mac Pro: Everything you need to know (By Roman Loyola2024年5月15日 ) https://www.macworld.com/article/2320613/m3-m4-ultra-mac-pro-everything-you-need-to-know.html 文章目录 Mac Pro M3/M4&#xff1a;发布日期Mac Pro M3/M4&…

yangwebrtc x86_64环境搭建

版本&#xff1a;5.0.099 sudo apt-get install libxext-dev sudo apt-get install x11proto-xext-dev sudo apt-get install libxi-dev sudo apt install libasound2-dev sudo apt install libgl1-mesa-dev sudo apt-get install libxtst-dev 用qt打开以下两个项目的.pro met…

探索UWB模块的多功能应用——UWB技术赋能智慧生活

超宽带&#xff08;Ultra-Wideband, UWB&#xff09;技术&#xff0c;凭借其高精度、低功耗和强抗干扰能力&#xff0c;正在成为智能家居领域的一项关键技术。UWB模块的应用不仅提高了智能家居设备的性能&#xff0c;还为家庭安全、设备管理和用户体验带来了显著的改善。 UWB模…

pycharm 上一次编辑位置不见了

目录 pycharm2024版 上一次编辑位置不见了&#xff0c;研究发现移到了左下角了&#xff0c;如下图所示&#xff1a; 上一次编辑位置快捷键&#xff1a; pycharm2024版 上一次编辑位置不见了&#xff0c;研究发现移到了左下角了&#xff0c;如下图所示&#xff1a; 上一次编辑…

Windows 80端口占用解决办法

启动软件系统前&#xff0c;有时遇见端口被其他程序占用&#xff0c;导致无法启动系统 解决办法: # 查看端口占用情况 > netstat -ano | findstr 端口号通常端口占用&#xff0c;通过任务管理器查看PID&#xff0c;结束任务可以完成。System进程占用&#xff0c;结束不了&…

惯性动作捕捉与数字人实时交互/运营套装,对高校元宇宙实训室有何作用?

惯性动作捕捉与数字人实时交互/运营套装&#xff0c;可以打破时空限制&#xff0c;通过动捕设备写实数字人软件系统动捕设备系统定制化数字人短视频渲染平台&#xff0c;重塑课程教学方式&#xff0c;开展元宇宙沉浸式体验教学活动和参观交流活动。 写实数字人软件系统内置丰富…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月31日预测第7弹

昨天的3D已命中&#xff01;今天继续基于8883的大底&#xff0c;使用尽可能少的条件进行缩号。好了&#xff0c;直接上结果吧~ 首先&#xff0c;888定位如下&#xff1a; 百位&#xff1a;7,6,5,8,9,3,2,0 十位&#xff1a;3,4,5,2,1,7,8,9 …

视频汇聚EasyCVR平台GA/T 1400视图库应用:助力社会治安防控效能提升

在信息化、智能化的时代浪潮下&#xff0c;公安视频图像信息应用系统的发展与应用显得尤为重要。GA/T 1400标准&#xff0c;全称为《公安视频图像信息应用系统》&#xff0c;作为公安行业的一项重要标准&#xff0c;其视图库的应用在提升公安工作效能、加强社会治安防控等方面发…

小白跟做江科大32单片机之按键控制LED

原理部分 1.LED部分使用的是这样的连接方式 2.传感器模块的电路图 滤波电容如果接地&#xff0c;一般用于滤波&#xff0c;在分析电路时就不用考虑。下面这个电路就是看A端和B端哪端的拉力大&#xff0c;就能把电压值对应到相应的电压值 比较器部分 如果A端电压>B端电压&am…

深入Kafka消息分区机制:从原理到实践

深入Kafka消息分区机制&#xff1a;从原理到实践 在现代分布式系统中&#xff0c;如何高效地处理海量数据是一个至关重要的问题。Apache Kafka作为一种高吞吐量的分布式消息系统&#xff0c;广泛应用于日志收集、实时分析等场景。为了保证数据的高效处理和系统的高可扩展性&am…