Ubuntu双系统的安装踩坑实录

由于当前导师分配的任务需要用Linux系统跑深度学习,因此在公司电脑上尝试了Ubuntu+Windows的双系统安装。虽然之前已经在云服务器上部署过Ubuntu系统,也接触了一些Linux的终端指令,但是不得不说,这次安装历程真的是命途多舛,感觉把能踩的坑都踩了,每一步都有错。换句话说,每一步也都学到了一些东西。

1. Ubuntu系统镜像的制作和系统安装

1.1 尝试安装Ubuntu16.04

首先,这次的安装是遵循后面会用到的深度学习工具给的一个使用手册。这个使用手册不知道当时编辑者是如何写成的,我照着上面的步骤来做,几乎是一步一个坑,可能主要原因是当时编写的时候Ubuntu还相当古早。从这第一步开始,手册要求安装Ubuntu16.04系统。

安装位置的选择

安装会让用户自己选择需要安装的位置,这个时候需要分辨一下电脑上几张已经插好的硬盘里哪张是空的。我安装的时候才发现原来电脑上插了3张固态。两张是Windows系统的,一个系统盘一个D盘。还有一张是新买的TiPlus5000。使用Ubuntu的磁盘管理查看电脑装了哪些硬盘的时候,只有这张为未划分区域的状态。安装的时候一定要选这张新硬盘。

引导问题–无法安装grub

从Windows系统制作好系统安装盘之后,便开始了安装。安装界面会有快速安装和自定义安装两种选项。一开始图省事,就选择了快速安装,以为会像安装Windows一样丝滑顺畅,可惜不然。安装进度快结束的时候,出现了"无法安装Grub,这是一个致命的错误"这样的错误,然后自动退出了安装程序。几次尝试重装都有这个问题。

后面查了很多资料,发现是新的固态没有划分引导区。电脑从bios到系统的选择是需要引导的。看Ubuntu安装教程的时候也发现了教程里需要在硬盘中划分一个efi引导,但是不知道为什么(后面知道了,16.04版本太老,U盘没法以UEFI模式启动)在我的磁盘划分过程没有划分efi区这个选项。后面实在没办法,选择了一个“为bios预留的区域”作为引导,成功安装16.04。

但是安装16.04之后出现了又一个致命问题,系统无法联网,而且显示分辨率是480p的,还没法改。这下真没办法了。在询问跟我做同一个项目的同学以后,发现安装最新版本的Ubuntu也是能成功搭建环境的,于是果断选择了安装Ubuntu22.04 LTS。

1.2 安装Ubuntu22.04 LTS

引导问题的解决

安装22.04显得要顺滑很多。换了最新版本之后,引导问题也就不存在了。以UEFI模式启动U盘后,分区时便有了efi区这一选项,为efi区分出100M的空间,100G留给根目录,其他全部划给home,继续安装程序,安装完成,grub也安装成功。成功进入Ubuntu系统!
磁盘分区情况

GCC/G++的安装

Ubuntu已经在系统内预装了GCC/G++11。根据文档要求需要安装5.4.0。下载了5.4.0安装包之后一直编译不成功,找不出原因。

后面发现应该是Ubuntu版本太高,可能有些环境已经不支持安装包直接编译,需要用apt-get解析安装环境。在soureces.list中添加xenial的源,即老版本(Ubuntu16.04)的源:

deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src
http://mirrors.aliyun.com/ubuntu/ xenial main deb
http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src
http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb
http://mirrors.aliyun.com/ubuntu/ xenial universe deb-src
http://mirrors.aliyun.com/ubuntu/ xenial universe deb
http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb-src
http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb
http://mirrors.aliyun.com/ubuntu/ xenial-security main deb-src
http://mirrors.aliyun.com/ubuntu/ xenial-security main deb
http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb-src
http://mirrors.aliyun.com/ubuntu/ xenial-security universe

更新源:
sudo apt-get update
查看gcc5可选的版本:
apt-cache policy gcc-5
选择版本进行安装:
sudo apt-get install gcc-5=5.4.0-6ubuntu1~16.04.12
安装成功,g++的安装同理。

多版本管理

安装完gcc5后,系统中就有了两个版本的gcc编译器。这时需要管理多版本的gcc。

查看gcc版本:
gcc -v

查询本机gcc已经安装的版本:
ls /usr/bin/gcc*
这时需要将gcc加入环境,将gcc的优先级设为最高的(最后一项为优先级):
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 50
sudo update-alternatives --config gcc
多版本管理
根据提示,选择gcc-5对应的编号回车即可,最后通过gcc -v查看是否切换完毕。

By the way,系统上的python版本和python3版本也可以用这种方式去管理

显示驱动的安装

lightdm和gdm3

lightdm和gdm3都是显示管理程序。Ubuntu22.04安装时会预装英伟达的显示驱动,但是老版本的。lightdm在Ubuntu启动时调用的便是老版本的驱动,进行显示。若不关闭lightdm直接安装新驱动,会报错“有进程正在使用显示服务”(即X server)无法继续安装。因而在安装最新的显示驱动时,需要关闭lightdm:

service lightdm stop

此时系统会进入纯命令行模式,在该模式下安装即可。

注意在安装最新驱动时需要保证目前环境中选定的gcc/g++和python版本都是最新版本,否则会安装不成功。

python3的系统默认版本也不能改,要保证是最新的(或安装系统后自带的版本)改了之后会出现显卡驱动无法运行的情况!

安装完成后使用命令行打开lightdm:
service lightdm start

安装完成后还出现过系统无法识别nvidia的问题,导致nvidia -smi无法使用。在查阅资料后发现是因为电脑重启后显卡被关闭了,使用的是核显在提供显示服务。这时的典型特征是查看显卡的驱动是已安装状态,并且是最新,但是无法更改分辨率,也没办法nvidia -smi。需要重启显卡:
nvidia-smi -pm 1
这样nvidia -smi就能正确显示信息了。

2. 深度学习环境的搭建

安装深度学习环境需要python+cuda+cudnn+torch,而且版本一定要吻合。本人根据文档要求的版本一步一步做,装了python3.7+cuda10.2+torch1.2。结果您猜怎么着?文档里要求是这么写的,结果深度学习工具给的whl文件里愣是没有跟这个版本匹配的whl!真的是坑人啊。只能把现有环境全部删了重装。

注意安装环境是有先后顺序的。首先要确定该环境需要python的版本,然后确定torch的版本。这时一定要去Pytorch官网翻torch版本匹配的cuda版本,并用官网提供的安装命令去安装torch。要不然下错版本又要重装cuda重新配环境。用pip install torch==x.xx.x这种命令是不靠谱的,因为你甚至不知道下载的是不是支持cuda的版本,并且torchvision也没有安装。

2.1 安装cuda

安装cuda没什么难度,主要就是安装完成后需要在环境中配置好cuda的路径。让系统能够识别到cuda服务。

2.2 pip的问题

在使用pip安装库的时候出现了SSL问题。总是出现SSL error:

Could not fetch URL https://pypi.org/simple/xxx/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host=‘pypi.org’, port=443): Max retries exceeded with url: /simple/xxx/ (Caused by SSLError(SSLEOFError(8, ‘EOF occurred in violation of protocol (_ssl.c:997)’))) - skipping

这个问题的解决方式其实很简单,只要换国内源即可。但是我在换源之后仍然一直出现这个问题,而且发现fetch的 URL居然还是pypi.org。明明已经把默认的源删掉了,换成了清华源,为什么程序还是从国外的源找库呢?经过一番折腾,发现Ubuntu居然有两个pip.config文件。一个在用户目录内,一个在usr的目录内。当你不用sudo去换源时,即直接
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
更改的是用户目录内的pip.config文件。加了sudo,即使用root权限去执行该命令后
sudo pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
更改的是usr目录下的pip.config。而pip install不知为何使用的是usr目录下的configure,因此不加sudo去换源是没有用的。必须用sudo。这可能也是由于我对Ubuntu系统的权限管理不了解导致的的吧。

2.3 使用conda

在第二次安装环境装了一半的时候突然意识到,是不是应该用conda。conda很方便进行多环境管理,不像直接在系统中配环境,下一次要用别的环境了,还得重新配,配完之后环境变了,之前的代码又执行不了了。于是又第二次删除了环境,安装了miniconda,用miniconda直接开了一个python3.7的环境:

conda create -n xxx python==3.7

用conda就方便很多,直接从conda-forge获取库,安装依赖也很方便,conda会自动解析依赖的包,自动下载。至此,环境搭建成功。

总结

由于是第一次使用Ubuntu双系统,也是第一次在Ubuntu上配置深度学习环境,可以说是能踩的的坑都踩了,步步有错,一个不落。但是在踩坑的过程中也学到了很多。为了避免重复踩坑(本人记性较差,在过了一段时间之后总是会出现重复的问题,又重复在垃圾遍地的互联网上找痛苦地找解决方案),故记录一下这次安装经历,也希望能帮助到出现类似问题的人。

附录

装完双系统之后一定一定要第一步就同步双系统的时间!不然会出现很多稀奇古怪的无法连接网络的问题!
timedatectl set-local-rtc 1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值