双系统删除并重新安装Ubuntu,配置ROS+深度学习开发环境全过程
前言
由于各种各样的原因,已经装好的双系统里的Ubuntu崩了(主要是因为不成气候的deepin wine), 实在忍无可忍,所以重新安装Ubuntu系统。下面是记录。篇幅比较长,建议看着目录找到需要的部分进行阅读。
1. 准备工作
1.1 制作启动盘
首先进入windows系统,下在ultraiso软件,根据网上的教程制作一个系统盘。总的过程就是,先准备一个可以格式化的U盘,在ubuntu官网上下载一个ubuntu的镜像,然后使用ultraiso软件将镜像写入到格式化后的U盘里面。开机的时候选择U盘启动,进入系统盘之后按提示安装Ubuntu。
1.2 使用windows自带工具删除Ubuntu系统
这是一种比较紧单粗暴的方法,右键"我的电脑,选择"manage"或者中文的"管理",然后在子硬盘管理下面删除掉Ubuntu系统相关的卷,一般来说应该是不带盘符的那几个卷,其中还会包括一个EFI system partition的盘(引导系统启动用的),要自行区分好,不要删错了。
1.3 命令行删除引导分区
https://blog.csdn.net/qq_38662733/article/details/106575897 查看这个链接。常用到的指令有
- diskpart
- list disk
- select disk <序号>
- list partition
- select partition <序号>
- delete partition override , 这个指令删除系统分区
2. 安装和配置Ubuntu系统
2.1 设置开机启动项
进入电脑的bios界面,不同电脑品牌对应的快捷键不一样,自行百度。设置为U盘启动。
2.2 关于Acer Nitro5 这台笔记本
对于Acer Nitro5 笔记本电脑,是F12进入,如果进入不了的话应该是被disable了F12选择快速启动项的功能(进入bios之后,advanced菜单里有一个F12 boot menu的选项,选择启用下次就能够直接按F12了),这时候可以开机按F2进入bios界面,在boot菜单下选择启动顺序。另外,我还在网上看到有人问怎么把SATA模式改为AHCI,而不是默认的Optane with RAID模式。这是Acer比较鸡贼的地方,网上几乎没有教程提到怎么做。其实是可以的。进入BIOS后,在Main菜单栏下,按键盘的CTRL+S,这时候会多出一个选项,就跟玩游戏弹出了一个隐藏关卡一样,甚是有趣。
2.3 关于分区
安装的时候分区选择,只需要配置最重要的三个部分:
- /boot
- swap
- /
总共的系统空间是180G左右,其中/boot我给了800MB其实是有点大了, swap area实际上是虚拟内存的空间,我给了20G,剩下的都分给了根目录,根目录会自动生成其他文件夹,所以只需要配置这三个分区即可。
由于如何安装Ubuntu系统这部分网上的教程数不胜数,再次不再鹦鹉学舌了,诸君自行百度搜索即可。
2.4 安装一些小工具
2.4.1 系统小插件
- gedit
- terminator
- htop
- tree
- gparted
2.4.2 修改键盘映射
如果是德语键盘的话,更改键盘的映射,让y和z对调,这样打字母就跟美式键盘一样了。更改的方式如下:
xev
然后分别按下键盘的y键和z按键, 可以看到查看keycode, y键对应的是52, z对应的是29
我们把两者对调一下:
sudo cp /usr/share/X11/xkb/keycodes/evdev /usr/share/X11/xkb/keycodes/evdev.bak
sudo gedit /usr/share/X11/xkb/keycodes/evdev
保存, 退出, 重启, 就能做到按下物理z按键,屏幕上对应输出的是y字母了。
2.4.3 截图软件及全局快捷键设置
截图软件推荐使用flameshot, 它的安装和全局快捷键配置如下:
sudo apt-get install flameshot
在设置中添加快捷键
2.4.4 中文输入法
安装搜狗输入法的流程已经在前面的博客写了,可以参考:Ubuntu20.04安装搜狗输入法 教程里有一个地方没有说到的是要先装fcitx, sudo apt install fcitx, 然后再按照教程的流程走。安装完后,怎么切换输入法呢?可以在这里下图这里查看,但是这里切换的是系统的输入法,也许是ibus插件的,总之,安装完搜狗输入法之后,需要查看的fcitx输入法界面下的切换输入法全局快捷键如第二张图所示快捷键是:ctrl+space,也可以自行设置。
2.4.5 chrome浏览器
cd Downloads/
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
google-chrome
最后再把chrome固定在左侧的dashboard中,以后直接单击就能打开。 这时,火狐浏览器就可以退役了。
2.3.6 Nvidia显卡cuda toolkit和cuDNN的安装
关于Nvidia,有几个概念是需要知道的, nvidia是一家设计显卡的公司名字(废话),
- CUDA :是显卡厂商NVIDIA推出的运算平台,全称:Compute Unified Device Architecture,可以理解成一个我们不需要了解的并行计算模型,且他不需要与显卡硬件驱动 CUDA Driver适配。
- CUDA Driver: 与实际硬件适配的驱动。
- NVCC: 显卡的编译器
- CUDA TOOLKIT :CUDA TOOLKIT 包含了一系列的编译器,科学计算库,一堆的API,CUDA Driver 是CUDA TOOLKIT 的子集,所以安装CUDA TOOLKIT一定会同时安装CUDA Driver,反之则不是。
- cuDNN :全称NVIDIA CUDA® Deep Neural Network library, 是一个专门为了深度学习开发的库,有了它,才能在pytorch, tensorflow上使用Nvidia的GPU训练网络。
可以参考这位博主的详细讲解, https://blog.csdn.net/qq_42406643/article/details/109545766, 安装不迷茫!
上面讲了这么多,重点来了。不同的需求需要安装的东西是不一样的:
- 电脑看视频,分屏功能,玩游戏,剪辑视频需要用到显卡加速: CUDA Driver 就够了。
- 训练深度学习网络: CUDA TOOLKIT以及cuDNN
如果是后者,那么我们需要关注版本适配的问题,前面说到了安装CUDA TOOLKIT会同时安装CUDA Driver, 而不同显卡适配的CUDA Driver是不同的。所以相当于CUDA TOOLKIT的安装版本由显卡型号决定。而cuDNN负责沟通深度学习和显卡计算平台,需要与计算工具CUDA TOOLKIT适配。剩余的pytorch, tensorflow相应的需要与计算接口cuDNN适配。所以这所有的错综复杂的关系最终可以串称一条单向的关系链。
显卡型号 -> 决定CUDA Driver版本 -> 决定 CUDA TOOLKIT的安装版本 -> 决定cuDNN 版本 -> 决定pytorch和tensorflow版本
搞清楚了这些,我们开始搜集线索,开始安装我们的驱动。下面给大家推演一遍:
手上的显卡是RTX 3050,
https://www.nvidia.com/zh-tw/geforce/drivers/ 适配的CUDA版本有495到515。
直接上CUDA TOOLKIT, 通过查阅官方的适配文档 https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html 可以看出,cuda toolkit需要选择11.5及以上的版本。
下面的表格是最低版本要求:
进一步看cuDNN 的版本 版本下载的链接中有提示 https://developer.nvidia.com/rdp/cudnn-archive
根据pytorch的安装指令 https://pytorch.org/get-started/locally/
根据显卡的算力确定版本类型, tensorflow需要cuDNN在8.1.8版本及以上,适配范围比较广,且暂时用不上,先不管。
https://www.tensorflow.org/install/pip , https://developer.nvidia.com/cuda-gpus
综上,对于Geforce显卡RTX系列3050型号版本的Nvidia显卡,我们选择下载的版本是:
本着使用不太新又不太旧的原则,我们在https://developer.nvidia.com/cuda-toolkit-archive中选择了cuda toolkit 11.6.1的版本适配pytorch中最新的类型
将上面的指令都执行完后,重启电脑。然后在命令行中输入命令
nvidia-smi
可以得到CUDA的驱动版本和CUDA的版本,以及GPU的内存使用情况
然后是配置bashrc中的环境变量,在文件末尾添加两句话:
export PATH="/usr/local/cuda-11.6/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH"
关闭终端再打开,输入nvcc -V命令,有输出则表示安装得妥妥的。
最后我们再来安装一下cuDNN,然后再在下文新建的ros工程下跑一个cnn的demo验证cuDNN安装是否成功。
cuDNN的安装过程极致简洁,我们通过nvidia-smi命令已经确认了CUDA TOOLKIT的版本是11.6,也就是说现在激活的是 /usr/local 路径下的 cuda-11.6 文件夹,我们只需要把cuDNN的静态链接库等文件复制粘贴到对应的文件夹下即可。但,起码11.6版本是只有deb安装包,直接下载安装即可。
-
先下载cuDNN安装包
如果稍微认真一点观察,不难发现,cuDNN v8.3之后只需要下载ubuntu对应的deb包就行了,不需要再下载压缩包然后把某部分代码复制粘贴到指定的文件夹下。登录官网账号,下载,然后
所以我直接下载了deb包,安装即可,完美。
-
接着使用我们前面VAE笔记 从零点五开始的深度学习笔记——VAE(Variational AutoEncoder) (三)VAE的简单实现中的pytorch工程,验证能否使用gpu训练
将程序中的device改为使用程序判断是否能够使用GPU 也就是cuda
然后在终端里面输入 $ watch -n 1 nvidia-smi ,表示1秒钟观察一次GPU的状态。
由上图可见运行没有问题,GPU正常运行。
3 ROS和深度学习相关软件配置
3.1 Anaconda
3.1.1 安装过程
进入anaconda的官网: https://www.anaconda.com/products/individual, 直接下载安装包
cd Downloads/
bash Anaconda3-2022.05-Linux-x86_64.sh
一直按enter,弹出提示之后按yes,同意条款。 安装路径选择选择yes使用默认路径。当问道是否想要安装器运行conda init来初始化anaconda3的时候,选择no.
最后修改环境变量,将anaconda的路径加入到bashrc文件中
gedit ~/.bashrc
把安装路径的二进制文件夹附加到路径中, 在bashrc文件最后面添加:
export PATH=“/home/<用户名>/anaconda3/bin:$PATH”
如果是首次使用conda activate的话,输入下面的指令。这条指令会在bashrc文件中添加一些conda相关的命令。
conda init bash
但这样会导致每次开终端都有个base环境,太丑了,并且ros使用的python环境跟anaconda的不一样。这时可以参考这位博主的做法,https://blog.csdn.net/moshiyaofei/article/details/122062672 更改conda的默认配置,在home下面新建一个.condarc, 在文件中添加指令auto_activate_base: false, 该指令会关闭anaconda自动启用base环境的功能。
gedit ~/.condarc
auto_activate_base: false
保存后关闭终端,再开一个新的。输入下面命令行验证一下安装是否成功
conda -V
python3
开一个新的终端,试着输入python, 如果弹出错误,则执行:
sudo ln -s /usr/bin/python3 /usr/bin/python
将python3 软链接到python这个指令里面,如果弹出了这个错误:
ln: failed to create symbolic link ‘/usr/bin/python’: File exists
则删除这一项之后再继续执行软链接:
sudo rm /usr/bin/python
3.1.2 常用指令
conda env list
conda activate <环境名>
conda deactivate <环境名>
conda create -n <环境名> python=<版本号>
conda install <包名>=<版本号或者不需要给这个参数>
conda remove -n <环境名> --all
3.2 ROS-Noetic
3.2.1 命令行安装
参考链接:http://wiki.ros.org/noetic/Installation/Ubuntu
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt install ros-noetic-desktop-full
3.2.2 bashrc中添加环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.2.3 其他
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
3.2.4 安装验证
roscore
完工
3.3 vscode
3.3.1 安装过程
vscode主要用于ros编程,还有pytorch编写神经网络程序。虽然Ubuntu安装完成后,系统有提示说Ubuntu Software里面有vscode这个软件,但是我还是偏向于自己下载vscode安装包 https://code.visualstudio.com/ 用命令行安装,避免出现奇奇怪怪的问题。
cd Downloads/
sudo dpkg -i code_1.70.2-1660629410_amd64.deb
code .
3.3.2 常用插件
下面我们下载一些vscode常用插件, 这篇博文 https://juejin.cn/post/6996188623305441287 里面记录了36中常用的vscode插件,我们挑选了一些用过且需要的进行安装:
- Material Icon Theme
- Power Mode
- vscode-fileheader
- better comments
- todo highlight
- Bracket Pair Colorization Toggler
- Path intellisense
- todo tree
- code runner
还有一些开发环境需要的插件
- c/c++
- c/c++ extension pack
- python
- python extension pack
- python indent
- ros
- catkin tool
3.4 pytorch
3.4.1 安装过程
我们先创建一个虚拟环境,将其命名为env_pytorch 然后根据pytorch官网的提示,输入相应的命令。
conda create -n env_pytorch python=3.7
conda activate env_pytorch
conda install pytorch torchvision torchaudio cudatoolkit=11.6 -c pytorch -c conda-forge
3.4.2 验证
新建一个python脚本,然后导入torch模块,查看pytorch版本,如可以运行,则安装成功。代码如下:
import torch
if __name__ == '__main__':
print('Examine whether Pytorch is installed successfully!')
print(f'PyTorch version: {torch.__version__}')
运行成功,没毛病!
3.5 tensorflow(博主知识盲区,TODO)
知识盲区,暂未涉及,待定
4. 创建一个ros工程示例并以vscode作为集成开发环境示例
4.1 初始化ros空间
先使用命令行初始化一个ros工作空间,注意关注ros工程的文件结构以及在什么路径下执行什么命令行
mkdir -p csdn_ws/src
cd csdn_ws/src/
catkin_init_workspace
cd ..
catkin_make
code .
编译完成后,我们来看一下整个文件的结构,由于我们实现已经安装了ros的插件,所以vscode会自动识别出这个工程文件,自动添加了.vscode这个文件夹。
4.2 创建ros包
接着我们再创建一个ros包,按提示依次输入包名hello_rospack和依赖包名roscpp rospy std_mgs geometry_msgs sensor_msgs 使用空格隔开即可。
4.3 配置编译快捷键
点击config default build task, 在弹出的窗口中选择catkin_make:build
这个时候, .vscode 文件夹下会多出一个tasks.json的文件,这个文件可以将快捷键与终端执行的命令行链接起来。这里我们将编译的类型改为Release。
最后直接使用键盘ctrl+shift+B,就可以愉快地编译工程了,并没有特别复杂的操作。
4.5 配置vscode切换anaconda虚拟环境
首先键盘输入ctrl+shift+P,召唤出输入框,然后输入Python: select interpreter, 这时候会弹出所有可选的环境类型,选择其中一个,比如我选了新建的env_pytorch, 之后,使用在ros包中创建一个python文件,然后点击python文件的编辑界面。可以看到右下角多了一个新的东西,有的vscode版本会出现在左下角。单击他可以切换环境。
以上就是我从下午两点多决议重装系统,傍晚做了个饭,晚上继续撸到快十二点,间间断断地实践,总共装卸了两次,总结出的Ubuntu 20.04系统下,RTX3050显卡,从零开始配置的ROS+深度学习编程环境的总结。将会不定时更新。
希望对刚入门的同学有所帮助。祝明天搬砖愉快!
2022年8月28日
Dianye Huang