ubuntu双系统+NVIDIA+cuda驱动安装+bios grub+深度学习环境配置一条龙踩坑
ubuntu双系统+NVIDIA+cuda驱动+grub一条龙踩坑
最近装了好几台机器,都是ubuntu双系统,然后要安装cuda进行深度学习训练,期间遇到了不少很多从前没有遇到过的坑(也可能是太久没有装机器,所以忘记这些坑了),因此做个笔记从头到尾记录一下坑。因为不断在更新,所以有的部分直接贴链接了
ubuntu+windows双系统
至于如何进入bios界面,每个品牌电脑有不同的按键,比如thinkpad/thinkstation系列都是在开机进入lenovo的标志时,按F1。台式机的话注意看显示器的线(DP线HDMI线等)是否插到了显卡上,不然的话可能没有开机lenovo的界面(如果没有连到独显上,显示器连接的是核显)。
可以看这两篇
https://blog.csdn.net/NeoZng/article/details/122779035
https://blog.csdn.net/Flag_ing/article/details/121908340
ubuntu分区的时候直接分三个就行:/boot, swap, /。/boot分几百M,swap可以看文章或者官方建议,剩下的都给根目录/就行。
boot loader的位置我一般直接放在windows系统盘所在的设备上(注意区分设备粒度和分区粒度,一块硬盘是一个设备,一个设备可以分不同的分区p1 p2 p3等)。这样子在开机的时候会进入选择界面,是进入ubuntu还是windows。之后在ubuntu的grub文件里面可以修改默认进入的系统。
时间设置
双系统时间经常设置不对,见下面这个问题的第二条回答,弄清楚local time, RTC time等
https://www.zhihu.com/question/46525639
修改启动时默认进入的系统
修改ubuntu中的grub文件
https://blog.csdn.net/qq_42180695/article/details/105636285
ubuntu内部
NVIDIA驱动+cuda
ps:
- 新新方法(感谢mk),一次性装好nvidia driver和cuda:
# 事先下载好形如cuda_12.4.0_550.54.14_linux.run这样的cuda文件,在官网上找https://developer.nvidia.com/cuda-downloads(里面的archive有过往版本),放在一个英文路径下,因为字符终端没法打中文
sudo apt-get --purge remove nvidia*
sudo apt-get --purge remove "*nvidia*"
sudo apt-get --purge remove "*cublas*" "cuda*"
sudo apt autoremove
sudo rm /etc/X11/xorg.conf
sudo rm -rf /usr/lib/nvidia
sudo rm -rf /usr/local/cuda*
sudo update-initramfs -u
# 然后进入tty字符终端,比如ctrl+atl+f2/f3...
sudo service gdm stop
# 会黑屏,再次进入tty字符终端
sudo bash cuda_12.4.0_550.54.14_linux.run
# 这里直接accept,勾选nvidia-driver一项,然后就可以装好了。最后他会弹出几行提示,加入PATH路径什么的,如果你要直接用cuda作为环境变量编译东西的话,那就添加环境变量吧
# 最后重启
sudo reboot
- 新方法(安装或升级都可以这样):直接在ubuntu的软件和更新中选择一个合适的nvidia-driver,手动点击安装(如果这里没有找到期望的版本,可以使用命令行直接安装
sudo apt install nvidia-driver-535 nvidia-dkms-535
,然后重启);此时安装完之后使用nvidia-smi
会有NVML的报错问题;然后再直接安装cudaxxx.run即可(去掉nvidia driver的勾选),重启发现安装成功了
老方法: 先装依赖(见https://blog.csdn.net/ytusdc/article/details/132403852),然后装NVIDIA驱动,再装cuda。可以直接去官网下载对应的安装包版本https://www.nvidia.cn/Download/index.aspx?lang=cn(这个驱动版本应该是根据显卡型号来的),然后安装: https://www.cnblogs.com/chua-n/p/13208398.html 这里需要进入tty,记得将你所下载的nvidiaxxx.run文件放在一个没有中文路径的目录下,然后ctrl+alt+f4进入tty界面(不是图形界面,只能用命令行,你可以sudo apt install vim安装一个vim方便编辑文件),先关闭X服务,接着进入nvidiaxxx.run所在目录,然后按照https://blog.csdn.net/ytusdc/article/details/132403852所说的禁用nouveau,sudo sh nvidiaxxx.run来安装。 可能有一些坑: https://gist.github.com/walsvid/cc4d399fe2ffc8bd78e2e721af1ba803
安装好NVIDIA驱动后,通过`nvidia-smi`查看显卡相关信息,然后右上角写着CUDA version,之后装cuda的时候应该不能超过这个CUDA version。然后去google上搜类似于cuda 11.7,点进官网下载对应的.run文件: https://www.cnblogs.com/chua-n/p/13208414.html 然后安装,只要之前NVIDIA驱动和CUDA版本选择正确了,这里在安装CUDA时,不需要勾选NVIDIA driver那一项。
最后会出来一个WARNING: Incomplete installation! 。不用管。但要按照提示的说明将/usr/local/cuda-11.7这种路径加到环境变量PATH, LD_LIBRARY_PATH里面。
使用nvcc --version
就可以判断cuda是否安装成功
系统启动时和安装cuda时可能遇到的坑
因为我是GeForce系列的显卡,似乎在bios设置方面会有一些奇怪的坑,这会联动前两个板块
ubuntu启动
启动的时候进入不了GNOME桌面系统,只能进入tty字符界面:
- 检查Xorg或Wayland配置
- 检查
/etc/gdm3/custom.conf
文件,确保WaylandEnable=false
被注释掉或者设置为true
(如果你使用的是Wayland)。 - 如果你使用的是Xorg,确保
WaylandEnable=false
:
找到sudo nano /etc/gdm3/custom.conf
#WaylandEnable=false
,去掉注释或确保它存在:WaylandEnable=false
- 删除临时文件
- 有时临时文件会导致问题,可以尝试删除它们:
sudo rm -rf /var/lib/gdm3/* sudo rm -rf /tmp/.X11-unix sudo rm -rf /tmp/.ICE-unix sudo systemctl restart gdm
- 重新安装GNOME和相关组件
- 重新安装GNOME Display Manager和桌面环境:
sudo apt-get update sudo apt-get install --reinstall gdm3 gnome-shell ubuntu-desktop sudo dpkg-reconfigure gdm3 sudo systemctl restart gdm
使用以上解决方法之后,尝试:
sudo systemctl start gdm
sudo systemctl enable gdm
看看能不能进入桌面系统。
启动时碰到ACPI error
了,导致一直停留在黑屏白字界面开不了机:
- 临时解决方法1:在选择系统的界面中,(在ubuntu选项上)按e,临时修改这个类似于grub的文件,将linux那一行最后面加上一个
acpi=off
。但这个可能会影响nvidia驱动的安装,见下面nomodeset
的解决方法。加了这个以后,还可能碰到snd_hda_intel 0000:01:00.1:unable to grab IRQ 0, disabling device
等 irq相关的error,见https://askubuntu.com/questions/1258283/no-irq-handler-error-while-installing-ubuntu-20-04 ,就是我下面一条要讲的方法 - 临时解决方法2: 同样是上面的方法,只不过不加
acpi=off
,加nomodeset
(我用这种方法进入系统也用不了显卡) - 永久解决方法:在ubuntu里修改grub文件并保存生效:https://www.jianshu.com/p/f9e17ba42943 改
GRUB_CMDLINE_LINUX
那两项内核启动参数即可,修改是类似的。修改完要用sudo update-grub生效。
2023.05.29upd:
看了https://askubuntu.com/questions/1416198/ubuntu-22-04-acpi-bios-error-bug-could-not-resolve-symbol-errors-on-asus-x7,应该是linux内核、BIOS、驱动的某些版本不兼容,该链接第一个回答告诉我是linux内核的问题,需要升级linux内核。
安装NVIDIA驱动,cuda
安装NVIDIA驱动时碰到IRQ问题了
[ 2.172069] NVRM: Can't find an IRQ for your NVIDIA card!
[ 2.172070] NVRM: Please check your BIOS settings.
说明可能是开机的时候使用了acpi=off
...
如果碰到An NVIDIA kernel module ‘nvidia-drm‘ appears to already be load
,说明现在ubuntu桌面是通过nvidia显卡加载的,因此需要进入字符终端卸载nvidia相关驱动,参见:
https://blog.csdn.net/sdnuwjw/article/details/110290280
那么如何在字符终端界面下卸载旧驱动安装新驱动呢?对于台式机可以将显示器的线从独显上拔下来,插到核显上,就进入tty1的字符终端界面了。
这可能是因为启动时增加了acpi=off
这一选项导致的,所以碰到ACPI error时可能还是要用nomodeset
来开机。
安装cuda驱动时碰到 Error installing Cuda toolkit: Existing package manager installation of the driver found
, 见https://askubuntu.com/questions/1211919/error-installing-cuda-toolkit-existing-package-manager-installation-of-the-driv
或者直接continue就行。
cudnn:
https://developer.nvidia.com/cudnn-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local
但是我用官方的.deb安装cudnn安装失败了... 后来照着这个博客安装成功了:https://bbs.huaweicloud.com/blogs/388651 。 需要去这里下载.tar.xz的安装包 https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/ , 然后解压、按照博客中的命令安装。
conda, ssh, 深度学习环境
conda:
wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 然后按enter, q, yes(确认协议), enter(或者你选择你想要安装的位置,这一步选错了没关系,可以移动miniconda3文件夹然后建立软链接), yes(bash打开自动进入conda的base环境)
# 换源:
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/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
# 确认换源:
conda config --get channels
然后就差不多了。重启终端使用conda env list
即可看到现在处于什么环境。
新建一个环境:
conda create -n ml python=3.9
conda activate ml
...
我只写过两篇关于安装RL相关环境的笔记...:
https://www.cnblogs.com/thkkk/p/15867276.html
https://www.cnblogs.com/thkkk/p/15562917.html
未完待续...