Ubuntu 深度学习服务器配置(管理员篇)
本篇博客主要记录 Ubuntu 深度学习服务器配置从删库到跑路
在昨天12月20日下午本来一切配置妥当,但是晚上输入 nvidia-smi
突然报错
原因可能是没有把自动更新关掉,系统自动更新了 NVIDIA 库文件,和驱动不匹配,我尝试更新驱动,失败了,导致服务器差点成砖了,后续重装了四次系统,终于在12月21日下午4点恢复正常使用,在此记录下,可为以后的服务器管理员重装作参考
(base) zzy@user:/home/user/Downloads$ ls
Anaconda3-2024.10-1-Linux-x86_64.sh cudnn-linux-x86_64-8.9.7.29_cuda11-archive NVIDIA-Linux-x86_64-550.142.run
cuda_11.8.0_520.61.05_linux.run cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
(base) zzy@user:/home/user/Downloads$
1. 重装系统 Ubuntu20.04
准备:一个u盘,一台能联网的windows电脑
1.1 下载 Ubuntu20.04
下载地址:Ubuntu 20.04.6 LTS (Focal Fossa)
往下拉,选择 ubuntu-20.04.6-desktop-amd64.iso 2023-03-16 15:58 4.1G Desktop image for 64-bit PC (AMD64) computers (standard download)
下载到你的windows电脑
1.2 下载 软碟通软件
下载软碟通软件(UltralSO),这个百度即可。
下载安装之后,提示要注册,这个可以不必管它,直接试用即可。 ::: iportant 重要 如果你的u盘有重要文件,请先备份! :::
1.3 刻录到u盘
在左侧打开 Ubuntu 镜像:
启动-写入硬盘镜像,磁盘启动器选择自己U盘,映像文件选择 Ubuntu 系统镜像,写入方式选择 USB-HDD+,点击写入即可。
刻录校验不选
等待十分钟左右,u盘变成:
1.3 u盘启动
给服务器插上u盘,开机后疯狂按 del
,直到左下角出现变化,好像是什么正在进入设置,反正左下角有变化就是成功了不用按了
进入主板:
按小键盘的 →
移动到 Boot
按 ↓
移动到 Boot Option #1
按 -
可以切换启动项,直到启动项是u盘即可:
按 f10
保存,之后会自己启动 ubuntu,什么都不要按:
1.4 安装 Ubuntu
选择 Install Ubuntu
默认英语,直接 Continue
:
默认 Normal installation
直接 Continue
:
选择 Erase disk and install Ubuntu
选择 2t 盘
Continue
随便点个国内点,默认上海就行,Continue
设置主机名和管理员,Continue
1.5 2t固态启动
之后会自动重启,出现:
提示你弹出u盘,然后按回车,这时候又会重启,疯狂按 del
,去修改启动项为2t盘(修改启动方式上面教过了,不再赘述)
启动成功:
1.6 关闭自动更新
- 把那该死的自动更新关掉!
修改配置文件/etc/apt/apt.conf.d/10periodic
将“1”改为“0”,保存即可
修改配置文件/etc/apt/apt.conf.d/20auto-upgrades
将“1”改为“0”,保存即可
系统设置-->软件和更新-->更新,将“自动检查更新”和“有新版本时通知我”设置为“从不“,关闭对话框完成设置。
- 设置永不息屏
2. 配置网络
重要
我建议你做完 2.1 连上网之后,先去做 3 安装驱动,第三章最容易出问题导致重装系统,如果第三章没问题了,再配置 2.2 和 2.3 也是可以的
2.1 联网
下载解压后,使用u盘拷到服务器上
服务器网线接口应该使用:
此处有图!
查看当前ip
ip a
这是改名后正常的样子,没改名之前是叫eno4,我试了其实也可以正常用
user@user:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether b4:2e:99:df:df:75 brd ff:ff:ff:ff:ff:ff
altname eno3
altname enp66s0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether b4:2e:99:df:df:76 brd ff:ff:ff:ff:ff:ff
altname eno4
altname enp68s0
inet 10.162.32.65/21 brd 10.162.39.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::b62e:99ff:fedf:df76/64 scope link
valid_lft forever preferred_lft forever
user@user:~$
网卡改名(其实可以不改)
现在来改名,修改配置文件
sudo nano /etc/default/grub # 我比较喜欢用vim, vi也可以
找到
GRUB_CMDLINE_LINUX=""
改成:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
保存配置:
sudo grub-mkconfig -o /boot/grub/grub.cfg
重启服务器
查看
ip a
出现
user@user:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether b4:2e:99:df:df:75 brd ff:ff:ff:ff:ff:ff
altname eno3
altname enp66s0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether b4:2e:99:df:df:76 brd ff:ff:ff:ff:ff:ff
altname eno4
altname enp68s0
inet 10.162.32.65/21 brd 10.162.39.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::b62e:99ff:fedf:df76/64 scope link
valid_lft forever preferred_lft forever
user@user:~$
在rjsupplicant目录联网:
sudo bash ./rjsupplicant.sh -a 1 -n eth0 -d 1 -u 用户名 -p 密码
运行rj.sh
bash rj.sh
2.2 静态ip
服务器默认使用的是dhcp,会导致连不上ssh,因此我们要使用静态 ip
修改etc里面的netplan文件夹,里面有一个很长的yaml文件
sudo vim /etc/netplan/01-network-manager-all.yaml
改成这个样子:
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
eth1:
dhcp4: false
addresses: [10.162.32.65/21]
gateway4: 10.162.32.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
保存配置:
sudo netplan apply
2.3 启用ssh
sudo apt-get update
sudo apt-get install openssh-server
查询SSH服务状态:
sudo systemctl status ssh
出现:
user@user:~$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-12-21 15:22:09 CST; 5h 25min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 4242 (sshd)
Tasks: 1 (limit: 154319)
Memory: 4.3M
CGroup: /system.slice/ssh.service
└─4242 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
12月 21 15:57:29 user sshd[22259]: Accepted password for wmq from 10.162.32.196 port 4669 ssh2
12月 21 15:57:29 user sshd[22259]: pam_unix(sshd:session): session opened for user wmq by (uid=0)
12月 21 16:09:47 user sshd[28304]: Accepted password for wmq from 10.162.32.94 port 56211 ssh2
12月 21 16:09:47 user sshd[28304]: pam_unix(sshd:session): session opened for user wmq by (uid=0)
12月 21 16:10:12 user sshd[28680]: Accepted password for wmq from 10.162.32.94 port 56259 ssh2
12月 21 16:10:12 user sshd[28680]: pam_unix(sshd:session): session opened for user wmq by (uid=0)
12月 21 16:11:15 user sshd[29075]: Accepted password for user from 10.162.32.196 port 8286 ssh2
12月 21 16:11:15 user sshd[29075]: pam_unix(sshd:session): session opened for user user by (uid=0)
12月 21 16:18:20 user sshd[31481]: Accepted password for user from 10.162.32.196 port 10660 ssh2
12月 21 16:18:20 user sshd[31481]: pam_unix(sshd:session): session opened for user user by (uid=0)
user@user:~$
3. 安装 NVIDIA 显卡驱动
这一步最麻烦(
按照网上的教程来做,但是网上的教程有个坑点就是顺序存在一定问题,在下载了 nvidia
驱动后并没有直接安装,而是先禁用了本身的集显 nouveau
后就重启了,导致启动后黑屏无法进入图形化界面。我一开始不知道,试了好几次,因为这个重装了三次系统...
正确顺序应该是,将 nouveau
禁用加入到黑名单后,不要立即重启,下载并安装好对应的显卡驱动了再重启这样使用的就是显卡驱动而非自带的 nouveau
了,这里介绍了在禁用nouveau但没安装显卡驱动直接重启时如何恢复。
安装前需要安装依赖
sudo apt-get update #更新软件列表
#安装编译依赖
sudo apt-get install g++
sudo apt-get install gcc
sudo apt-get install make
3.1 下载 NVIDIA 驱动
下载 NVIDIA 驱动,服务器使用的是 2080ti
选择如图所示:
下好的文件应该是 NVIDIA-Linux-x86_64-550.142.run
3.2 删除 NVIDIA 相关
在安装驱动之前,先将之前已经安装过与Nvidia相关的内容删除
sudo apt-get remove --purge nvidia*
3.3 禁用 nouveau
首先明确:nouveau是通用的驱动程序,也就是集显,在安装NVIDIA驱动以前需要禁止系统自带显卡驱动nouveau:可以先通过指令 lsmod | grep nouveau 查看nouveau驱动的启用情况,如果有输出表示nouveau驱动正在工作,如果没有内容输出则表示已经禁用了nouveau。
sudo vim /etc/modprobe.d/blacklist.conf
在打开的blacklist.conf末尾添加如下,保存文本关闭
blacklist nouveau
options nouveau modeset=0
在终端输入如下内容,进行更新,这一步一定要小心,千万不要重启服务器!!网上的教程是错误的!!启动后黑屏无法进入图形化界面,更别说安装NVIDIA驱动了!!
sudo update-initramfs -u
3.4 安装 lightdm
sudo apt-get install lightdm
这一步也可以不安装lightdm,使用ubuntu20.04、22.04自带的gdm3显示管理器,直观的区别就是gdm3的登陆窗口在显示器正中间,而lightdm登录窗口在偏左边,正常使用没有区别。
3.5 停止当前的显示服务器,
为了安装新的Nvidia驱动程序,需要停止当前的显示服务器。最简单的方法是使用telinit命令更改为运行级别3。在终端输入以下linux命令后,显示服务器将停止。
sudo telinit 3
这时候会结束图形界面,转到只有命令行的界面,先输入你的用户名和密码登录
禁用X-window服务
sudo /etc/init.d/gdm3 stop
赋予可执行权限:
sudo chmod 777 NVIDIA-Linux-x86_64-550.142.run
3.6 准备安装驱动
安装 NVIDIA 驱动:
sudo ./NVIDIA-Linux-x86_64-*.run –no-opengl-files
会弹出一些选择的窗口:
The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续
Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续
Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 NO 继续
安装过程中会询问是否安装32位的,选择 NO 继续
输入:
nivdia-smi
出现:
user@user:~$ nvidia-smi
Sat Dec 21 17:02:48 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.142 Driver Version: 550.142 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 2080 Ti Off | 00000000:01:00.0 Off | N/A |
| 22% 21C P8 21W / 250W | 6MiB / 22528MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 2080 Ti Off | 00000000:41:00.0 Off | N/A |
| 22% 23C P8 3W / 250W | 6MiB / 22528MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 NVIDIA GeForce RTX 2080 Ti Off | 00000000:81:00.0 Off | N/A |
| 22% 24C P8 1W / 250W | 6MiB / 22528MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 NVIDIA GeForce RTX 2080 Ti Off | 00000000:C1:00.0 On | N/A |
| 22% 23C P8 23W / 250W | 144MiB / 22528MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1415 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 1415 G /usr/lib/xorg/Xorg 4MiB |
| 2 N/A N/A 1415 G /usr/lib/xorg/Xorg 4MiB |
| 3 N/A N/A 1415 G /usr/lib/xorg/Xorg 72MiB |
| 3 N/A N/A 2067 G /usr/bin/gnome-shell 68MiB |
+-----------------------------------------------------------------------------------------+
user@user:~$
4. 挂载机械硬盘
目的:把 8t 的机械盘挂到目录 /mnt/data
下,用于我们的用户存放数据集和代码,便于管理
还有一个好处就是重装系统的时候机械盘的数据不会丢失
我们使用的系统盘是 2t 的固态,已经默认配好了,还有 8t 的机械需要更改挂载路径
使用命令查看挂载情况:
lsblk
可以看到,我们的 sda1
位于 /media/user/afdb377b-dod3-48dc-8fe3-001c1370db65
路径下
先取消挂载
sudo umount /media/user/afdb377b-dod3-48dc-8fe3-001c1370db65
创建目标路径:
sudo mkdir -p /mnt/data
挂载到 /mnt/data
:
sudo mount /dev/sda1 /mnt/data
blkid
查看挂载情况:
df -Th
可以看到,已经切换成功了,设置开机自动挂载
写入 /etc/fstab
,要先切换到 root 权限:
sudo -i
sudo echo "/dev/sda1 /mnt/data ext4 defaults 0 0" >> /etc/fstab
输入命令验证一下,如果没有输出就是成功了
mount -a
下面来安装深度学习环境
5. Anaconda
5.1 下载 Anaconda
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
慢的话可以去清华源下载
下载好后安装:
sh Anaconda3-2024.10-1-Linux-x86_64.sh
配置环境变量
修改
sudo vim ~/.bashrc
在最下面添加:
export PATH=/home/user/anaconda3/bin:$PATH
更新环境变量
source ~/.bashrc
使用conda能找到命令就是成功了
5.2 配置全局 conda
/etc/skel/
下的 .bashrc
可以在新建用户时为其加入默认环境变量
sudo vim /etc/skel/.bashrc
在文件末尾添加 Anaconda 环境变量设置:
# Anaconda setup
export PATH=/home/user/anaconda3/bin:$PATH
6. cuda
6.1 apt 换源
apt 换源,打开配置文件
sudo vim /etc/apt/sources.list
i进入编辑模式,将原有软件源开头全部用 # 注释掉,然后将以下代码复制进去,然后按esc推出编辑模式,输入:wq保存并退出,
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
更新软件包
sudo apt update
6.2 下载 cuda 11.8
下载 cuda 11.8,地址为 Installer for Linux Ubuntu 20.04 x86_64
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
编辑环境变量
sudo vim ~/.bashrc
按 i
进入编辑模式,在末尾将以下代码复制进去,然后按esc
推出编辑模式,输入:wq
保存并退出
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
export PATH=$PATH:/usr/local/cuda-11.8/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8
刷新环境变量
source ~/.bashrc
查看cuda是否已经安装成功
nvcc -V
出现:
user@user:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
user@user:~$
6.3 不兼容
如果执行 sudo sh cuda_11.8.0_520.61.05_linux.run
时提示 gcc
不兼容,可以使用 gcc-9
sudo apt install gcc-9 g++-9
设置为默认 gcc 版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100
检查 gcc 版本是否成功切换
gcc --version
6.4 配置全局 cuda
修改 /etc/profile
文件,它是一个全局配置文件,所有用户登录时都会读取这个文件
sudo vim /etc/profile
在文件末尾添加CUDA环境变量配置:
# CUDA setup
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
export PATH=$PATH:/usr/local/cuda-11.8/bin
export CUDA_HOME=/usr/local/cuda-11.8
刷新环境变量
source ~/.bashrc
7.安装 cudnn
选择 下载 cuDNN v8.9.7 (2023 年 12 月 5 日), 适用于 CUDA 11.x
下面的 Local Installers for Windows and Linux, Ubuntu(x86_64, armsbsa)
中的 Local Installer for Linux x86_64 (Tar)
下载 cudnn 需要邮箱验证
解压并复制文件
sudo tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.9.7.29_cuda11-archive/
sudo cp -r lib/* /usr/local/cuda-11.8/lib64/
sudo cp -r include/* /usr/local/cuda-11.8/include/
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*
验证是否成功安装
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
出现:
zzy@user:~$ cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 7
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
/* cannot use constexpr here since this is a C-only file */
zzy@user:~$
因为 cudnn 是直接复制到 cuda 目录的,所以不需要进行配置
至此,你已经完成了环境配置,下面是一些创建用户的命令
8. 管理员常用命令
8.1 新建用户
提示
注意将 zzy
改成你要新建的用户名
创建用户
sudo useradd -m -s /bin/bash zzy
用户自己可以访问,其他人无法访问
sudo chmod 700 /home/zzy
在 /mnt/data 下创建用户对应的文件夹
sudo mkdir /mnt/data/zzy
确保用户只能访问自己的文件夹,用户 zzy 只能访问 /mnt/data/zzy 目录,其他用户无法访问。
sudo chown zzy:zzy /mnt/data/zzy
只有该目录的拥有者可以读取、写入和执行
sudo chmod 700 /mnt/data/zzy
给用户初始化密码
sudo passwd zzy
8.2 删除用户
查找并结束该用户的进程
ps -u zzy
出现:
user@user:~$ ps -u zzy
PID TTY TIME CMD
132988 ? 00:00:00 sh
133489 ? 00:00:00 sh
139956 pts/6 00:00:00 sh
使用 kill -9 强制终止进程
sudo kill -9 132988
sudo kill -9 133489
sudo kill -9 139956
删除用户
sudo userdel -r zzy
9. 其他
9.1 为所有用户安装git
sudo apt update
sudo apt install git
出现:
user@user:~$ git --version
git version 2.34.1
user@user:~$
10. 总结
10.1 问题
在重启ubuntu的过程中发现2种情况的黑屏:
- 在grub引导菜单选择ubuntu后进入黑屏后,左上角有
-
光标一直在闪烁,操作无反应且一直进不去系统。
- 在grub引导菜单选择
Advanced options for Ubuntu
,以救援模式启动:
卡在这里操作无反应且一直进不去系统,如下图所示的报错
10.2 原因分析
这两种错误都是由于安装的NVIDIA显卡驱动与ubuntu自带的 nouveau 发生了冲突导致的
下面教你怎么进入单用户模式:
- 我尝试了这个方法没用,你看一下就行:
在第二行按e进入编辑
出现:
ro
后面改成 rw single quiet splash nomodeset init=/bin/bash
可以出现命令行,但是按什么键都没有反应
- 你需要按照这个方法:
尝试在第一行按e进入编辑
出现:
ro
后面改成 rw single init=/bin/bash
:
出现:
这时候就可以敲命令了,不过最后还是没救回来。
参考资料: