WIN11安装Ubuntu22.04双系统,驱动cuda,配置3D GS
前言:看了很多基于3D GS开发的SLAM系统都默认在Ubuntu20.04-22.04中运行,并且WIN11不太方便安装cmake等基础编译库。所以还是在Ubuntu系统中进行咱的研究吧。
step 1. WIN11安装Ubuntu双系统
首先确认系统是否为UEFI模式。
win+X进行磁盘管理,分出一个空白卷,用来安装Ubuntu系统(600G)。
ubuntu官网其他Ubuntu系统下载 | Ubuntu或国内镜像Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror下载Ubuntu22.04_x86_64.iso。
用rufus软件和一个8GB的空U盘制作启动盘。
将启动盘插入电脑,重启。注意一定要在BIOS(按F2 F10 ESC或F12,看电脑品牌)中关闭安全启动secure boot或安全启动管理,不然后续安装nvidia驱动会报错,同时调整开机顺序为启动盘第一。
然后exit bios界面,等待自动重启,自动进入Ubuntu安装界面(如果enter “try or install ubuntu”后黑屏或安装完系统重启进入不了系统卡死,是因为ubuntu驱动和电脑nvidia显卡冲突。要重启,用按键e点击“try or install ubuntu”进入grub模式,在splash 后将---替换为nomodeset,然后按F10保存并启动。之后执行步骤2.1 (2)禁用noueau驱动,之后就能顺利进入系统了。)
安装方式选择其他安装方式,自己给UBUNTU系统分配内存大小,不然后续安CUDA后挂载点/就满了,无法安装其他程序。我设置的分配方案是:efi -逻辑分区-空间起始位置-500MB;swap-主分区-空间起始位置-(内存小于8G就是内存2倍,否则就>=8G)8GB;/-ext4-主分区-空间起始位置-128GB;/home-主分区或逻辑分区-空间起始位置-ext4,剩余存储空间。然后选择efi所在分区安装ubuntu引导。等待安装成功。
P.S.目前尝试18.04和20.04,安装完都没有无线网卡驱动,连不上网,是什么原因?
注意,如果在后续安装驱动的过程中出现问题,建议直接重装系统【进入win系统,然后win+r cmd 输入 diskpart。然后在出现的命令行中输入:list disk,选中安装ubuntu系统的那个盘select disk xx(我的是0),然后list partition,选择ubuntu系统的那4个分区,依次为每个分区执行“select partition xx(我的四个分区是5/6/7/8),然后 delete partition xx(5/6/7/8) override"。最后要删除win系统efi中的ubuntu启动项,选中win系统efi引导在的区,一般是第一个,select partition 1,然后分配一个盘符方便打开 assign letter=j(字母A-Z,不要和已有盘符重复就行);然后以管理员权限打开记事本,点击文件,打开J盘,点击efi文件夹,删除其中的ubuntu文件夹;最后再回到diskpart删除分配的盘符 remove letter=j。可以win+x 磁盘管理,看是否恢复原来给ubuntu的空白分区。】
step 2. 安装驱动、CUDA、cudnn、anaconda
step 2.1 安装nvidia驱动
笔记本的双系统安装驱动比台式机要容易出现安装驱动后重启黑屏无法启动的问题,即使ctrl alt f1-f6进入非图形界面也不好恢复,我通常就重装系统尝试其他的安装版本和方法了。我主要参考了下面的连接(按权重排序)。
Ubuntu20.04 安装 Anaconda步骤_ubuntu20.04安装anaconda-CSDN博客
Ubuntu18-24.04安装和干净卸载nvidia显卡驱动——超详细、最简单_ubuntu安装nvidia显卡驱动-CSDN博客
Ubuntu22.04安装NVIDIA驱动+CUDA+CUDNN+Anaconda+PyTorch+Pycharm-CSDN博客
(1)首先要再次明确是否禁用bios中的安全启动,否则会禁止第三方源安装驱动;安装gcc等依赖库
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install gcc g++ make
//gcc --version 查看我的gcc版本是7.5,看其他教程,gcc版本太低也会导致错误。
(2)禁用ubuntu系统自带的nouveau驱动,否则会和nvidia驱动矛盾。
sudo gedit /etc/modprobe.d/blacklist.conf
在文件末尾插入:
blacklist nouveau
options nouveau modeset=0
然后执行命令:
sudo update-initramfs -u
重启电脑:
sudo reboot
然后检查是否禁用了nouveau:
lsmod | grep nouveau
如果没有任何输出,就成功了。
(3)可选操作:安装lightdm,主要是用来关闭启动图形界面(也可以不关闭)。
sudo apt-get install lightdm
在弹出上下键选择界面gdm3 vs. lightdm中 选择lightdm
(4)nvidia驱动有三种安装方式:
第一种是打开 软件和更新,点击“ubuntu软件”--“下载自”--“其他站点”选择apt install的下载源,一般是tuna.tsinghua或ali源,可以加速。
然后点击“附加驱动”,会显示这台电脑适合的驱动,我的显示有:525,525-server,535.545这四个。点击选择的版本,应用更改,让系统自动下载安装。这种方法被很多网友认为是最适合不会出错的方法,但我之前也试过没成功,可能也和当时的电脑集显版本AMD有关系。
第二种是ppa仓库自动安装
sudo add-apt-repository ppa:graphics-drivers/ppa //添加ppa库到系统中
sudo apt update // 更新
sudo ubuntu-drivers devices // 显示可以安装的nvidia驱动
//我能用的驱动有525-server,525,535,545-recommended。这个推荐结果和ubuntu 软件和更新 推荐的是一样的。我成功安装了545。
//然后选择版本安装:sudo apt install nvidia-xxx //这个过程会比较慢,换源方法一:软件与更新->国内其他地区->最佳镜像->应用。方法二:手动 清华、阿里、化为、国科都试试Linux换源大全!一步一步教你如何让系统飞起来!
reboot //重启
nvidia-smi //查看安装成功
P.S.网上有推荐用server或recommended,认为更稳定。但这两种哪个更好?取决于ubuntu系统是有图形界面还是只作为服务器,recommended适合前者,图像分辨率和更新维护更好;server适合后者。可见,我应该安装545版本。
第三种是官网下载run文件手动安装,也有网友认为这是对新显卡版本最稳妥的方法。
首先查看电脑的显卡版本:
lspci | grep -i nvidia
我的显示有:NVIDIA Corporation Device 2860 (rev a1)
然后在网站PCI Devices中检索2860,出现显卡版本为“Name: AD106M [GeForce RTX 4070 Max-Q / Mobile]”
然后到NVIDIA驱动下载官网 下载 NVIDIA 官方驱动 | NVIDIA检索显卡版本
geforce RTX-4070(notebook/laptop gpu)-linux-64bit
提供的驱动版本有 570 550 535。没有我根据软件更新或ppa推荐的5454版本。但是起码有535对上了,所以我最终下载了535.230.02版本run文件。这个版本最终没有成功,比cuda11.8需要的CUDA版本低,安了CUDA后nvidia-smi报错版本不匹配;安装3D GS torch的cuda不可用,且pip install submodules/subgaussian报错找不到cuda链接库。只能说明535这个版本低导致的后续错误。
然后cd到run文件下载路径,授权并安装:
sudo chmod +x NVIDIA-Linux-x86_64-535.230.02.run
sudo bash NVIDIA-Linux-x86_64-535.230.02.run -no-x-check -no-nouveau-check -no-opengl-files
注意后面的三个安装选项,分别在安装时避免ubuntu x服务与nvidia的矛盾;不安装opengl文件,否则可能导致循环启动;禁用ubuntu的nouveau驱动。这三个最好都写上,我之前以为禁用nouveau后没有选no-nouveau,安装完重启就黑屏,当然应该有其他问题,但是变量太多了,导致这个过程都有点玄学。
在安装时 选 NVIDIA专有驱动;continue install; install nvidia's 32 bit libraries 选 no 或 提示说安装不了32bit选ok; 是否run the nvidia-xconfig utility to automatically update,选no (我看也有选yes的,我之前选yes,重启黑屏)。等安装成功"Installation of the NVIDIA ... is now complete"选ok就行了。
(安装building kernel modules时可能会报错 An error occured in "Building kernel modules", see /var/log/nvidia-installer.log。我按建议sudo gedit打开log文件后,找到报错处是gcc 11.4版本不支持ubuntu22.04要求的编译器版本gcc12.3。安装gcc-12的教程安装并配置gcc-12 g++-12_gcc12安装-CSDN博客)
最后重启电脑reboot
nvidia-smi
终于输出了驱动,和支持的最大CUDA版本12.2。
step 2.2 安装CUDA
CUDA Toolkit Archive | NVIDIA Developer
cuda版本要根据应用需求,我想运行3D GS,安装11.8版本。
选择 linux ubuntu x86-64 18.04,然后我从官网给出的三种安装方式选择local deb 或 local runfile方式,将官网提供的指令依次复制到命令行中。
(推荐用runfile,在安装时可能CUDA建议的NVIDIA版本更低,但是不安装:enter->取消推荐的nvidia驱动->install)
然后按建议添加至路径:
sudo gedit ~/.bashrc
在文件末尾添加
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
改动生效:
source ~/.bashrc
将路径/usr/local/cuda-11.8/lib64通过sudo gedit添加至/etc/ld.so.conf文件,sudo ldconfig生效。
测试CUDA用例看是否安装成功:
cd /usr/local/cuda-11.8/extras/demo_suite
sudo ./bandwidthTest 不报错(result=pass),那么cuda版本应该安装成功。
验证/看nvidia和CUDA能不能共存:
nvcc -V
nvidia-smi
step 2.3 安装深度学习torch tensorflow依赖的cudnn框架
cuDNN Archive | NVIDIA Developer
下载适合CUDA的版本,我下的是v8.9.7-ubuntu22.04-x86_64.deb
然后:
sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-AE31B5F1-keyring.gpg /usr/share/keyrings/ #这一句是直接安装下一句的系统提示
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
cd /var/cudnn-local-repo-ubuntu2204-8.9.7.29
sudo dpkg -i libcudnn8_8.9.7.29-1+cuda11.8_amd64.deb
sudo dpkg -i libcudnn8-dev_8.9.7.29-1+cuda11.8_amd64.deb
sudo dpkg -i libcudnn8-samples_8.9.7.29-1+cuda11.8_amd64.deb
将文件复制到cuda目录:
sudo cp /usr/include/cudnn*.h /usr/local/cuda/include/
sudo cp /usr/lib/x86_64-linux-gnu/libcudnn* /usr/local/cuda/lib64/
验证1:cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
如果输出cudnn版本,则成功;
验证2:sudo apt-get install libfreeimage3 libfreeimage-dev
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
输出Test Passes则成功。注意一定不要用sudo身份。
step 2.4 安装anaconda
参考:
Ubuntu20.04 安装 Anaconda步骤_ubuntu20.04安装anaconda-CSDN博客
一般选anaconda3版本的就行。
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh
bash Anaconda3-2023.03-1-Linux-x86_64.sh
(enter->ctrl c->yes->enter->no不自动启动)
添加至路径:
sudo gedit ~/.bashrc
在文件末尾添加export PATH="/xx our path xx/anaconda3/bin:$PATH"
改动生效:
source ~/.bashrc
验证:
conda -V
如果输出anaconda版本则安装成功。
step 3. 配置3D GS
conda create -n gs python=3.8
source activate gs
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118 //注意安装gpu版本的torch,cu118和cuda 11.8对应。
//建议这个时候检查一下torch是否安装正确#一般不出错,就表示驱动环境正确,就应该submodules不会编译出错,就应该没问题了:
python
>>import torch
>> torch.__version__ #2.0.0+cu118
>>torch.cuda.is_available() #true
>>exit()
然后安装其他依赖:
sudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python plyfile tqdm joblib matplotlib
下载3D GS的github源码,一定要下全--recursive:
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
编译三个子模块:
pip install submodules/diff-gaussian-rasterization //一般到这一步,不报错就成功了。
pip install submodules/simple-knn
pip install submodules/fused-ssim
//如果报错和cuda无关,就说明驱动版本起码是正确的。否则要重装其他版本的驱动,一般是驱动版太低,要装新的。
//报错python setup.py bdist_wheel did not run successfully,是编译环境有问题,和ubuntu&python版本有关系。更新pip的版本并安装wheel和setuptools等编译依赖项pip install wheel setuptools pip --upgrade,但还是不行。细看编译步骤中出现报错#error -- unsupported GNU version! gcc versions later than 11 are not suppor说明编译驱动时把ubuntu22.04自带的gcc11.4更新成了更高版本12.3,这个时候反而和3dgs的submodules要求的gcc版本不匹配,还是要换回11.4,关于多个gcc版本管理与切换参考ubuntu系统管理和切换多版本的gcc和g++_ubuntu更改gcc g++版本-CSDN博客。再pip install submodules应该就没问题了。
训练(我自己采集的数据mySandTable,包含用colmap生成的sparse/0)
python train.py -s ../datasets/mySandTable
出现training progress的进度条就OK了。但是如果CUDA out of memory,就说明GPU显存太小了,3DGS要求24GB,可以调节训练参数(比如迭代次数、densify的训练迭代区间和阈值等,但是没有效果,可能也和我的显存是8GB有关。后面换成24GB就能训练了,感觉还比较快,我的数据集上10min训练完,甚至比一块T4服务器41分钟还要快!)
更多推荐
所有评论(0)