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

小结

这样安装配置完毕了.

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python class __new__、__init__、__call__ 区别

在Python中,__new__、__init__ 和 __call__ 是三个不同的特殊方法,它们在类的创建和调用过程中扮演着不同的角色。以下是它们的区别和用法: 1. __new__ 方法 作用:__new__ 是一个静态方法,负责创建并返回一个新的实例…

携手亚马逊云科技,神州泰岳如何打通生成式AI落地最后三公里

导读:神州泰岳成为首批获得亚马逊云科技生成式AI能力认证的合作伙伴。 “过去6年来,在与亚马逊云科技的合作过程中,我们大概签约了300家以上的中国出海企业。”近日在一次沟通会上,神州泰岳副总裁兼云事业部总经理刘家歆这样向媒…

idea中使用maven-helper插件阅读排查【经典版】2

一 maven-helper的使用 1.1 helper页面 打开pom文件,并可以切换tab,简单使用,如下图: Conflicts(查看冲突) All Dependencies as List(列表形式查看所有依赖) All Dependencies …

【vue3|第4期】Vue3的选项式与组合式

日期:2024年5月30日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

解析前端开发中同源策略与配置代理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 在前端开发中,跨域请求是一个常见的问题。同源策略限制了浏览器中一个页面…

win10系统下WPS工具显示灰色全部用不了,提示登录

如果你在写文档或使用excel时发现导航栏的工具全部使用不了,弹出是需要您登录,可以通过以下操作不用登录。 按照 1(搜索框)—> 2(应用)—> 3(WPS Office)点鼠标左键—> 4&a…

使用LeanCloud平台的即时通讯

LeanCloud 是领先的 Serverless 云服务,为产品开发提供强有力的后端支持,旨在帮助开发者降低研发、运营维护等阶段投入的精力和成本。 LeanCloud 整合了各项服务,让开发者能够聚焦在核心业务上,为客户创造更多价值。 *即时通讯 …

PromptIR论文阅读笔记

MZUAI和IIAI在NIPS2023上的一篇论文,用prompt来编码degradation,然后用来guide restoration network,使得模型能够泛化到不同degradation types and levels,也就是说是一个模型一次训练能够应对多种degradation的unified model。文…

apache大数据各组件部署搭建(超级详细)

apache大数据数仓各组件部署搭建 第一章 环境准备 1. 机器规划 准备3台服务器用于集群部署,系统建议CentOS7+,2核8G内存 172.19.195.228 hadoop101 172.19.195.229 hadoop102 172.19.195.230 hadoop103 [root@hadoop101 ~]# cat /etc/redhat-release CentOS Linux rele…

Azure DevOps Server 2022.2(升级过程)

1. 概述 2. 前期准备3. 升级过程4. 验证成果 1. 概述 本月微软公司发布了Azure DevOps Server 2022的第二个升级包Update 2 https://learn.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2022u2。 自2024年3月12日发布Azure DevOps Server 2022 Update 1(…

Linux综合实践(Ubuntu)

目录 一、配置任务 1.1 配置该服务器的软件源为中科大软件源 1.2 安装相关软件openssh-server和vim 1.3 设置双网卡,网卡1为NAT模式,网卡2为桥接模式(桥接模式下,使用静态ip,该网卡数据跟实验室主机网络设置相似,除…

Jvm(一)之栈、堆、方法区

前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步,感受周围的世界。让我们一起提醒自己,要适时放慢脚步…

中文多模态InternVL-Chat-V1-5,中文理解能力强劲,8 项指标超越商业模型,性能媲美 GPT-4V

前言 近年来,多模态大型语言模型(MLLM)的快速发展,为人工智能在图像、文本等多模态信息理解和处理方面带来了前所未有的突破。然而,现有的主流多模态模型多以英文为训练语言,在中文理解和处理方面存在着明…

SwiftUI中Popover的使用(弹出方式,箭头位置,如何退出)

在iOS中,popover是出现在现有内容顶部的UI元素,通常用于在上下文中向用户呈现新视图。与其他占用整个屏幕的视图控制器不同,popover出现在一个较小的、集中的区域,从而使用户能够在必要时与popover外的应用程序的其他部分进行交互…

521源码-游戏源码-2024卡牌回合自走棋手游《梦间集》推出全新Linux手工服务端

首款稀有卡牌回合自走棋手游《梦间集》推出全新Linux手工服务端整理 更多网站源码,游戏源码,学习教程,请点击👉-521源码-👈获取最新资源 本游戏下载地址:2024卡牌回合自走棋手游《梦间集》推出全新Linux手…

算法(十三)回溯算法---N皇后问题

文章目录 算法概念经典例子 - N皇后问题什么是N皇后问题?实现思路 算法概念 回溯算法是类似枚举的深度优先搜索尝试过程,主要是再搜索尝试中寻找问题的解,当发生不满足求解条件时,就会”回溯“返回(也就是递归返回&am…

switch语句

作用 让顺序执行的代码,产生分支。 基本语法 switch(变量) {//变量 常量 执行 case和 break之间的代码case 常量:满足条件执行的代码逻辑;break;case 常量:满足条件执行的代码逻辑;break;//case 可以有无数个default://如果上面case的条件都不满足 就会执行 def…

sqlite--SQL语句进阶

SQL语句进阶 函数和聚合 函数: SQL 语句支持利用函数来处理数据, 函数一般是在数据上执行的, 它给数据的转换和处理提供了方便常用的文本处理函数: 常用的文本处理函数: // 返回字符串的长度 length();//将字符串…

【阿里云】在云服务器ECS 安装MySQL、本地远程连接或宝塔连接(手动部署)

目录 一、安装MySQL 二、配置MySQL 三、远程访问MySQL数据库 四、Navicat本地连接远程MySQL 五、宝塔连接MySQL 如果你是使用宝塔安装的MySQL请绕过,以下是通过命令行模式(手动部署)进行安装、配置及运行。 安装:MySQL8.0 …

C#WPF数字大屏项目实战02--主窗体布局

1、主窗体起始属性 设置有关属性如下: WindowStyle"None"-》无边框 AllowsTransparency"True" -》允许透明 WindowStartupLocation"CenterScreen"-》启动时位于屏幕中间 FontFamily"Microsoft YaHei"-》字体微软雅黑 …