基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置

基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置详解 CUDA+Cudnn+ROS+anaconda+ubuntu装机必备

  • 笔记本双系统安装
    • U盘启动项安装ubuntu18.04.1
    • 关闭无线驱动冲突(联想)(option)
    • 更新软件源为国内软件源
    • apt-get 锁问题
    • rc.local
    • aria2c + BaiduExport
  • ROS melodic(机器人操作系统)安装
    • Gazebo相关问题
  • CUDA + Cudnn
    • CUDA版本选择
    • CUDA + CuDnn + linux kernel + linux release version + tensorflow 版本对应关系
    • linux内核更新/回退
    • gcc Version变更
    • CUDA 安装 + NVIDIA 驱动安装
    • CuDnn
    • 卸载CUDA
  • Anaconda
  • Roboware

CUDA+Cudnn+ROS+anaconda+ubuntu装机必备)

笔记本双系统安装

配置一个环境是十分重要的事情。再次记录环境配置流程以便自己下次再使用。坑是真的多,每次都要翻个好几遍。先说在前,很有可能你会出错,毕竟这东西本来就是写给我自己的,酌情阅读,成了刷6,备份系统
搭配环境内容有Ros melodic(机器人操作系统18.04对应版本),Cuda=10.0(Nvidia显卡驱动,cuda toolkit) , Cudnn=7. 4.2(深度学习库), RoboWare (ROS IDE), aria2c 和 BaiduExport, 更换deb国内软件源,Anaconda3,联想笔记本关闭无线驱动冲突。

我笔记本型号为 联想Y7000K 2019 , Nvida 1660ti 和 Intel集显(万恶之源!!)

实验室要用zed做目标检测和orb-SLAM。最近先整整软件,之后可能会先几篇有关凸优化和非线性规划的一些理解。ICA,PCA算法讲解,cartographer讲解也有想法。想写的有点多,我看时间吧

U盘启动项安装ubuntu18.04.1

!!!看好我的是ubuntu18.04.1。为什么选这个,主要是CUDA有对应版本要求,具体看CUDA版本对应关系。
1.安装没啥特别多可讲的,直奔Ubuntu官网下载系统镜像。导入到UltraISO制作启动盘。在Windows下预留好空间后直接重启,根据主板型号选择某种方式进入BIOS界面。将u盘拉到首选项后退出BIOS。进入启动盘安装。
2.分区选择,如果无脑装软件,建议根目录多放一点空间。一般deb默认安装到根目录下。/boot单独拿出来放内核备份,/home主要是个人空间。交换空间相当于虚拟内存一般等同于内存大小。
3.选择自定义分区安装ubuntu

挂载点 说明 空间类型 日志类型 空间
/ 根目录 主分区 ext4 30G以上(我天天装一堆垃圾的所以就多分一点)
/boot 引导目录 逻辑分区 ext4 500M以上(如果天天更新Ubuntu这个分区可能会溢出,清理没用的内核)
/swap 交换空间 逻辑分区 ext4 16G以上(虚拟内存做数据交换用,犹豫可等同于物理内存大小)
/home 主目录 逻辑分区 ext4 剩下的空间(自己的文件,软件,下载,书啥的)

4.等着完事就好了。

关闭无线驱动冲突(联想)(option)

我安装完上来就不能上网,联想驱动与ubuntu默认无线网卡驱动是有冲突的。
看一下驱动状况

rfkill list all

打卡本地启动项,开机直接闭掉联想驱动

sudo gedit /etc/rc.local
echo "你的密码" | sudo modprobe -r ideapad_laptop

reboot后可以正常联网

更新软件源为国内软件源

国外的有点慢,下点什么都要等,不过等下载可以看手机和摸鱼。喜欢摸鱼的筒子们就不要看了。
1.备份现有deb源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

2.打开deb源文件

gedit /etc/apt/sources.list

3.注释原文件内的源并添加国内源

#阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

#中科大源(学校还是比较顶)
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

#清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

4.更新源

sudo apt-get update

5.不要使用
下面指令会更新所有源,你的内核版本,系统版本会被更新,这个指令只是摆在这里,不要使用。这介绍一些概念

sudo apt-get dist-upgrade
sudo apt-get upgrade

由于包与包之间存在各种依赖关系。upgrade只是简单的更新包,不管这些依赖,它不和添加包,或是删除包。而dist-upgrade可以根据依赖关系的变化,添加或删除包。
upgrade:系统将现有的Package升级,如果有相依性的问题,而此相依性需要安装其它新的Package或影响到其它Package的相依性时,此Package就不会被升级,会保留下来。
dist-upgrade:可以聪明的解决相依性的问题,如果有相依性问题,需要安装/移除新的Package,就会试着去安装或者移除包。 (有点风险的升级)
6.常用解决包的依赖问题指令
用之前记得安装一下apt-get一下这个包,这个包会通过数据库尝试提供解决依赖方案问题,不是万能的。大量的依赖冲突问题无法解决。

sudo aptitude install <deb>

7.常见修复指令

sudo apt-get -f install

apt-get 锁问题

在ubuntu系统终端下,用apt-get install 安装软件的时候,如果在未完成下载的情况下将终端中断,此时 apt-get进程可能没有结束。结果,如果再次运行apt-get install 命令安装,可能会发生下面的提示:
无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
解决办法如下:

  1. 终端输入 ps aux ,列出进程。找到含有apt-get的进程,直接sudo kill PID。

  2. 强制解锁,命令

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

rc.local

ubuntu 18.04不再有rc.local。开机自启这个还是比较好用的,反正我是装了。
建立软链接 /lib/systemd/system/rc-local.service 链接到 /etc/systemd/system/

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

cat输出一下,可以明白启动顺序和依赖关系

cd /etc/systemd/system/ 
cat rc-local.service
ConditionFileIsExecutable=/etc/rc.local
After=network.target

ConditionFileIsExecutable指定了执行的文件,

After 表示在 network.target 这个target后面进行执行。也就是网络启动完成之后,执行 /etc/rc.local 文件。

[Service] 区块:启动行为,如何启动,启动类型。

Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

创建/etc/rc.local文件,赋可执行权限

touch /etc/rc.local

sudo touch /etc/rc.local
sudo chmod a+r /etc/rc.local

编辑rc.local,添加需要开机启动的任务,加一下启动时依赖的环境。这里是制定通过bash来执行文件,zsh自己改一下。

#!/bin/bash

## 你的code

aria2c + BaiduExport

sudo apt-get install aria2   			#aria2下载
sudo mkdir ~/.aria2    					#新建文件夹 
sudo touch ~/.aria2/aria2.session   	#新建session文件
sudo chmod 777 ~/.aria2/aria2.session 	#设置aria2.session可写 
sudo vim ~/.aria2/aria2.conf    		#创建配置文件
dir="你的路径"
disable-ipv6=true

#打开rpc的目的是为了给web管理端用
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
#rpc-listen-port=6800

#断点续传
continue=true
input-file=~/.aria2/aria2.session
save-session=~/.aria2/aria2.session

#最大同时下载任务数
max-concurrent-downloads=20
save-session-interval=120

# Http/FTP 相关
connect-timeout=120
#lowest-speed-limit=10K
#同服务器连接数
max-connection-per-server=10
#max-file-not-found=2
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M

#单文件最大线程数, 路由建议值: 5
split=10
check-certificate=false
#http-no-cache=true

不多说,网上教程一堆
开启命令加-D 可打开后台下载。懒得记这条指令,在rc.local里面加入可开机自启。

sudo aria2c --conf-path=~/.aria2/aria2.conf

可视化使用Aria2GUI 或者 web yaaw,可以可视化进度并设置最大连接数,流量控制,没太多好讲,只需要注意检测口设置本地回环,端口号为6800。

ROS melodic(机器人操作系统)安装

添加入ROS源。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

或者添加中科大国内ROS镜像源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

设置密钥

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

有可能你在用这条指令时有授权过期问题,注意报错信息会提供No publication xxxxx。记住新密钥后,更新上条指令密钥。

更新源,安装ROS

sudo apt-get update
sudo apt-get install ros-melodic-desktop-full

安装完成后,可以用下面的命令来查看可使用的包:

apt-cache search ros-melodic

初始化ROS

sudo rosdep init
rosdep update

将ROS主路径加入环境中,直接在~/.bashrc里改也可以。我用的是bash,zsh或者其他shell不同。

 echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

一些插件

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

roscore测试就好了

当从网上git什么东西时,缺一堆依赖项,使用下面命令,指定workspace和ROS版本号,安装相关依赖项。

rosdep install --from-paths WORKSPACE --ignore-src --rosdistro=ROSDISTRO
rosdep install --from-paths src --ignore-src --rosdistro meldoic -y

Gazebo相关问题

一个是你的显卡需要装驱动,另一个是你第一次打开直接卡住。默认第一次打开从国外下载model模型。
ROS gazebo model ORSF
开源机器人组织放的模型
解压放到~/.gazebo/models路径下

CUDA + Cudnn

搞深度学习都希望用GPU加速计算自己的算法。尤其是做视觉方向的。异构并行GPU多核处理远远快于传统cpu串行处理速度。只要你的网络结构设计到大规模矩阵运算,卷积运算。差别就更大了。cpu版本的框架3层for循环计算卷积层权重,GPU可以利用多核的力量并行计算。GPU不多说,i7版本6核,训练直接满载,就不要想还有功夫给你超线程。GPU上千核,单核能力不如i7单核,但我人多啊。不要问,问就是Nvidia。

CUDA版本选择

不要认为越高越好,选择路线如下
Nvidia驱动版本>CUDA版本=cuDnn版本>你要的学习框架(TensorFlow,pytorch,MXnet,etc)

CUDA + CuDnn + linux kernel + linux release version + tensorflow 版本对应关系

你可能尝试上来就装你的CUDA,要不就是Geforce的驱动。然后你的电脑要不是循环登陆,要不就是图形分辨率出错,或者更多奇怪的bug。比如我,我在BIOS关闭集显后,屏幕背光没有办法调整。我很无奈。Intel集显在Ubuntu是绝对的王者,完美搭配Linux环境。Nvidia嘛,就有点坑。
不多说,更详细的信息在Nvidia CUDA toolkit 官网

基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置_第1张图片

每个CUDA文档给了各个版本关系,自己需要做调整。CUDA自带驱动,但是Cuda toolkit并不带驱动 ,分开还是合着装看你的咯。

基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置_第2张图片

tensorflow版本信息
bb一句,学习框架的选择似乎每个人都有不同的见解主流框架Mxnet,Pytorch,CNTK,Caffe,Theano。选择很多,如果你只是一个刚入门的萌新,那么你所要关注并不是这些框架哪个性能好,速度快,灵活,文档丰富,等等。这基本不是你要考虑的内容。你最需要关注的就是哪个框架生态好,社区好。这样你可以利用这些资源快速入门和学习。

显示Nvida系列驱动模块,如果什么都没显示而且你的确装了这类东西。你的主板驱动需要更新一下。

lspci | grep -i nvidia

显示ubuntu release和分版本号,看看你的内核ok不ok

uname -m && cat /etc/*release

linux内核更新/回退

安装内核不同可能导致失败。
当前内核版本查看

uname -r

假设我安装kernel = 4.4.0-98-generic

sudo apt-get install linux-image-extra-4.4.0-98-generic

查看安装成功

dpkg -l | grep 4.4.0-98-generic

更新引导

sudo update-grub

升级内核同理
但你可能需要更改默认内核启动位置

gcc Version变更

查看当前C/C++编译版本

gcc --version

有些版本不能在apt上下载,系统装机默认的是7.4.0。我就写一下如何改到其他版本gcc

gcc 网站
下载自己想要的版本。

根据压缩格式解包

tar zxvf gcc-7.3.0.tar.gz

新生成的gcc-这个目录被称为源目录。
目标目录(用objdir表示)是用来存放编译结果的地方。gcc建议编译后的文件不要放在源目录
建立新的目录存放构建文件,名字无所谓,路径写好就行

 mkdir //
 cd gcc-bulild-

在目标目录 构建文件下配置下,配置的目的是决定将GCC编译器安装到什么地方,支持什么语言以及指定其它一些选项等。其中,源文件不能与构建文件或者目的路径相同。

配置是通过执行源文件下的configure来完成的。其命令格式为
将gcc安装到/usr/local/gcc-目录下。
在构建目录下

 ../gcc-7.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

将gcc安装在/usr/local/gcc-7.3.0目录下,支持C/C++

在构建文件下编译,解释一下-j表示你编译时想用的核心数量,自己看看cpu在写。生成makefile。

make -j12

执行makefile将编译好的库文件等拷贝到目的目录中

sudo make install

至此,gcc 7.3.0安装过程就完成了。

我加一句,假设你的确成功安装了指定版本gcc(比如你用apt),/usr/local/下也有你的gcc版本,但你终端显示版本仍然是原来版本,即你没有新定义软链接。bash默认调用/usr/local/gcc而你的叫/usr/local/gcc-。ln做软链接即可成功改过来

假设,我说的是假设 你的kernel版本满足要求,下面指令解决kernel header问题。

sudo apt-get install linux-headers-$(uname -r)

CUDA冲突,下面指令卸载cuda,XY为你的Cuda 版本

sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl

要安装驱动,必须首先禁用Nouveau驱动程序。 Nouveau是linux默认第三方驱动,Linux的每个发行版都有一个禁用Nouveau的不同方法。
如果以下命令打印任何内容,则会加载Nouveau驱动程序:

lsmod | grep nouveau

/etc/modprobe.d/blacklist-nouveau.conf中创建一个文件,其中包含以下内容:

blacklist nouveau
options nouveau modeset=0

更新内核,reboot后lsmod无法搜到Nouveau

sudo update-initramfs -u

CUDA 安装 + NVIDIA 驱动安装

我是被坑了,我一开始使用cuda默认的驱动,反正安完显示驱动出问题。它自带的驱动不一定适合你的显卡,在官网找你的驱动支持的型号,分开安装。安装驱动时要关闭图形界面。18版本不再支持使用lightdm关闭界面。只安装CUDAtoolkit不需要关闭图形界面。
安装驱动时,安装程序还会询问是否应安装openGL库。如果你的显卡不是NVIDIA GPU,那就不要安装NVIDIA openGL库。否则你的非Nvidia的显卡下的openGL库会被覆盖掉(对就是你那该死的intel集显)。然后你得到图形界面无法工作。 如果执行单行安装,则应使用–no-opengl-libs选项来阻止安装openGL库。
/etc/X11/xorg.conf可能需要修改。在某些情况下,nvidia-xconfig可用于自动生成适用于系统的xorg.conf文件。对于非标准系统,具有多个GPU的系统(比如你有个集显),建议手动编辑xorg.conf文件。我就不多bb了
新的关闭图形界面方法,记得reboot

sudo systemctl set-default multi-user.target

开启图形界面

sudo systemctl set-default graphical.target

CuDnn

CuDnn 下载位置

sudo cp cuda/include/cudnn.h /usr/local/cuda-10.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64
sudo chmod a+r /usr/local/cuda-1.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*

卸载CUDA

卸载Cuda

sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl

驱动卸载

sudo /usr/bin/nvidia-uninstall

或者apt-get强制卸载

sudo apt-get autoremove --purge nvidia*

Anaconda

做为最好用的环境docker,我觉得应该要装上。建立了一个docker来存放不同的环境。如果你十分喜欢往自己/lib下堆一堆东西,最后导致依赖问题。那我也不阻拦。
介绍一下常用指令
环境创建

conda -V						#显示版本
conda list						#显示当前环境下的包
conda create -n env-name			#新建环境
conda create -f environment.yaml			#根据yaml配置文件创建环境
conda env-name export > enviornment.yaml #导出yaml配置文件到当前路径
conda info --envs			#显示所有环境名字
conda update					#更新conda版本
conda search package-name			#查询conda下包的信息
conda install package-name=		#安装指定版本或者最新的包
conda remove package-name					#删除包
conda remove --all									#清空环境
source activate env-name						#激活一个环境
sourve deactivate										#退出当前环境,进入base下

pip也可以安装,不多讲。
加入你init了conda,安装下有一个选项。恭喜你,你的roboware IDE可能不好使了。在bash下查看python显示链接到anaconda下的。ROS目前只支持python2,未来将支持python3.记得创建一个ros环境使用python2

Roboware

github Roboware

没太多可讲,ros专用IDE,挺好用的。

这次就到这吧,忒累了。

你可能感兴趣的:(Ubuntu环境配置,环境配置,ubuntu,CUDA,ROS,melodic,Anaconda)