[嵌入式AI从0开始到入土]4_炼丹炉的搭建(基于Ubuntu23.04 Desktop)

[嵌入式AI从0开始到入土]嵌入式AI系列教程

注:等我摸完鱼再把链接补上
可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。

第1期 昇腾Altas 200 DK上手
第2期 下载昇腾案例并运行
第3期 官方模型适配工具使用
第4期 炼丹炉的搭建(基于Ubuntu23.04 Desktop)
第5期 炼丹炉的搭建(基于wsl2_Ubuntu22.04)
第6期 Ubuntu远程桌面配置
第7期 下载yolo源码及样例运行验证
第8期 在线Gpu环境训练(基于启智ai协作平台)
第9期 转化为昇腾支持的om离线模型
第10期 jupyter lab的使用
第11期 yolov5在昇腾上推理
第12期 yolov5在昇腾上应用
未完待续…



前言

注:本文基于Ubuntu23.04编写,本人踩过的坑都写在这里面了,不同系统版本入口可能存在差异
我们在使用时最好不要直接用root用户,血的教训,相信我,嘎嘎刺激。
从这开始,我们要养成使用个人用户的习惯,我下面给出的内容也是按照普通用户的权限写的。
我的主机已经在“锻炼”了,所以下文用虚拟机做演示

一、下载镜像

首先,这里是ubuntu官网,咱就说,能官网下的,真的,别去小站下了,小心p2p下崽器啊。
这里,墙裂建议使用桌面版,就大了没多少,你要真硬件吃紧,赶紧升级硬件吧。servers的分区很容易带走所有数据,血的教训。
下载慢的话可以去镜像站下载,往下找到中国的,前面几个速度都还不错。这里直接给一个清华23.04desktop的镜像地址
一般不要使用太新的系统,因为解决软件依赖真的很麻烦。截至发文,更新到23.10了。23年暑假的时候,23.04必须新建虚拟环境才能pip安装软件,我记得20和18是不用的,当时折腾死我了,那时还找不到解决方法。
所以我下面用的还是23.04去写这个教程。

二、刷机

1、准备一个空u盘

8G以上的,也别太大,免得到时候引导不了。一般32和64的,没几块钱。制作启动盘的时候会清空数据

2、制作启动盘

1、有ubuntu机器

直接用自带的启动盘创建器,十分简单。
在这里插入图片描述

2、只有win

工具挺多的,如果你以后想用这个盘做pe,那就用微pe这些工具创建启动盘,然后把下载的镜像丢进去。
但是,你要是就是为了装一个ubuntu,像大白菜,u启动这些总所周知的原因,用这些工具安装过win的就知道,我不建议使用。
最简单粗暴的方法,格式化U盘为fat32,然后把镜像解压到U盘根目录。
我也使用过Raspberry Pi Imager,嗯,就这个,真的好使。
在这里插入图片描述
其他的像BalenaEtcher、UltraISO也都可以。

3、引导开机安装

首先,断网!断网!断网!,因为我们没有换源,系统安装的过程中会更新一些软件,服务器又在国外,你可能得等几个小时。
拔掉网线,插入上一步制作的启动盘,在BOIS中将U盘设为第一启动项,之后便会引导进入如下界面。
在这里插入图片描述
我们选择第一个按下回车进去,或者等待30s自动进入(如果有网络记得断掉,如果你不想睡个午觉的话)
在这里插入图片描述
开机后变会自动进入这个安装界面。没有跳出来的话,在桌面双击这个图标进入。
在这里插入图片描述

直接拉到最下面,选择中文。
在这里插入图片描述
一路下一步,直到这里,把这个选上,虽然后面会重新打显卡驱动。(最下面那个钩也可以选,但我不知为啥,识别不到我的网络,所以我选不了)
在这里插入图片描述
下一步我们来到这里,如果是是新机且一块硬盘,那么直接无脑下一步,不然建议选择第二个。
在这里插入图片描述
这里我是虚拟机,就随意配置一下,大家自行修改配置。建议sda1不低于128G
在这里插入图片描述
然后一路下一步到时区,选择上海。
在这里插入图片描述
之后就是设置账户,注意两点
开启自动登录不然每次开机后都需要物理键盘本地输入密码后才能使用远程桌面,设置一个简单的密码不要折磨自己!!!不然在系统图形化界面中不允许设置简单密码,安装软件,改配置,重启服务等都需要输入这个密码。
在这里插入图片描述
又是无脑下一步,接着去和杯咖啡吧。
说来也奇挂,我用vm17到最后一步安装时,点安装直接就完成了,重点是卸载了引导光盘,能成功启动,也就是确实安装完了。

4、首次开机配置

在这里插入图片描述
没什么可说的,一路下一步就好了。这时可以把网络连上了。

三、基础配置

1、更换软件源

首先打开软件更新,点这里,选择其他
在这里插入图片描述
如果你有特殊的需求那就选那个,不然直接让系统自行选择就好了
在这里插入图片描述
这里的更新记得更改下,如果你不想一觉醒来不兼容了的话。
在这里插入图片描述
关闭窗口后,等待系统自动更新软件源就可以了。一般5-10分钟吧。

2、更换pip源

在主文件夹下执行

mkdir .pip
cd .pip
vim pip.conf

输入以下内容

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

到这里如果使用pip install命令的话应该会报错,大意是需要新建一个虚拟环境,这个等下一节中我们安装anaconda之后就可以了。

3、安装新立德软件包管理器(可选)

这个应该是算一个比较好用的应用管理器,能方便的安装和删除软件。
在ubuntu最近的长期支持版里已经预装了新立得软件包管理器。没用的话,可以通过这个命令安装。

sudo apt-get install synaptic

在这里插入图片描述
搜索你想要安装/卸载的软件,标记后选择应用即可。
在这里插入图片描述

四、anaconda安装和配置

1、下载安装

1、下载

首先使用Ubuntu主机(win访问会直接下载win版的)访问官网下载页面,点击下载,你会得到一个.sh的文件。

2、安装

直接右键作为程序运行或者在终端中输入:

bash Anaconda3-2023.07-2-Linux-x86_64.sh	#这里不要用root用户运行,不然使用起来麻烦

然后就是疯狂回车,看完许可。当然,你可以直接按Q跳过
直到出现这个问题

Do you accept the license terms? [yes | no]

默认是no,别再傻乎乎的按回车了,输入yes
之后等待,碰到yes|no 的就输入yes,其他的直接回车,比如安装路径。

3、配置

vim .bashrc
#在最下面添加
export PATH="/home/ai/anaconda3/bin:$PATH"	#如果保持默认路径的话,你只需要修改用户名
source ~/.bashrc

4、换源

如果你的conda下载异常,请先检查源,然后删除重新添加

conda config --show channels		# 查看镜像源
conda config --remove-key channels	#删除添加源,恢复默认源

全新安装的跳过上一步,直接添加镜像源

#添加镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

#终端显示包从哪个channel下载,以及下载地址是什么
conda config --set show_channel_urls yes

2、创建源环境

这里可以在base环境,但我不建议。主要是其他环境造坏了,重建就行,base就有点麻烦了。

conda create --name origin python=3.10.0	#创建名为origin的虚拟环境,并同时安装python3.10.0,cann有版本要求
conda activate origin						#进入源环境
pip install --upgrade pip 					#更新pip
#接下来就安装一些你常用的包就可以了。

这里也给出一些conda常用指令

conda info -e							#查看当前虚拟环境列表
conda create --name a --clone origin	#从origin复制一个名为a的环境
conda activate a						#激活a环境
conda deactivate						#退出环境,会回到base,再次执行才退出conda环境
conda remove --name a --all				#删除a环境

五、samba和ssh配置

到这就属于提升体验部分了,没有远程需求的就可以跳过了。

1、ssh

注意,系统是没有预装的,虽然设置里确实有这个选项。

sudo apt install openssh-server		#安装ssh服务端
sudo service sshd start				#开启ssh服务

现在我们就可以使用ssh远程连接了。这里我用的是mobaxterm。
如果需要使用密钥免密登录的,请看下方问题区。

2、samba

系统共享里的文件共享指的是媒体共享,想要舒服的共享文件,还是得用samba,至少是我目前用的最舒服的。

sudo apt-get install samba
sudo vim /etc/samba/smb.conf
#在末尾添加
[data]												#这个是共享的名字
   comment = share folder with usrname and passwd
   path = /media/ai/data							#共享目录
   available = yes
   browseable = yes
#   public = yes
   writeable = yes
   read only = no
#添加后保存退出
sudo smbpasswd -a ai								#添加smb用户ai
sudo service smbd restart		

然后在win下使用\\ip访问即可。
第一次需要输入刚才新建的用户和密码登录,进来后,右键映射网络驱动器,之后直接在此电脑中访问就可以了。

六、CUDA和cuDNN安装

应该是全文最复杂的部分,因为你需要考虑所有的兼容性。显卡驱动(决定了cuda最高版本)、pytorch、cuda、cudnn这四兄弟要找个能一起住的“家”还真有点麻烦。
pytorch官网在发稿前显示仅支持cuda11.8和12.1,再根据cuda文档,我们的驱动版本应该在450.80.02以上。至于版本的选择就看你框架的要求了。
务必注意你要跑的框架对cuda版本的要求
比如百度飞桨各个版本有严格的版本限制,必须按照下表安装对应的,且支持到CUDA12.0。
如果你使用的是安培架构(消费级里3090是首发)的 GPU,推荐使用 CUDA11 以上。如果你使用的是非安培架构的 GPU,推荐使用 CUDA10.2,性能更优。

CUDAcuDNNTensorRT(如需使用 PaddleTensorRT 推理)
10.27.6.57.0.0.11
11.28.2.18.0.3.4
11.68.4.08.4.0.6
11.78.4.18.4.2.4
11.88.6.08.5.1.7
12.08.9.18.6.1.6

好,是不是到这头大了,别放弃,这才到哪呀,下面可有的折腾呢!
例如死亡掉驱动,根本没有预兆,只是重启了一下,甚至上一秒还能运行,下一秒运行报错,提示没有cuda。真玄学问题。

1、NVIDIA驱动程序

我下面翻车了好几次,一直不对,才发现是偷懒使用了ubuntu自带附加驱动,换成官网下载的驱动运行就正常了

1、禁用系统自带的附加驱动

nouveau是一个由爱好者组织的针对NVIDIA显卡开发的第三方开源3D驱动的共同项目,并且nouveau是在完全没有得到NVIDIA任何支持的情况下进行开发的,与NVIDIA驱动存在冲突,并且会影响GPU运行的可靠性,建议使用NVIDIA GPU前先禁用该驱动。

sudo vim /etc/modprobe.d/blacklist.conf
#在最下面加入
blacklist nouveau
options nouveau modeset=0
#保存后运行命令生效
sudo update-initramfs -u

2、下载驱动程序

首先查询你的显卡型号

ubuntu-drivers devices

然后访问下载页面下载驱动,建议使用最新的,这样可以使用尽可能新的cuda版本。
选择你的显卡,系统选择linux,默认是Windows
在这里插入图片描述
然后点击搜索,然后跳转后下载就可以了。

3、安装

cd到你存放驱动的目录,运行以下指令进行安装

sudo chmod a+x NVIDIA-Linux-x86_64-535.113.01.run 	#修改权限
sudo ./NVIDIA-Linux-x86_64-535.113.01.run			#运行

一路回车就完事
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个库我装不上,但是也能跑
在这里插入图片描述
选择yes
在这里插入图片描述
这里可能会遇到提示关闭图形界面后才能继续(我装过x11vnc就出现了,应该是lightdm的问题)
Ctrl+Alt+F1关闭图形界面
Ctrl+Alt+F7开启图形界面
安装完成后,在软件和更新中应该是这样的。
在这里插入图片描述
使用这个指令,查询驱动版本号

nvidia-smi

在这里插入图片描述
注意,右上角的cuda version指的是当前驱动支持的最高cuda版本而不是现在安装的版本

2、cuda

这里给出官网安装指南,真碰到我没写到的玄学bug就去翻下,碰碰运气。

1、验证是否拥有支持CUDA的GPU

lspci | grep -i nvidia	 #如果结果为空,表示不支持或需要更新数据库
update-pciids 			 #更新linux维护的PCI数据库

2、确认 Linux 版本

uname -m && cat /etc/*release

3、下载 NVIDIA CUDA 工具包

这里考虑到各个框架的兼容性,我选择11.8版本进行安装。需要其他版本的点这里。进不去的用手机流量试试,我基本可以秒进。
在这里插入图片描述
选择我们需要的版本,这里可以使用wget命令,也可以使用迅雷等工具下载run文件。

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

4、安装

运行这个命令,还是老规矩,全选yes,路径直接回车

sudo sh cuda_11.8.0_520.61.05_linux.run

5、验证安装

nvcc --version

根据回显,我们安装的cuda版本是11.8
在这里插入图片描述

5、添加环境变量

vim .bashrc
#添加如下内容,这里是默认路径
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
#生效环境变量
source ~/.bashrc

3、cudnn

这里给出官网安装指南,真碰到我没写到的玄学bug就去翻下,碰碰运气

1、前置工作

  1. 安装NVIDIA 显卡驱动程序
  2. 安装 CUDA,包括 CUDA 驱动程序和工具包

2、下载cuDNN

以下是官方文档中的步骤,但是,很不幸,你大概率会被卡在下载(看运气,有时我用流量可以访问,大部分时候进不去)
要下载 cuDNN,请确保您已注册 NVIDIA 开发者计划。

  1. 转到:NVIDIA cuDNN 主页。单击下载。
  2. 完成简短调查,然后单击提交。
  3. 接受条款和条件。将显示 cuDNN 的可用下载版本列表。
  4. 选择要安装的 cuDNN 版本。此时将显示可用资源列表。
  5. 下载适用于 Windows 的 cuDNN 软件包 (zip)。

所以,不如直接跳到第五步,使用直达链接进行下载,就是不知道能用多久
链接在这里,注意版本。
在这里插入图片描述
不要点击,右键复制链接,然后新建下载就可以了。这里我用的是迅雷。
在这里插入图片描述

3、安装

直接双击deb软件包,点击安装就可以了

4、验证安装

cp -r /usr/src/cudnn_samples_v8/ $HOME	#将 cuDNN 示例复制到可写路径。
cd  $HOME/cudnn_samples_v8/mnistCUDNN	#转到可写路径。
make clean && make						#编译示例
./mnistCUDNN							#运行示例

如果 cuDNN 已正确安装并在 Linux 系统上运行,您将看到类似于以下内容的消息:

Test passed!

七、问题

1、修改conda默认启动环境

安装conda后,每次打开终端,都会进入base环境,切换到我们的生产环境还得输入命令,很麻烦。我们只需要修改一下环境变量

vim .bashrc
#在最下面添加
conda activate ascend	#修改成你需要启动的环境
source ~/.bashrc

2、内存不够

1、创建swap文件

sudo swapon -s					#查看当前swap分区的分配情况
sudo fallocate -l 8G /swapfile	#创建一个8G的交换文件,位于跟目录
sudo mkswap /swapfile			#初始化为swap文件
sudo swapon /swapfile			#启用交换文件
sudo swapon -s					#再次查看当前swap分区的分配情况

在这里插入图片描述
这样就是挂载成功了,有桌面的直接使用系统监视器查看就可以
在这里插入图片描述

2、设置开机挂载

sudo vim /etc/fstab			#添加以下内容
/swapfile none swap sw 0 0

3、关闭swap分区和删除swap分区

sudo swapon -a		#关闭swap分区
sudo rm /swapfile	#删除交换文件,文件路径通过swapon -s指令查看

3、加硬盘后开机显示未挂载

1、确认硬盘是否已经进行分区和格式化

有桌面的同学直接使用磁盘工具创建分区即可
在这里插入图片描述
没有桌面的同学就按照下面的指令进行操作(因为原先这块硬盘在win上使用,win保留那个分区忘记格掉了,所以设备显示的是sda2,大家根据自己的情况来)
注意只有最后使用w指令才会保存修改,随时都可以通过q指令退出

sudo fdisk /dev/sda
#接下来依次输入
m	#查看帮助
n	#添加新分区
p	#设置为扩展分区
1	#磁盘分区的挂载选项,默认即可
#两次回车,也就是默认全部的空间
w
y	#保存分区,确认
sudo mkfs -t ext4 /dev/sda	#格式化新建的分区

ext4在win下不能直接查看,要安装一个补丁,但是使用ntfs会发生samba共享文件时速度慢的问题,稳定20Mb/s,也许是我用树莓派做服务器导致的

2、挂载硬盘测试

mkdir /media/ai/data				#新建挂载点,我的硬盘挂在这下面
sudo mount -t ext4 /dev/sda2/data	#挂载硬盘
df -lh								#检查挂载是否成功

在这里插入图片描述

3、设置开机自动挂载

这里我以sda2挂载到/media/ai/date/目录做演示

sudo blkid /dev/sda2	#查询UUID

在这里插入图片描述
我们只需要框出来的UUID和TYPE

sudo vim /etc/fstab	  #修改配置文件,添加以下内容
/dev/disk/by-uuid/4376d64b-cc1e-427e-8363-xxxxxxxxxxxx /media/ai/data ext4 defaults 0 0

在这里插入图片描述
上面那行是系统安装时自动生成的,我们按照他的样式填写就可以了。
参数说明

  1. 第一列是你的硬盘(或者说要挂载的分区),dev/disk/by-uuid/之后填写上一步查询到的UUID,理论上可以使用/dev/sda2代替,但是不如UUID安全,至少id是不会变的。
  2. 第二列就是你想要挂载到的位置/media/ai/data
  3. 第三列就是你的硬盘文件系统格式etx4
  4. 第四列就是你的硬盘挂载选项,照搬defaults
  5. 第五列是Linux dump备份选项,我们用不上,照搬0
  6. 第六列是开机磁盘检测选项,我选择不检查,0。如果你需要开启检查,注意这个表示次序,因此上面有1了,我们就不能写1,要写2。

4、重启

重启后使用df -h查看是否已经挂载,没有的话应该是/etc/fstab这个文件写错了。要按照这个文件上面已经有的格式写。

4、samba速度上不去

我的状况:我的是千兆内网,电脑使用wifi连接路由器,主机通过网线连接路由器,samba甚至跑不到200Mbps。

1、检查电脑连接速率

在这里插入图片描述
我电脑只支持wifi5,也就是上限是780M(这里有大坑,问题也确实出在这)

2、检查主机网络连接情况

在这里插入图片描述
虽然是1000M但还是建议对网线测试,换个设备测速试试。我这里是千兆外网,拓展坞接手机可以跑满千兆。大家可以尝试内网测速试试。

3、对要共享的硬盘进行测速(一般没问题)

sudo apt-get install hdparm
sudo hdparm -Tt /dev/sda2		#改成你自己的设备

4、协议问题

我电脑手机都跑不到200M,现在只能怀疑协议有问题。
首先访问一次远程服务器,来建立连接,然后使用管理员身份打开powershell,输入以下指令查询客户端smb版本,Dialect下的就是当前连接的smb协议版本。

Get-SMBConnection

如果显示的是1.0那么往下看,否则跳过当前小节。

在这里插入图片描述
把这两个钩去掉,然后重启。让win不能使用smb1协议。
再次查询客户端smb版本,我这已经是3.1.1了。
在这里插入图片描述

还不行,那就在samba配置文件[global]最后添加以下配置

min protocol = SMB2		#我的手机不支持smb3,因此我锁在smb2。
aio read size = 0		#关闭异步读取,不然可能会出现上下传不对等的情况

win7及以前的系统只支持smb1,min protocol应该设置为NT1(不是smb1哦)。
重启samba服务后,我的手机已经可以跑满了,但是,我的win电脑还是只有200M不到。

5、win配置

启用大型MTU以提升大文件的传输速度,并关闭带宽限制。 以管理员身份打开powershell,在命令中输入:

Set-SmbClientConfiguration -EnableBandwidthThrottling 0 -EnableLargeMtu 1
#不行的话再加这两条,重启试试
netsh int tcp set global autotuninglevel=restricted
netsh interface tcp set heuristics disabled

6、检查win网卡设置

这里尝试了全网几乎所有的设置,像什么聚合,助推器啥的,根本没用。详细的直接站内搜smb速度慢就能找到。
折腾了一晚上,第二天才发现问题其实很简单。是我的无线网卡的问题,插上网线能跑到800M左右,比我手机慢一点点。差不多能发挥出我千兆内网90%的性能了。

5、ssh免密登录

首先生成公钥和私钥
在客户端电脑运行

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

一直回车就可以。
生成的密钥在C:\Users\工具人呵呵\.ssh,替换成你自己的用户名,linux在主目录的.ssh目录下
之后把生成的公钥重命名为authorized_keys,并上传到服务端主机的.ssh文件夹中。如果存在这个文件,就把公钥内容加到authorized_keys文件下一行。

chmod 700 ~/.ssh					#设置.ssh文件权限
chmod 600 ~/.ssh/authorized_keys	#设置authorized_keys文件权限
su -
vim /etc/ssh/sshd_config 
#去除PubkeyAuthentication 前的“#”
systemctl restart sshd.service 		#重启远程服务器的ssh服务

现在就可以使用私钥登录服务器了。

6、cuda以及nvidia驱动卸载

#删除 CUDA 工具包
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
#删除 NVIDIA 驱动程序
 sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
 #清理卸载
 sudo apt-get autoremove

7、cuda等安装报错,pytorch无法调用gpu

这个坑属于是我为了偷懒给自己挖的,结果自己掉进去两天才发现。
重要的事情说三遍。
检查是否使用了Ubuntu自带的附加驱动,也就是软件更新里面显示的!
检查是否使用了Ubuntu自带的附加驱动,也就是软件更新里面显示的!
检查是否使用了Ubuntu自带的附加驱动,也就是软件更新里面显示的!
一定要去官网下载linux驱动,自己安装呀。

总结

对于linux,可劲折腾。等哪天你能连续跑好几天不报错了,你就真“入门”了。

修订说明

1、23.12.7补充六、1、3图,问就是我又掉驱动了,顺手补个图

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工具人呵呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值