Linux 服务器配置

最近想自己配置一台 AI 服务器,但是因为预算不够,希望能用最低的成本配置一台即可以用来部署 Stable Diffusion 又可以用来部署一个私有的大模型。搜索了一下常见的方案,一般一台人工智能服务器,不用显卡都在六七千左右,算上显卡需要在一万以上。这显然远远超过我的预期成本。后来经过多方的了解,最后使用 3000 元左右配置了一台足够运行这些内容的服务器。

服务器配置

服务器配置中,最重要的就是显卡,最近因为大模型的原因,许多显卡的价格都有所上涨,在显卡选择的时候,最主要的就是显存需要足够大,然后就是便宜,最后比较合适的是二手的 Tesla P100 16G 和 Tesla P40 24G ,这两个显卡中最好的选择是使用 P40 因为显存足够在,而且价格上也相差不多,但是因为 SD 本身比较火的原因,很难买到价格合适的 P40 显卡了,许多都上浮了 100-300 元,所以最后选择是 P100 显卡,然后买了一个 3D 打印的接口加一个风扇共花了 828 元。

然后就是主板、 CPU 和内存,因为预算不够,所以在选择的时候都使用了比较常见的 精粤X99 主板和 E5 2680V4 CPU ,主打一个便宜管饱。内存则选择了 2 块 32G 的三星 DDR4 2400T 的内存,在选择上没有太多的主要考虑内存和主板配套即可。硬盘选择的是七彩虹的 M2 1T 固态硬盘,后面如果使用多了,会考虑增加一块机械硬盘,主打量大管饱即可。

配件 主板 + CPU 内存 硬盘 显卡 电源 机箱 亮机显卡 CPU 风扇
选择 精粤X99-TITANIUMD4 + E5 2680V4 三星 DDR4 32G 2400T *2 七彩虹 M.2 1T Tesla P100 16G + 风扇 鑫谷全模组850W 开放机箱 Quadro K620 2G 乔思伯 HX6240 塔式
价格 425 260 *2 439 828 387 39 + 15 145 220
3018

本来选择的是 X99-Plus 版本,后来选择换成了 X99T 版本,有三个 PCI-E 16 的插口,可以插三个显卡,这样可以最大效能的使用这块主板的能力。

需要注意的是,在虽然有三个 PCI-E 16 插口,但并不是所有的插口都是 X16 的,X99T 板只有一个插口是 X16 的速度,需要使用 lspci 命令查看对应的访问速度。

另外在配置机器的过程中需要注意亮机卡和计算卡间的兼容问题。最开始使用的是 GTX710 作为亮机卡,但是在使用过程中发现只能按装低版本的驱动。这里使用的是 Fedora 39 Workstation 系统,所以需要从 rpmfusion.org 上下载驱动。这里需要注意的 2014 年后的 GeForce/Quadro/Tesla 显卡都是使用最新版本的驱动的 CUDA ,但我之前选择的 GTX710 正好是在 2014 年之后,使用是的 CUDA11.3 版本。

在查找显卡的时候,发现 Quadro 的 P600/P620 和 K620 显卡是比较便宜且好用的,所以最后选择的是 K620 2G 版本的显卡,安装驱动的命令如下,具体的流程见下节。

sudo dnf update -y # and reboot if you are not on the latest kernel
sudo dnf install akmod-nvidia # rhel/centos users can use kmod-nvidia instead
sudo dnf install xorg-x11-drv-nvidia-cuda #optional for cuda/nvdec/nvenc support

安装 Nvidia 驱动

在安装 Nvidia 的驱动之前,需要先了卸载掉 Linux 下开源的驱动程序 nouveau 。但是因为显卡的驱动本身是存在于启动项的,如果直接卸载掉,再重启的话,会导致系统黑屏。所以在安装之前需要先禁用掉启动项。但是在卸载之后,是没有显驱,所以 Linux 是无法正常进入到图形界面形式的。

因此在更换驱动到 Nvidia 官方提供的驱动前,需要先做 4 件事:

禁用 nouveau 驱动

禁用 nouveau 的驱动主要做两件事,加入黑名单并重新生成启动项。

touch /etc/modprobe.d/nouveau-blacklist.conf

然后向其中写入:

blacklist nouveau
options nouveau modeset=0

之后再将禁用命令加入到引导程序命令行中:

vi /etc/default/grub

增加 rd.driver.balcklist=nouveau 到 grub 文件中的 GRUB_CMDLINE_LINUX 参数中。

然后重新生成启动文件:

grub2-mkconfig -o /boot/grub2/grub.cfg

切换到 root 权限

启用 root 用户需要先设置对应的密码。

sudo passwd root

然后查看 nouveau 是否已经禁用

lsmod | grep nouveau

禁用图形界面服务启动项

service graphical.target stop

切换默认设置为命令行模式

对于 Fedora 来说,退切图形界面非常简单,将默认配置修改为多用户状态即可:

systemctl set-default multi-user.target

按上节提到的命令进行安装对应的显卡驱动和 CUDA 驱动即可。

最后需要再切回图形界面:

systemctl set-default graphical.target

然后重启系统,正常进入系统之后,使用 nvidia-smi 命令可以正常查看显卡的状态即可。

系统更新后修复

最近 fedora 从 39 更新到 40 版本,启动时会提示: Nvidia kernel module missing, Falling back to nouveau 。然后进入到图形界面时,会发现分辨率变低了,使用 lsmode | grep nouveau 查看,可以看到 nouveau 的驱动还是启动状态,查看对应的禁用项,发现配置都没有问题。

经过分析是因为更新系统后, nvidia 的驱动版本不匹配了,需要重新安装。先执行卸载驱动。

dnf remove \*nvidia\*
dnf remove akmod-nvidia
dnf remove nvidia-gpu-firmware

然后更新系统:

dnf upgrade

最后重新安装对应驱动:

dnf install akmod-nvidia
dnf install xorg-x11-drv-nvidia-cuda

最后再将启动方式修改到图形界面: systemctl set-default graphical.targe 然后重启即可。

使用 Cuda 替代 nvidia-driver

之前安装驱动的时候是使用的 nvidia-driver 但是这在更新时经常会出现版本和内核差异导致的更新失败,经过几次分析之后发现可以使用 cuda 安装对应的驱动来替代直接安装 driver ,同时能保证各个模块间的相对匹配。

具体的安装方法可以看 How to CUDA

安装方法如下:

sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/fedora39/x86_64/cuda-fedora39.repo
sudo dnf clean all
sudo dnf module disable nvidia-driver
sudo dnf -y install cuda

之后重启系统即可正常使用了。

Linux 基础配置

这时虽然已经安装好了显卡驱动,可以开始进行开发和使用了,但是系统在使用起来还是有点奇怪的状态,按自己的习惯做以下配置。

切换系统目录

因为默认是使用的中文环境,所以系统默认目录都是中文的,但是在使用过程中感觉不太习惯,特别是输入法未安装好之前。

export LANG=en_US
xdg-user-dirs-gtk-update

这样就可以装默认的目录改成英文了,之后再修改回中文语言环境。

export LANG=zh_CN.UTF-8

安装中文输入法

Fedora 默认是使用的 ibus 输入法,这里我习惯使用的 RIME 输入法,需要安装 rime 输入法:

dnf install ibus-rime

然后重启系统,同时编写用户配置文档:

vi ~/.config/ibus/rime/default.custom.yaml

配置文档如下:

patch:
  schema_list:
    - schema: wubi86
      - schema: wubi_pinyin
        - schema: pinyin_simp
          menu:
            page_size: 5

这里因为我是五笔用户,所以首选的输入法是五笔 86 版,然后配合五笔拼音和简化字拼音两个输入法作为日常输入使用。

配置完成后,可以使用下面的命令进行重新部署,或者在输入法选项页选择部署。

touch ~/.config/ibus/rime; ibus restart

安装日常工具 Emacs

作为一个多年的 Emacs 老用户,已经配置好了一套自己配置文件,在此只需要在 Fedora 中安装即可。

dnf isntall emacs

然后下载 .emacs.d/ 配置项目,即可正常安装 elpa/ 包,但是需要注意的是,需要额外执行一下 nerd fonts 的命令来启用一些图标。

在 Emacs 中执行 M-x nerd-icons-install-fonts 即可。

安装 Git 并配置

Git 也是一样的,默认使用 dnf 安装即可(一般都是安装好的)。然后需要做以下的配置:

git config --global core.edit "vim"
git config --global user.name "<your_name>"
git config --global user.email "<your_email>"

然后是一些 Git 的配置小技巧,特别是在使用 Git 拉取大文件时,有时会报错文件传输失败,Curl 报错 128 等,开启下面的配置:

git config --global http.postBuffer 52428800
git config --global http.lowSpeedLimit 100
git config --global http.lowSpeedTime 10
git config --global core.cmpression -1

安装 zsh 和 ohmyzsh

在大多数 Linux 系统上默认的 shell 环境都是 bash ,但是 bash 使用和配置却没有 zsh 简单和易用,特别是在 Mac 电脑上,配合 iterm2 和 tmux 包,可以非常方便的使用终端环境。

sudo dnf install -y zsh
chsh -s /bin/zsh

这样就将默认的 Shell 环境切换到 zsh 上了。然后就可以通过清化源进行配置和安装了。

git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git
cd ohmyzsh/tools
REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh install.sh

然后再将常用的一些 zsh 的插件安装将启用,就获得了一个非常好用的 zsh 环境。

然后可以按自己的想法启用内置的插件了,比较常用的是 copy* 系列。

在 Fedora 中如果想使用 copy* 命令,需要安装 xclip 包才行, dnf install xclip 这样就可以使用 copypath 等命令来直接操作终端了。

另外比较好用的插件是自动填充和高亮两个插件。

git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestioins ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestioins

下载利器 aria2

Fedora 下依然是使用 dnf 进行安装。但是对于 aria2 和 windows 下的下载工具不同,其需要使用命令行进行下载。

截图工具 flameshot

Linux 下比较好用的截图工具,可以直接使用 dnf install flameshot 命令进行安装,使用时直接右键即可打开进行截图和保存。

安装工具扩展 flatpak

使用 dnf install flatpak 命令进行安装。

配置对应的镜像:

sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub

如果想更新 flatpak 安装的包,直接使用 flatpak update 即可。

安装的工具

在 Mac 上使用 homebrew 安装, Linux 上可以使用 snap 或者 flatpak ,但是 snap 用起来很麻烦,经常出错,所以改使用 flatpak 。

dbeaver
flatpak install flathub io.dbeaver.DBeaverCommunity

总结

至此一台 Fedora 系统的低成本人工能力服务器配置好了。与一般的思路不太一样,这台机器可以作为开发和工具的主力机来使用的。

后面如果再有新的内容,就再更新。

另外一个必不可少的具,虽然有安装,但是并不适合放上来说,大家开心就好啦。