最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

从零开始安装linux双系统(ubuntu)深度学习环境配置踩坑全记录(pytorch,cuda,anaconda的安装、简单的linux讲解)

业界 admin 5浏览 0评论

前言

本人电脑2022年买的联想游戏笔记本win11,在做深度学习的时候遇到一些需要linux环境的项目,不得已配置了linux环境,不过也一劳永逸了。在此期间踩了非常多的坑,重装了三次系统,分享给大家。
我最重要的心得是:
1)重写代码比debug省时间,重装系统也比debug省时间。
2)一种方式不行,多换几个方式试试。
3)多上b站(主要是装双系统),多上CSDN看(主要是配置ubuntu)。
4)多问AI大模型


本文介绍了从0开始安装并配置ubuntu深度学习环境,解决了一系列可能出现的bug,并整合了大量资源链接。从选购硬盘、U盘开始,对硬盘分区进行管理、格式化,制作引导启动盘,设置bios,ubuntu初始配置,安装nvidia驱动,cuda,cudnn,anaconda配置pytorch深度学习环境与版本兼容问题,磁盘挂载与共享,制作镜像,介绍了基础的linux知识和磁盘管理知识。

推荐链接:
b站机器人工匠阿杰的Windows 和 Ubuntu 双系统的安装和卸载
搭建舒适的Ubuntu使用环境系列——从零到一搭建深度学习生产环境

选购硬盘和U盘

补充小知识:(可以在网店里看这些数据信息,也可以问客服)

  • 硬盘的介质分为SSD固态硬盘和HDD机械硬盘
    (1)SSD固态硬盘,读写速度快,存储稳定,较贵。出厂的时候一般电脑自带的就是SSD固态硬盘,一般用来装系统,因为性能好。
    (2)HDD机械硬盘,读写速度慢,容易损毁,但内存一般较大,也更便宜。

深度学习中训练时需要频繁从内存中读取数据,而且图形学进行渲染的时候也要频繁读写内存,所以笔者选取了固态硬盘。

  • 从安装角度来说又分为内置硬盘和移动硬盘。
    (1)内置硬盘需要拆开电脑安装,较为便宜。一般电脑都带有一个新加装硬盘的位置,要注意是PCle4还是SATA接口。
    (2)移动硬盘,便携,类似于U盘。使用USB接口连接到电脑,需要注意USB接口的版本(三叉戟的图标)

硬盘分区:电脑中初始的硬件实际上是一块硬盘,但是经过人为分区,分成了C盘和D盘,其实它们的内存是相连的,可以合并为一块大硬盘。注意:不连续的内存不可以合并。在windows中的“搜索栏”中,输入“磁盘管理”,可以看到如下信息,并可以右键点击对硬盘进行格式化和分区管理:新建分区、删除分区。
关于更多磁盘的管理,请看:关于电脑磁盘的管理

格式化:windows系统是识别不了linux的文件系统的,也识别不出来一块完全空白的内存数据,因为一块内存需要格式化为一个文件系统,例如windows的NTFS,或者linux的ext4(我们在虚拟机中也能看到这种格式的文件),这样才能被操作系统识别,进行管理。也因此,原有的数据都会不再被找到。

U盘-启动盘:安装新的linux系统需要一个U盘作为启动盘,如果对U盘没有需求的话,选择一个内存大于8G的硬盘应该就行,我买了一个新的64G的U盘。注意这个U盘的内容是要全部格式化的,请提前把U盘中的内容备份,否则会被完全清除。
制作完启动盘之后,windows系统是搜不到这个硬盘的,我们使用DiskGenius软件可以重新对其进行格式化。
硬盘:新的linux系统需要装在适合装系统的硬盘里,安装操作系统需要较高的性能,所以建议安装在SSD固态硬盘中。笔者在网购时,商家普遍反映他们的硬盘不建议安装linux系统,所以笔者最终决定把linux系统安装在原有的D盘中,从D盘新划分出128G的内存。

新加装一个系统也需要分配大量的内存,尤其是深度学习中要下载数据集,我原来的硬盘没有空间了,所以买了一个新的1T大内置SSD硬盘,平均划分为4部分,一个分给linux私有,两个给windows和linux共享,最后一个给windows。

linux有一个版本可以专门装在移动硬盘中,称为Linux to go,可以自行了解。

下载ubuntu镜像

这里建议安装ubuntu 22.04LTS。一来是22年新出的版本,和很多新的电脑更加适配;二来是网上的教程和问题讨论比较多,出了问题也好解决。三来已经出了几年,是一个比较稳定的版本,可能比24年的更稳定,CSDN和b站上相关文章更多
如果你按照20.04LTS出了问题,那我强烈建议换成22.04再试一下。

腾出磁盘空间

从这一步开始,就可以参考b站机器人工匠阿杰的Windows 和 Ubuntu 双系统的安装和卸载完成安装ubuntu的全部流程,他的视频实在是非常详细,非常推荐去看!!!

遇到问题,也可以参考该up主的另一个视频:Windows11 安装 Ubuntu 避坑指南,很可能有解决方案。

当然,不出意外的话肯定要出意外,每个人的问题都不一样,正常的流程我就不赘述了,下面分享一下我在按照他的教程执行时出现的问题,以及我的解决方案。

进入bios界面,设置引导启动选项

联想电脑可以参考视频一看就会!8分钟真机安装【Ubuntu/Windows】双系统直接安装linux。但我的电脑在这里出现了蓝屏问题。
更普遍适用的是开机狂按F11,需要进行几个配置:
(1)调整开机启动(boot)顺序,把你的U盘移到最上方
(2)有可能需要把显卡模式切换成独显直连,而不是混合显示

(重要)防止黑屏:修改ubuntu启动配置选项

英伟达的驱动很有可能出问题导致电脑黑屏,所以不如预防性的把这些问题都处理掉,可以参考该视频:NVIDIA显卡的Ubuntu驱动程序安装方法

bios启动后首先ctrl+E进入设置页面,把splash后面—换成nomodeset

因为linux在开发的时候和英伟达起了冲突,开发者一怒之下自己研制了nouveau驱动,并默认推荐给大家使用,但是这个驱动问题特别多,所以你遇到的大多数问题都是和驱动有关的,请参考之后的章节:nvidia驱动相关的bug参考

开机后要做的几件事

  1. 设置一个超级简单的用户名
  2. 使用gedit工具,需要sudo gedit /etc/default/grub 修改关于开机nouveau的配置文件!并且sudo update-grub更新,这样你就不必每次开机都修改nouveau的配置了。sudo gedit /etc/modprobe.d/blacklist.cof,末尾添加blacklist nouveau把它加入黑名单中。
  3. 在grub中配置"GRUB_DEFAULT":设置默认启动的操作系统。可以是一个数字(表示菜单中的位置,从 0 开始计数)或一个特定的菜单项名称。这个数字需要在bios页面中查看,把默认启动设置为windows。
  4. 首先联网
  5. sudo apt install build-essential,安装一些make等必要的包
  6. 安装中文输入法ibus-pinyin,在CSDN上可以搜到,这样你就能在网上使用通义千问、CSDN了。

nvidia驱动

非常建议首先安装英伟达显卡,否则,你辛辛苦苦配好了其他环境,结果在配显卡这步让电脑崩了,之前的辛苦就白费了(别问我是怎么知道这一点的)

安装前强烈建议更新你的gcc,g++编译器至少到12版本,光使用sudo apt install gcc==12还不够,因为之前的gcc还在,执行gcc --version应该找到的还是之前的版本,需要使用update-alternatives相关命令来设置软链接,让gcc命令指向新安装的版本
ubutu18.04 使用update-alternatives 对python和python3进行版本管理

linux软链接ln -s src dst,经常能用到的一个命令,可以用来设置快捷方式。
Linux默认的命令是python3而不是python,可以执行sudo ln -s /usr/bin/python3 /usr/bin/python,这样,执行python --version才会出现想要的结果。
linux自带的Python版本可能是3.8,如果我们想要3.9版本的Python,安装之后,还要执行sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2,最后的2表示设置优先级为2,原来的优先级为1,此时执行sudo update-alternatives --config python3会看到:

bash
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8   1         auto mode
* 1            /usr/bin/python3.8   1         manual mode
  2            /usr/bin/python3.9   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

星号表示当前选中的版本,输入2并按回车,执行python --version,你会看到新的版本

英伟达官网提供了多种方式,注意安装和你电脑显卡适配的驱动:
(1).deb文件,需要本地使用dpkg(类似apt,yum)安装软件包,官网上给了详细的指令,一步一步参考就行了
(2)runfile方式,本地执行该.elf文件,网上有教程,我是这么安装成功的。
(3)你也可以在ubuntu的系统设置中找到driver的设置,并选择一个稳定的(例如带server的)、版本较高的显卡驱动版本安装,例如535。
(4)你在安装cuda的时候,系统也会建议你把原来的驱动卸载了,帮你安装一个和cuda更加适配的driver版本

如果一种方法安装失败,可以多试几种方法,总有一种会成功!

可以参考这个链接

这时:输入nvidia-smi能看到结果了

如何卸载nvidia:
sudo apt-get purge nvidia*
我执行过无数次这个命令,purge表示删除配置文件
一般不建议使用sudo apt autoremove

小知识:apt, apt-get, dpkg
dpkg 是管理软件包的工具,软件包是.deb格式,因此runfile方式安装的cuda,无法通过dpkg来管理,只能手动找到该部分并rm -rf;最常用的是 dpkg -i xx.deb指令表示install,以及 dpkg -l | grep xx指令,寻找已经安装的软件包。

删除无用的软件包:dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge
dpkg 命令使用
Linux小工具(4)之apt软件管理
apt 和 apt-get的区别(建议使用apt)
小知识:grep命令和vim工具
一般我们使用最多的命令就是ls, cd, grep, sudo, vim。要熟悉这些工具的使用
最常用的是ls -a | grep xx命令,一般grep接收前面管道符号传过来的字符并进行搜索

小知识:环境变量和权限:
你在使用Linux安装各种东西的时候,很可能遇到权限问题,使用nano,vim等工具编辑环境变量的时候,也难免遇到权限问题。笔者就非常弱智的把重要东西安装在/root目录下了,结果每次执行的时候都需要root权限。
使用ls -a查看文件权限,sudo su切换为root用户
如何修改权限:使用chmod是最佳选择
sudo chmod -R u+rw /usr/anaconda3
-R表示递归作用于整个文件夹, u表示user,也可以换成g,o,+后边跟rw表示添加write, read权限,从左到右分为user , group , other,详细请看这篇文章
sudo chmod -R 777 /usr/anaconda3
7表示wrx(4+2+1),可写:4、可读:2、可执行:1,作为普通用户,我们要关注最后一个数字7,如果最后一个数字是7,就代表我们普通用户对该文件有所有权限。
sudo chown -R $(whoami) /usr/anaconda3
改变目录的拥有者为用户本人。

系统通过环境变量找到你安装的东西。
~/.bashrc,一般存放用户的环境变量,~表示当前用户的根目录
/etc/profile,一般存放系统的环境变量
export PATH=/usr:$PATH后边的:表示路径间的分割符,在原来的环境变量多个路径后追加一个路径,如果没有:$PATH,那原来的路径会被覆盖。

nvidia驱动相关的bug参考

我最主要的bug是开机卡在dev/sda1: clean, 552599/6111232 files, 7119295/24414464 blocks界面
可以参考下面两个链接:
https://blog.csdn/u013862444/article/details/103005800
https://blog.csdn/AiBigData/article/details/119701227
每次(出bug的时候)开机的时候都最好执行ctrl + E 来看一下有没有禁止nouveau,并把”ro“改成”rw“。这个bug主要是安装nvidia驱动引起的,我们进入recovery模式,把nvidia删除试一试:sudo apt-get purge nvidia*

启动页面会显示linux-modules-6.8.0-48-generic,有时会出现另一个linux-modules-6.8.0-40-generic,这个东西是linux的内核,多内核共存可能会出现bug,我们要确定我们在使用哪一个内核(还是/etc/default/grub文件中的GRUB_DEFAULT选项),并将另一个安全删除。
dpkg -l | grep linux-image
sudo apt remove linux-image-6.8.0-40-generic linux-modules-6.8.0-40-generic
sudo update-grub

Linux内核版本会自动更新,导致之前安装的nvidia驱动找不到,具体表现为nvidia-smi命令没有结果。解决方案为参考下面两个链接:
https://whoiskoala.github.io/2022/08/04/n/
https://wwwblogs/yancy01/p/17054952.html

uname -r命令显示当前的内核版本,发现和之前的版本不一样了,问题就出在这里。开机启动的时候,你选择ubuntu-advanced,会看到两个内核版本,形如:linux-image-6.8.0-48-generic``linux-image-6.8.0-48-generic(recovery) linux-modules-6.8.0-49-generic``linux-modules-6.8.0-49-generic(recovery)
执行ls /usr/src,你大概率会看到下面的结果:

linux-headers-6.8.0-48-generic  linux-hwe-6.8-headers-6.8.0-48  nvidia-550.120
linux-headers-6.8.0-49-generic  linux-hwe-6.8-headers-6.8.0-49  python3.10

执行sudo dkms install -m nvidia -v 550.120,我们就能把新的nvidia驱动找回来了。
DKMS(Dynamic Kernel Module Support)是一个用于管理内核模块的工具,DKMS 的主要目标是在新的内核版本安装后自动重新编译和安装第三方内核模块,从而确保这些模块能够与新内核一起正常工作。

cuda(非必须)

还是可以参考这个链接,因为我们一般使用anaconda环境,而anaconda安装的pytorch自带cuda,所以可以不安装一个全局的cuda。
那么什么时候需要安装一个全局的cuda呢?,参考【二者区别】cuda和cudatoolkit,全局的cuda可以通过nvcc -V来查看,它是一个类似编译工具的东西,一般情况下我们使用pytorch等官网提供的cuda编译好的二进制文件就可以了,只有我们需要自己编译的时候才需要安装Cuda Toolkits。一般在某些需要执行python setup.py install或者pip install -e.的情况下使用

cuda版本查询,需要选取一个和你的nvidia驱动适配的版本,当然也可以卸载nvidia驱动,在安装cuda的时候系统会询问你是否要装一个和cuda适配的版本的nvidia驱动,要不要把原来的删掉。
cudnn版本查询,注意安装一个和cuda适配的。

这时:输入nvcc -V能看到结果了

如何卸载cuda:
官网提供的命令:

sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
 "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
 sudo apt-get autoremove --purge -V

anaconda

我们配置ubuntu的首要原则最好是和我们使用远程服务器的配置一模一样,这样能才能和我们实际工作时的情况相匹配,因此应尽量避免使用管理员权限!

anaconda建议安装在/home/user或者挂载的大的磁盘目录下,使用的时候不需要sudo权限
如果/home的空间不够,也可以安装在/usr等目录下,让所有用户共享,可以修改权限使得该路径为用户所有。装好(填写环境变量,/etc/profile也要填写)之后打开shell,如果没有出现默认的base环境,执行conda init。

然后conda和pip都要更换成国内的镜像源,上CSDN自行搜索即可。

mkdir -p ~/.pip
nano ~/.pip/pip.conf
##添加下面的内容
[global]
index-url = https://pypi.tuna.tsinghua.edu/simple

接下来就到了安装pytorch的环节,参考这个链接。注意区分cudatoolkit python包和英伟达官网的cuda的概念,参考【二者区别】cuda和cudatoolkit。由于pytorch自带cuda,所以我们只用考虑nvidia驱动版本和你选择的cuda版本是否适配。
登录官网,可以看到conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia命令,这里的pytorch-cuda=12.4就是cuda的版本,老版本的叫法是cudatoolkit所以Pytorch天生就是和cuda兼容的。而conda安装cudnn的时候,要和cuda兼容,它们的版本数字应该是对应的,在cudnn官网能查到。我们安装的时候要上pypi官网或者conda search搜索cudnn版本。此外,其实并不一定需要conda里的cudnn包,pytorch里也能利用cudnn,笔者目前不知道为什么

conda 和 pip可能会让内存爆满,我们可以先执行df -h查看磁盘空间占用情况。还可以用conda clean --dry-run --all查看conda的缓存情况,--dry-run表示仅查看不删除,conda clean --all才是删除。pip cache purge删除pip缓存。

linux加装硬盘

原来的/ 和/home分区已经确定大小,但是根本不够用,这时,我们可以考虑磁盘扩容,也可以考虑新加装一个硬盘。
这里就不得不提到linux中的挂载概念,我们一般把新加装的磁盘加在/mnt目录下,我创建了一个/mnt/shared_disk文件夹,从而把该磁盘当作linux的私有磁盘使用,拥有全部的权限。
【Linux】Linux的挂载原理 |MOUNT|挂载NAS|自动挂载
我们需要使用Gparted来查看磁盘的信息,通过大小来判断所需要的分区,能查看到磁盘的nvme1n1p3等序号,这里一定要小心,不要弄错了序号!
使用fdisk即可完成私有磁盘的加装,参考下面的链接即可:
Linux命令之fdisk --磁盘分区工具
fdisk 命令实现磁盘分区详细教程

使用blkid命令查看磁盘的UUID,这是磁盘唯一的标识符。

/etc/fstab是linux中管理挂载的配置文件
添加UUID==yourUUID /mnt/private_disk ext4 defaults 0 2。后两个数字含义<dump>:备份选项,用于 dump 命令的备份频率。
0:表示不备份。
1:表示备份。
<pass>:文件系统检查顺序,用于 fsck 命令的检查顺序。
0:表示不检查。
1:表示在启动时进行文件系统检查,通常用于根文件系统。
2:表示在启动时进行文件系统检查,但优先级低于 1。
大于 2 的数字:表示在启动时进行文件系统检查,优先级依次降低。

sudo mount -a用于挂载配置文件中的挂载项,执行完没有问题即可。

和共享windows共享硬盘

我的ubuntu上无法使用VPN,因此登录不了github,也无法下载数据集,更无法访问原来windows电脑上的一些文件,因此我们需要设置一个windows和Linux共享的磁盘或文件夹,起到传输数据的作用。共享磁盘更方便一些

可能需要做几件事:

  1. 设置磁盘权限为共享
  2. bitlocker解锁
  3. sudo mount -t ntfs-3g /dev/nvme1n1p3 /mnt/shared_disk,这个命令让linux系统识别ntfs格式的磁盘。同上节查看类似nvme1n1p3 的标识。
  4. 打开/etc/fstab,配置UUID==yourUUID /mnt/shared_disk ntfs-3g defaults 0 0

其他要做的事

安装VScode以及一众插件,安装copilot或通义灵码
Git,参考廖雪峰的教程安装。
安装QQ音乐的.deb文件
ln -s创建桌面快捷方式,在b站可以看到教程
如果你连不上耳机,很可能是因为你的手机在连耳机,把手机的蓝牙关掉就好了。

烧录成镜像

为了防止我们千辛万苦安装的系统崩溃导致需要再次安装,可以把配好环境的当前系统制作成镜像,以后换一个电脑只要再次导入即可,不用花费大量时间重新配置环境。
可以参考链接:制作ubuntu镜像及烧录使用systemback来制作镜像,缺点是只能把镜像文件制作到根目录或者/home目录,如果不够大可就尴尬了;而且作者似乎不再维护该库,可能会出一些问题。
另一种方案是使用“再生龙”软件,很受欢迎,教程比较多。

总结

至此,我们就可以愉快的进行深度学习了!

前言

本人电脑2022年买的联想游戏笔记本win11,在做深度学习的时候遇到一些需要linux环境的项目,不得已配置了linux环境,不过也一劳永逸了。在此期间踩了非常多的坑,重装了三次系统,分享给大家。
我最重要的心得是:
1)重写代码比debug省时间,重装系统也比debug省时间。
2)一种方式不行,多换几个方式试试。
3)多上b站(主要是装双系统),多上CSDN看(主要是配置ubuntu)。
4)多问AI大模型


本文介绍了从0开始安装并配置ubuntu深度学习环境,解决了一系列可能出现的bug,并整合了大量资源链接。从选购硬盘、U盘开始,对硬盘分区进行管理、格式化,制作引导启动盘,设置bios,ubuntu初始配置,安装nvidia驱动,cuda,cudnn,anaconda配置pytorch深度学习环境与版本兼容问题,磁盘挂载与共享,制作镜像,介绍了基础的linux知识和磁盘管理知识。

推荐链接:
b站机器人工匠阿杰的Windows 和 Ubuntu 双系统的安装和卸载
搭建舒适的Ubuntu使用环境系列——从零到一搭建深度学习生产环境

选购硬盘和U盘

补充小知识:(可以在网店里看这些数据信息,也可以问客服)

  • 硬盘的介质分为SSD固态硬盘和HDD机械硬盘
    (1)SSD固态硬盘,读写速度快,存储稳定,较贵。出厂的时候一般电脑自带的就是SSD固态硬盘,一般用来装系统,因为性能好。
    (2)HDD机械硬盘,读写速度慢,容易损毁,但内存一般较大,也更便宜。

深度学习中训练时需要频繁从内存中读取数据,而且图形学进行渲染的时候也要频繁读写内存,所以笔者选取了固态硬盘。

  • 从安装角度来说又分为内置硬盘和移动硬盘。
    (1)内置硬盘需要拆开电脑安装,较为便宜。一般电脑都带有一个新加装硬盘的位置,要注意是PCle4还是SATA接口。
    (2)移动硬盘,便携,类似于U盘。使用USB接口连接到电脑,需要注意USB接口的版本(三叉戟的图标)

硬盘分区:电脑中初始的硬件实际上是一块硬盘,但是经过人为分区,分成了C盘和D盘,其实它们的内存是相连的,可以合并为一块大硬盘。注意:不连续的内存不可以合并。在windows中的“搜索栏”中,输入“磁盘管理”,可以看到如下信息,并可以右键点击对硬盘进行格式化和分区管理:新建分区、删除分区。
关于更多磁盘的管理,请看:关于电脑磁盘的管理

格式化:windows系统是识别不了linux的文件系统的,也识别不出来一块完全空白的内存数据,因为一块内存需要格式化为一个文件系统,例如windows的NTFS,或者linux的ext4(我们在虚拟机中也能看到这种格式的文件),这样才能被操作系统识别,进行管理。也因此,原有的数据都会不再被找到。

U盘-启动盘:安装新的linux系统需要一个U盘作为启动盘,如果对U盘没有需求的话,选择一个内存大于8G的硬盘应该就行,我买了一个新的64G的U盘。注意这个U盘的内容是要全部格式化的,请提前把U盘中的内容备份,否则会被完全清除。
制作完启动盘之后,windows系统是搜不到这个硬盘的,我们使用DiskGenius软件可以重新对其进行格式化。
硬盘:新的linux系统需要装在适合装系统的硬盘里,安装操作系统需要较高的性能,所以建议安装在SSD固态硬盘中。笔者在网购时,商家普遍反映他们的硬盘不建议安装linux系统,所以笔者最终决定把linux系统安装在原有的D盘中,从D盘新划分出128G的内存。

新加装一个系统也需要分配大量的内存,尤其是深度学习中要下载数据集,我原来的硬盘没有空间了,所以买了一个新的1T大内置SSD硬盘,平均划分为4部分,一个分给linux私有,两个给windows和linux共享,最后一个给windows。

linux有一个版本可以专门装在移动硬盘中,称为Linux to go,可以自行了解。

下载ubuntu镜像

这里建议安装ubuntu 22.04LTS。一来是22年新出的版本,和很多新的电脑更加适配;二来是网上的教程和问题讨论比较多,出了问题也好解决。三来已经出了几年,是一个比较稳定的版本,可能比24年的更稳定,CSDN和b站上相关文章更多
如果你按照20.04LTS出了问题,那我强烈建议换成22.04再试一下。

腾出磁盘空间

从这一步开始,就可以参考b站机器人工匠阿杰的Windows 和 Ubuntu 双系统的安装和卸载完成安装ubuntu的全部流程,他的视频实在是非常详细,非常推荐去看!!!

遇到问题,也可以参考该up主的另一个视频:Windows11 安装 Ubuntu 避坑指南,很可能有解决方案。

当然,不出意外的话肯定要出意外,每个人的问题都不一样,正常的流程我就不赘述了,下面分享一下我在按照他的教程执行时出现的问题,以及我的解决方案。

进入bios界面,设置引导启动选项

联想电脑可以参考视频一看就会!8分钟真机安装【Ubuntu/Windows】双系统直接安装linux。但我的电脑在这里出现了蓝屏问题。
更普遍适用的是开机狂按F11,需要进行几个配置:
(1)调整开机启动(boot)顺序,把你的U盘移到最上方
(2)有可能需要把显卡模式切换成独显直连,而不是混合显示

(重要)防止黑屏:修改ubuntu启动配置选项

英伟达的驱动很有可能出问题导致电脑黑屏,所以不如预防性的把这些问题都处理掉,可以参考该视频:NVIDIA显卡的Ubuntu驱动程序安装方法

bios启动后首先ctrl+E进入设置页面,把splash后面—换成nomodeset

因为linux在开发的时候和英伟达起了冲突,开发者一怒之下自己研制了nouveau驱动,并默认推荐给大家使用,但是这个驱动问题特别多,所以你遇到的大多数问题都是和驱动有关的,请参考之后的章节:nvidia驱动相关的bug参考

开机后要做的几件事

  1. 设置一个超级简单的用户名
  2. 使用gedit工具,需要sudo gedit /etc/default/grub 修改关于开机nouveau的配置文件!并且sudo update-grub更新,这样你就不必每次开机都修改nouveau的配置了。sudo gedit /etc/modprobe.d/blacklist.cof,末尾添加blacklist nouveau把它加入黑名单中。
  3. 在grub中配置"GRUB_DEFAULT":设置默认启动的操作系统。可以是一个数字(表示菜单中的位置,从 0 开始计数)或一个特定的菜单项名称。这个数字需要在bios页面中查看,把默认启动设置为windows。
  4. 首先联网
  5. sudo apt install build-essential,安装一些make等必要的包
  6. 安装中文输入法ibus-pinyin,在CSDN上可以搜到,这样你就能在网上使用通义千问、CSDN了。

nvidia驱动

非常建议首先安装英伟达显卡,否则,你辛辛苦苦配好了其他环境,结果在配显卡这步让电脑崩了,之前的辛苦就白费了(别问我是怎么知道这一点的)

安装前强烈建议更新你的gcc,g++编译器至少到12版本,光使用sudo apt install gcc==12还不够,因为之前的gcc还在,执行gcc --version应该找到的还是之前的版本,需要使用update-alternatives相关命令来设置软链接,让gcc命令指向新安装的版本
ubutu18.04 使用update-alternatives 对python和python3进行版本管理

linux软链接ln -s src dst,经常能用到的一个命令,可以用来设置快捷方式。
Linux默认的命令是python3而不是python,可以执行sudo ln -s /usr/bin/python3 /usr/bin/python,这样,执行python --version才会出现想要的结果。
linux自带的Python版本可能是3.8,如果我们想要3.9版本的Python,安装之后,还要执行sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2,最后的2表示设置优先级为2,原来的优先级为1,此时执行sudo update-alternatives --config python3会看到:

bash
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8   1         auto mode
* 1            /usr/bin/python3.8   1         manual mode
  2            /usr/bin/python3.9   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

星号表示当前选中的版本,输入2并按回车,执行python --version,你会看到新的版本

英伟达官网提供了多种方式,注意安装和你电脑显卡适配的驱动:
(1).deb文件,需要本地使用dpkg(类似apt,yum)安装软件包,官网上给了详细的指令,一步一步参考就行了
(2)runfile方式,本地执行该.elf文件,网上有教程,我是这么安装成功的。
(3)你也可以在ubuntu的系统设置中找到driver的设置,并选择一个稳定的(例如带server的)、版本较高的显卡驱动版本安装,例如535。
(4)你在安装cuda的时候,系统也会建议你把原来的驱动卸载了,帮你安装一个和cuda更加适配的driver版本

如果一种方法安装失败,可以多试几种方法,总有一种会成功!

可以参考这个链接

这时:输入nvidia-smi能看到结果了

如何卸载nvidia:
sudo apt-get purge nvidia*
我执行过无数次这个命令,purge表示删除配置文件
一般不建议使用sudo apt autoremove

小知识:apt, apt-get, dpkg
dpkg 是管理软件包的工具,软件包是.deb格式,因此runfile方式安装的cuda,无法通过dpkg来管理,只能手动找到该部分并rm -rf;最常用的是 dpkg -i xx.deb指令表示install,以及 dpkg -l | grep xx指令,寻找已经安装的软件包。

删除无用的软件包:dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge
dpkg 命令使用
Linux小工具(4)之apt软件管理
apt 和 apt-get的区别(建议使用apt)
小知识:grep命令和vim工具
一般我们使用最多的命令就是ls, cd, grep, sudo, vim。要熟悉这些工具的使用
最常用的是ls -a | grep xx命令,一般grep接收前面管道符号传过来的字符并进行搜索

小知识:环境变量和权限:
你在使用Linux安装各种东西的时候,很可能遇到权限问题,使用nano,vim等工具编辑环境变量的时候,也难免遇到权限问题。笔者就非常弱智的把重要东西安装在/root目录下了,结果每次执行的时候都需要root权限。
使用ls -a查看文件权限,sudo su切换为root用户
如何修改权限:使用chmod是最佳选择
sudo chmod -R u+rw /usr/anaconda3
-R表示递归作用于整个文件夹, u表示user,也可以换成g,o,+后边跟rw表示添加write, read权限,从左到右分为user , group , other,详细请看这篇文章
sudo chmod -R 777 /usr/anaconda3
7表示wrx(4+2+1),可写:4、可读:2、可执行:1,作为普通用户,我们要关注最后一个数字7,如果最后一个数字是7,就代表我们普通用户对该文件有所有权限。
sudo chown -R $(whoami) /usr/anaconda3
改变目录的拥有者为用户本人。

系统通过环境变量找到你安装的东西。
~/.bashrc,一般存放用户的环境变量,~表示当前用户的根目录
/etc/profile,一般存放系统的环境变量
export PATH=/usr:$PATH后边的:表示路径间的分割符,在原来的环境变量多个路径后追加一个路径,如果没有:$PATH,那原来的路径会被覆盖。

nvidia驱动相关的bug参考

我最主要的bug是开机卡在dev/sda1: clean, 552599/6111232 files, 7119295/24414464 blocks界面
可以参考下面两个链接:
https://blog.csdn/u013862444/article/details/103005800
https://blog.csdn/AiBigData/article/details/119701227
每次(出bug的时候)开机的时候都最好执行ctrl + E 来看一下有没有禁止nouveau,并把”ro“改成”rw“。这个bug主要是安装nvidia驱动引起的,我们进入recovery模式,把nvidia删除试一试:sudo apt-get purge nvidia*

启动页面会显示linux-modules-6.8.0-48-generic,有时会出现另一个linux-modules-6.8.0-40-generic,这个东西是linux的内核,多内核共存可能会出现bug,我们要确定我们在使用哪一个内核(还是/etc/default/grub文件中的GRUB_DEFAULT选项),并将另一个安全删除。
dpkg -l | grep linux-image
sudo apt remove linux-image-6.8.0-40-generic linux-modules-6.8.0-40-generic
sudo update-grub

Linux内核版本会自动更新,导致之前安装的nvidia驱动找不到,具体表现为nvidia-smi命令没有结果。解决方案为参考下面两个链接:
https://whoiskoala.github.io/2022/08/04/n/
https://wwwblogs/yancy01/p/17054952.html

uname -r命令显示当前的内核版本,发现和之前的版本不一样了,问题就出在这里。开机启动的时候,你选择ubuntu-advanced,会看到两个内核版本,形如:linux-image-6.8.0-48-generic``linux-image-6.8.0-48-generic(recovery) linux-modules-6.8.0-49-generic``linux-modules-6.8.0-49-generic(recovery)
执行ls /usr/src,你大概率会看到下面的结果:

linux-headers-6.8.0-48-generic  linux-hwe-6.8-headers-6.8.0-48  nvidia-550.120
linux-headers-6.8.0-49-generic  linux-hwe-6.8-headers-6.8.0-49  python3.10

执行sudo dkms install -m nvidia -v 550.120,我们就能把新的nvidia驱动找回来了。
DKMS(Dynamic Kernel Module Support)是一个用于管理内核模块的工具,DKMS 的主要目标是在新的内核版本安装后自动重新编译和安装第三方内核模块,从而确保这些模块能够与新内核一起正常工作。

cuda(非必须)

还是可以参考这个链接,因为我们一般使用anaconda环境,而anaconda安装的pytorch自带cuda,所以可以不安装一个全局的cuda。
那么什么时候需要安装一个全局的cuda呢?,参考【二者区别】cuda和cudatoolkit,全局的cuda可以通过nvcc -V来查看,它是一个类似编译工具的东西,一般情况下我们使用pytorch等官网提供的cuda编译好的二进制文件就可以了,只有我们需要自己编译的时候才需要安装Cuda Toolkits。一般在某些需要执行python setup.py install或者pip install -e.的情况下使用

cuda版本查询,需要选取一个和你的nvidia驱动适配的版本,当然也可以卸载nvidia驱动,在安装cuda的时候系统会询问你是否要装一个和cuda适配的版本的nvidia驱动,要不要把原来的删掉。
cudnn版本查询,注意安装一个和cuda适配的。

这时:输入nvcc -V能看到结果了

如何卸载cuda:
官网提供的命令:

sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
 "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
 sudo apt-get autoremove --purge -V

anaconda

我们配置ubuntu的首要原则最好是和我们使用远程服务器的配置一模一样,这样能才能和我们实际工作时的情况相匹配,因此应尽量避免使用管理员权限!

anaconda建议安装在/home/user或者挂载的大的磁盘目录下,使用的时候不需要sudo权限
如果/home的空间不够,也可以安装在/usr等目录下,让所有用户共享,可以修改权限使得该路径为用户所有。装好(填写环境变量,/etc/profile也要填写)之后打开shell,如果没有出现默认的base环境,执行conda init。

然后conda和pip都要更换成国内的镜像源,上CSDN自行搜索即可。

mkdir -p ~/.pip
nano ~/.pip/pip.conf
##添加下面的内容
[global]
index-url = https://pypi.tuna.tsinghua.edu/simple

接下来就到了安装pytorch的环节,参考这个链接。注意区分cudatoolkit python包和英伟达官网的cuda的概念,参考【二者区别】cuda和cudatoolkit。由于pytorch自带cuda,所以我们只用考虑nvidia驱动版本和你选择的cuda版本是否适配。
登录官网,可以看到conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia命令,这里的pytorch-cuda=12.4就是cuda的版本,老版本的叫法是cudatoolkit所以Pytorch天生就是和cuda兼容的。而conda安装cudnn的时候,要和cuda兼容,它们的版本数字应该是对应的,在cudnn官网能查到。我们安装的时候要上pypi官网或者conda search搜索cudnn版本。此外,其实并不一定需要conda里的cudnn包,pytorch里也能利用cudnn,笔者目前不知道为什么

conda 和 pip可能会让内存爆满,我们可以先执行df -h查看磁盘空间占用情况。还可以用conda clean --dry-run --all查看conda的缓存情况,--dry-run表示仅查看不删除,conda clean --all才是删除。pip cache purge删除pip缓存。

linux加装硬盘

原来的/ 和/home分区已经确定大小,但是根本不够用,这时,我们可以考虑磁盘扩容,也可以考虑新加装一个硬盘。
这里就不得不提到linux中的挂载概念,我们一般把新加装的磁盘加在/mnt目录下,我创建了一个/mnt/shared_disk文件夹,从而把该磁盘当作linux的私有磁盘使用,拥有全部的权限。
【Linux】Linux的挂载原理 |MOUNT|挂载NAS|自动挂载
我们需要使用Gparted来查看磁盘的信息,通过大小来判断所需要的分区,能查看到磁盘的nvme1n1p3等序号,这里一定要小心,不要弄错了序号!
使用fdisk即可完成私有磁盘的加装,参考下面的链接即可:
Linux命令之fdisk --磁盘分区工具
fdisk 命令实现磁盘分区详细教程

使用blkid命令查看磁盘的UUID,这是磁盘唯一的标识符。

/etc/fstab是linux中管理挂载的配置文件
添加UUID==yourUUID /mnt/private_disk ext4 defaults 0 2。后两个数字含义<dump>:备份选项,用于 dump 命令的备份频率。
0:表示不备份。
1:表示备份。
<pass>:文件系统检查顺序,用于 fsck 命令的检查顺序。
0:表示不检查。
1:表示在启动时进行文件系统检查,通常用于根文件系统。
2:表示在启动时进行文件系统检查,但优先级低于 1。
大于 2 的数字:表示在启动时进行文件系统检查,优先级依次降低。

sudo mount -a用于挂载配置文件中的挂载项,执行完没有问题即可。

和共享windows共享硬盘

我的ubuntu上无法使用VPN,因此登录不了github,也无法下载数据集,更无法访问原来windows电脑上的一些文件,因此我们需要设置一个windows和Linux共享的磁盘或文件夹,起到传输数据的作用。共享磁盘更方便一些

可能需要做几件事:

  1. 设置磁盘权限为共享
  2. bitlocker解锁
  3. sudo mount -t ntfs-3g /dev/nvme1n1p3 /mnt/shared_disk,这个命令让linux系统识别ntfs格式的磁盘。同上节查看类似nvme1n1p3 的标识。
  4. 打开/etc/fstab,配置UUID==yourUUID /mnt/shared_disk ntfs-3g defaults 0 0

其他要做的事

安装VScode以及一众插件,安装copilot或通义灵码
Git,参考廖雪峰的教程安装。
安装QQ音乐的.deb文件
ln -s创建桌面快捷方式,在b站可以看到教程
如果你连不上耳机,很可能是因为你的手机在连耳机,把手机的蓝牙关掉就好了。

烧录成镜像

为了防止我们千辛万苦安装的系统崩溃导致需要再次安装,可以把配好环境的当前系统制作成镜像,以后换一个电脑只要再次导入即可,不用花费大量时间重新配置环境。
可以参考链接:制作ubuntu镜像及烧录使用systemback来制作镜像,缺点是只能把镜像文件制作到根目录或者/home目录,如果不够大可就尴尬了;而且作者似乎不再维护该库,可能会出一些问题。
另一种方案是使用“再生龙”软件,很受欢迎,教程比较多。

总结

至此,我们就可以愉快的进行深度学习了!

发布评论

评论列表 (0)

  1. 暂无评论