全新服务器配置科研环境
2023.06.20
近期趁着618活动买了一些硬件组建了一台深度学习工作站,为了更好的解决平时环境搭建中的问题,因此特意记录了全部的搭建过程。不得不说,虽然平时经常有搭建,但是到了自己手里,却还是发现问题不断,折腾了好久才弄好。
换源
查询机器的版本:
cat /etc/os-release
lsb_release -a
此次安装的系统版本是Ubuntu22.04,更换[清华源],具体步骤如下:
# 备份原始的系统源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 修改 /etc/apt/sources.list
sudo vim /etc/apt/sources.list
# 或者
sudo gedit /etc/apt/sources.list
# 删除其中的内容,并在其中填入以下内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src 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-src 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-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# 保存并更新
sudo apt-get update
# 复损坏的软件包,尝试卸载出错的包,重新安装正确版本
sudo apt-get -f install
# 更新软件
sudo apt-get upgrade
应用
在换源以后,就可以继续安装其它各种平时需要用到的软件了,例如远程用的ssh、后台运行的tmux等。
ssh
远程连接使用
# 安装
sudo apt install openssh-server
# 设置开机启动
sudo systemctl status ssh
vim
编辑器
sudo apt-get install vim
tmux
后台运行
sudo apt-get install tmux
curl
sudo apt-get install curl
tree
sudo apt-get install tree
htop
sudo apt-get install htop
ZeroTier
局域网组建
# 下载与安装
curl -s https://install.zerotier.com | sudo bash
# 加入网络
sudo zerotier-cli join [your network ID] # 完成以后还要去网页确认
sudo zerotier-cli join af78bf943630f92e
安装gcc
部分软件对gcc版本有要求,因此需要安装最新的gcc进行支持。
sudo apt-get install build-essential
gcc --version
安装完以后,获得版本信息:

最后更新initramfs
sudo update-initramfs -u
git和git lfs
git和git lfs分别是从GitHub和huggingface上获取模型资源的工具,因此需要提前安装这两个工具在系统中。
# 安装git
sudo apt-get install git -y
# 安装git lfs
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install
Expect
Expect命令是一个用来处理交互的命令。借助Expect,可以将交互过程中的一些动作(例如,登录跳转机等)写在一个脚本上,使它能够自动完成登录或其他动作。前提是linux/mac使用ssh远程登录没有保存密码或自动登录的功能,因此使用expect脚本的形式实现,保证linux/mac上已经安装了expect(apt-get/brew install expect)。
sudo apt-get install expect
GPU
nvidia driver
- 删除所有显卡驱动
# 方法1
sudo apt purge nvidia*
sudo apt autoremove
# 方法2
sudo apt-get --purge remove nvidia*
sudo apt autoremove
- 禁用系统默认显卡驱动nouveau
在安装NVIDIA驱动后,系统重启时可能会出现黑屏,无法进入图形界面。这通常因为NVIDIA驱动与系统自带的nouveau驱动冲突,或者驱动版本不兼容等原因导致黑屏。
#打开系统黑名单:
sudo gedit /etc/modprobe.d/blacklist.conf
#文件末尾填入:
#for nvidia display device install
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb
# 或者填入
blacklist amd76x_edac
blacklist nouveau
options nouveau modeset =0
#保存,然后更新initramfs:
sudo update-initramfs -u
#重启电脑
sudo reboot
#开机后输入:
lsmod | grep nouveau
#没有任何输出说明禁用成功。
#关闭图形界面
sudo service lightdm stop
- 配置Xorg
在完成NVIDIA驱动安装后,也完成了nouveau禁用,但仍然可能出现黑屏,这多半是需要手动配置Xorg。(此问题多出现在 Ubuntu 20.04 之后的版本。)
# 删除xorg.conf文件
sudo rm /etc/X11/xorg.conf
# 重新生成xorg.conf文件
sudo nvidia-xconfig
# 重启电脑
sudo reboot
安装NVIDIA驱动后,开机黑屏问题:请参考解决Ubuntu装完NVIDIA驱动后黑屏问题的详细步骤及代码解析 和 ubuntu Nvidia显卡驱动安装后 屏幕不能外接显示(扩展显示)的问题。
- 安装
M1.离线安装
驱动下载,下载完成后,按照如下命令进行安装:
sudo bash ./NVIDIA-Linux-x86_64-530.41.03.run
安装结束后,使用nvidia-smi进行测试:

M2.命令行安装
命令行安装的前提是机器联网了。安装的时候有两种命令,第一种是自动安装最新驱动,第二种是手动选择特定版本的驱动程序安装。
# 方法1
sudo ubuntu-drivers autoinstall
# 方法2:安装特定版本
ubuntu-drivers devices
sudo apt install nvidia-driver-xxx
Command 'nvidia-smi' not found, but can be installed with:
sudo apt install nvidia-340 # version 340.108-0ubuntu5.20.04.2, or
sudo apt install nvidia-utils-390 # version 390.157-0ubuntu0.20.04.1
sudo apt install nvidia-utils-450-server # version 450.248.02-0ubuntu0.20.04.1
sudo apt install nvidia-utils-470 # version 470.256.02-0ubuntu0.20.04.1
sudo apt install nvidia-utils-470-server # version 470.256.02-0ubuntu0.20.04.1
sudo apt install nvidia-utils-535 # version 535.183.01-0ubuntu0.20.04.1
sudo apt install nvidia-utils-535-server # version 535.183.06-0ubuntu0.20.04.1
sudo apt install nvidia-utils-550-server # version 550.90.07-0ubuntu0.20.04.2
sudo apt install nvidia-utils-435 # version 435.21-0ubuntu7
sudo apt install nvidia-utils-440 # version 440.82+really.440.64-0ubuntu6
sudo apt install nvidia-utils-418-server # version 418.226.00-0ubuntu0.20.04.2
在方法2中,“ubuntu-drivers devices”命令可以查看可用驱动程序,然后使用apt选择对应的版本安装。
cuda
- 下载
前往Cuda官网下载对应的cuda。目前,cuda更新版本很快,一般来说选择较为新的版本即可,下载链接,选择好版本以后,根据系统版本确定要下载的文件。

wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run
- 安装
参考已有的教程会有如下两种安装方式,前者是较为通用的,也是官方给出的。后者则是一些避免检查的情况,这里需要说明的是,如果前面Nvidia驱动安装没有问题的话,直接按照第一条命令运行即可,如果没按上述操作,可能第二条命令能否通过也不完全能肯定。
sudo sh cuda_12.0.0_525.60.13_linux.run
sudo sh cuda_12.0.0_525.60.13_linux.run -–no-opengl-files -no-x-check
安装完成后做一下检查:
ls /usr/local/
ls /usr/local/cuda-11.2
ls /usr/local/cuda #和上面那条命令展示出来的内容是一样的,说明建立了软链接
cudnn
- 下载
和cuda的下载一样,需要去官网下载对应的cudnn文件。这里选择合适自己cuda版本的即可,下载链接(v8.9.7及以前版本)和下载链接(新的版本)。需要注意的是,下载cudnn需要账号,一般来说找个邮箱注册一下即可。
这里还需要注意的是,虽然系统是ubuntu22.04,但还是选择如下截图的蓝色框内的版本即可。

这里还有一个问题是,因为需要登录了才能下载,我通常是在笔记本上登录下载后传输到服务器上进行安装,除非是直接在服务器上登录账号下载。
- 安装包解压
获得下载好的cudnn文件以后,首先对文件进行解压。最近一段时间和以往有了很大不同,早期是直接的tar.gz压缩包,现在换成了tar.xz压缩包,解压有所区别(这里我也不是太清楚区别是什么),我是按照下面的解压方式操作的:
tar -xvf cudnn-linux-x86_64-8.8.0.121_cuda12-archive.tar.xz
- 执行安装
进入解压包,依次执行下面的命令
sudo cp include/cudnn*.h /usr/local/cuda-12.0/include
sudo cp lib/libcudnn* /usr/local/cuda-12.0/lib64/
sudo chmod a+r /usr/local/cuda-12.0/include/cudnn*.h
安装完成后,输入nvcc -V进行测试:

配置环境
最后,还需要进行最后一步,需要将cuda环境配置给用户,这样用户才能使用cuda。
在用户目录下运行vim ~/.bashrc,并在文件末尾添加命令:
# 设置正确的CUDA路径
export CUDA_HOME=/usr/local/cuda-12.0
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
最后激活环境source ~/.bashrc。
启航
Anaconda
通常选用清华源提供的miniconda作为base环境,详细说明可以看 [清华源]。
# 下载miniconda
wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh
# 安装
bash Miniconda3-py39_4.9.2-Linux-x86_64.sh
# 激活环境
source ~/.bashrc
# 设置开机不自动加载
conda config --set auto_activate_base false
完成以后设置pip和conda的源为清华源,方便后续安装各种包文件
- pip
# 临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
# 长期使用
# 1.升级pip
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
# 2.设置清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- conda
清华源为conda也提供了源服务,详细内容可以访问 [清华源] 了解详细内容。
# 打开配置文件
vim ~/.condarc
# 替换里面的内容为
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
保存好以后,还需要清理索引缓存:
conda clean -i # 清除索引缓存,保证用的是镜像站提供的索引
PyTorch
PyTorch目前已经成为深度学习不可或缺的框架之一,随着其不断地迭代更新,目前有1.x和2.x两个分支版本,我平时以1.x为主,所以安装了较为新的1.12.0版本。通常都会去官网获取下载命令,访问 [pytorch.org].
# CUDA 11.6
pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu116
# CUDA 11.3
pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu113
为了方便以后进行二次利用,这里我采取了下载本地的操作:
# CUDA 11.6
pip download torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu116 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装好以后需要测试一下是否生效:
# 安装torch
pip install torch-1.12.0+cu116-cp39-cp39-linux_x86_64.whl
# 本地测试
import torch
print(torch.__version__)
print(torch.rand(1, device="cuda"))
上述代码顺利运行不报错,则表示环境配置正常。
用户和权限
权限
- 让所有用户都可以读写目录内的所有内容
chmod -R 777 /path/to/file_or_directory
- 将目录内所有文件的所有者改为username
- 将目录内所有文件的所有组改为groupname
chown -R username /path/to/file_or_directory
chown -R username:groupname /path/to/file_or_directory
挂载新硬盘
- 将新硬盘正确安装到机器内;
- 查看硬盘分区:
硬盘安装成功后,开机进入系统,在终端查看/dev目录下映射到硬盘的文件。
ls -l /dev/sd*

/dev/sda表示第1块硬盘,/dev/sdb表示第2块硬盘,/dev/sdc表示第3块硬盘。另外,还有一个/dev/sda1表示第1块硬盘的第一个分区,同时可以发现/dev/sdb和/dev/sdc没有分区,表示这是新添加的硬盘。
- 查看各个硬盘设备的信息:
lsblk -f / fdisk -l

nvme*的分区是用来安装系统的,第一个SATA硬盘已经划分了一个分区 sda1,sdb和sdc没有分区。
- 创建硬盘分区
使用fdisk工具为新硬盘创建分区:
sudo fdisk /dev/sdb
然后进入fdisk的命令提示界面,通过m查看帮助信息:


根据提示,输入n和w来创建新分区并退出。
再次查看分区信息:
ls -l /dev/sd*
- 分区格式化
sudo mkfs.ext4 /dev/sdb1
- 硬盘挂载
临时挂载用 mount:
mkdir /mnt/disk01 # 创建挂载点
mount /dev/sdb1 /mnt/disk01
umount /mnt/disk01 # 卸载
查看挂载结果:
df -h
永久挂载用 vim /etc/fstab,在文件末尾添加:
/dev/sdb1 /mnt/disk01 ext4 defaults 0 0
- 挂载生效
mount -a
设置huggingface国内源和映射路径
- 设置国内镜像源
export HF_ENDPOINT=https://hf-mirror.com
# 或者
vim ~/.bashrc
# 添加
export HF_ENDPOINT=https://hf-mirror.com
source ~/.bashrc
- 设置模型下载路径
默认下载路径是: ~/.cache/huggingface,可以将其映射到目标路径(例如:/data/models)
ln -s /data/models ~/.cache/huggingface
注意,目标路径必须是一个绝对地址。
无秘钥设置
为提高服务器的安全性,通常需要设置无秘钥登录,这里以设置无秘钥登录为例。
无秘钥设置的核心是关于本地pc和远程服务器之间的ssh秘钥的设置,因此分为两部分:
远程服务器设置 本地pc设置
- 远程服务器设置
# 生成秘钥
ssh-keygen -t rsa
# 将秘钥添加到authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 设置权限
chmod 600 ~/.ssh/authorized_keys
- 本地pc设置
# 将本地pc的公钥添加到远程服务器的authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
设置完成后,即可完成在本地pc无秘钥登录远程服务器。