Linux学习笔记 #4 服务器环境配置
本文最后更新于:2024年8月12日 下午
上一节 Linux学习笔记 #3 连接远程服务器 中,介绍了远程控制 Linux 服务器的情景。假设我们已经完成了初次 SSH 鉴权,以下内容为后续的操作。
当新用户登录服务器时,会默认在 /home/user
目录下,此时这里只有配置好的 .ssh
目录。用户目录下的所有配置仅会与用户个人绑定,包括 Python、Conda、Git、Bash 等环境,所以此时我们需要一一配置。
/home/user
目录通常空间有限,因此对于开放权限较高的私人服务器,用户目录只用于存放个人使用的配置文件。而工程以及大文件则会存放在另外的/data/user
目录下,以节省服务器的存储空间。下面我们称/home/user
目录为~
。
Anaconda 环境
首先需要安装 Anaconda 环境,使用 wget
命令从清华镜像源下载(该命令由 Unix 自带),不需要下载最新版(这里选用的版本仅支持到 Py3.8):
1 |
|
下载完成后,当前目录下就会出现 .sh
脚本形式的安装包,输入以下命令运行:
1 |
|
一路 Enter 确定,最后输入 yes,安装后可用 conda -V
查看版本。如果这里提示无法识别命令,参考接下来的做法即可。
虚拟环境
在 ~
目录下,还有一个 .bashrc
文件,对于大部分 Unix 系统,Bash 是作为默认终端被安装的。你对 bashrc 所做的任何修改将在下一次启动终端时生效。如果你想立刻生效的话,运行下面的命令:
1 |
|
此时会发现用户名前面就会有一个 (base)
,表示现在处于基础环境中。Conda 集成了 Python 发行版,同时可以对 Python 虚拟环境进行管理,常用的命令有:
conda create -n <env_name> python=<ver>
:创建 conda 环境。conda create -n <env_name> --file <this file>
:创建 conda 环境并指定 requirement.txt 路径配置。conda create -n <new_env> --clone <old_env>
:复制原有 conda 环境。conda env list
或conda info -e
:查看现有的 conda 环境。conda activate <env_name>
:切换 conda 环境。conda deactivate
:关闭虚拟环境。conda remove -n <env_name> --all
:删除环境。conda list --export > environment.yml
:导出环境配置列表。conda env create -f environment.yml
:根据环境配置列表创建新环境。
良好的环境管理习惯有益于在同一机器上运行多个深度学习框架而相互之间不会影响,用户创建的环境会被保存在 ~/anaconda3/env/xxx
,需要时可以直接拷贝。
CUDA 环境与 PyTorch
安装完 Anaconda 后,我们就能使用 pip
和 conda
两种包管理器了(此前只能用 Linux 自带的 apt
)。
在服务器里,我们只推荐用
conda
安装cudatoolkit
、cudnn
以及jupyter
相关的包,其他包建议用pip
进行安装。
安装 CUDA 前,可以先查看显卡驱动的版本:通常是你的环境需要什么版本的 CUDA,你就需要对应版本的驱动。对应关系可以查看:CUDA Release Notes (nvidia.com)。
初次登录可以先测试 nvidia-smi
,其中会显示 Driver Version(当前显卡驱动)以及 CUDA Version(当前驱动支持的最高 CUDA 版本)。
如果没有反应,可能需要手动安装 N 卡驱动:
1
2
3
$ sudo add-apt-repository ppa:graphics-drivers/ppa # 把显卡驱动加入PPA
$ ubuntu-drivers devices # 查找当前设备适合的驱动版本
$ sudo apt-get install nvidia-driver-418 # 安装对应版本如果要更换驱动版本,则需要卸载后重装,中间需要重启机器一次:
1
2
3
4
5
6
$ sudo apt-get remove --purge nvidia* # 直接卸载
$ sudo apt autoremove
$ ./nvidia-uninstall # 也可以用二进制文件进行卸载,一般在 /usr/bin 下
$ sudo apt install nvidia-driver-530 # 530 是版本号
之后就可以安装 CUDA 了,官网的链接有 CUDAToolkit 和 cuDNN。不过其实现在安装 PyTorch 时可以帮你带上 cudatoolkit 和 cudnn 等东西的安装,所以也可以跳过。如果要安装,建议使用 conda
在 conda-forge
源下进行安装:
1 |
|
安装在基本环境后,可以使用 nvcc -V
查看 CUDA 版本。
第三方库
使用 pip
进行安装时,建议安装在虚拟环境中,特别是一些不常用的包。如果下载过慢或失败,可以使用清华源进行下载,使用以下命令在个人配置中更新及换源:
1 |
|
如果不方便换源,临时使用的方法为:
1 |
|
这里以 PyTorch 为例,我们将其装在虚拟环境中,使用以下命令,不同库之间用空格隔开可一并安装:
1 |
|
为什么 PyTorch 不要装在基本环境?因为安装高版本的 PyTorch 时会自动替换 Numpy 等依赖库至相应版本。而这些自动替换的基础库很有可能与其他高级库产生不匹配的冲突,导致原先功能无法正常使用,也就是原先的运行环境会被污染。此外这样也便于虚拟环境的拷贝。
注意:通常安装 PyTorch 会在 官网 选择合适的版本,如果待安装的 PyTorch 版本较旧,可以指定安装时的 index 地址。官方提供的 whl 目录在这:download.pytorch.org/whl/torch/。
成功安装后可以在命令行里打开 Python 测试:
1 |
|
下面列举需要安装在基本环境中的常用库,安装方法同上:
gpustat
:用于查看动态查看 GPU 状态(需要 Nvidia 驱动),watch -n1 -c gpustat --color
。ipdb
:用于简易的断点调试,可以看做pdb
的升级版,python -m ipdb main.py
。
Notebook
有时候需要在远程服务器中使用 Jupyter Notebook,就需要先在远程安装:
1 |
|
之后就可以在远程启动 Jupyter 服务,内核放在远程:
1 |
|
启动后会获得服务的 URL 地址,这个地址可以在本地用浏览器直接打开,也可以在 VSCode 中安装 Jupyter 插件后打开。
个人配置
如果这个服务器需要长期使用,那么进行下面的配置就很有必要。以下大部分内容需要用 apt
包管理器安装,因此需要获取 sudo
临时管理员权限,如果没有可以向管理员申请。
Git 配置
安装 Git 后,在 ~
下就会存在一个 .gitconfig
或 .config/git/config
的文件,如果没有则需自行安装:
1 |
|
在服务器里配置 Git 有三层,每层的配置(系统 --system
、全局 --global
、仓库 --local
)都会覆盖掉上一层次的配置,这里要修改 ~
下的个人配置,则需要用到 --global
:
1 |
|
如果需要建立远程 SSH 鉴权,使用以下命令打印出公钥,手动复制到 GitHub 上:
1 |
|
oh-my-zsh
首先检查服务器可用终端是否包含 zsh
,如果有直接切换,并安装插件管理器 oh-my-zsh
:
1 |
|
如果没有自带 zsh
,完成以下几步后,就可以成功安装二者:
1 |
|
如果执行第一步时无
sudo
权限,则需要自行安装资源包及依赖,参考:Linux 以非 root 用户安装 zsh。
重启系统,此时已经进入新的 zsh
终端,下载将要用到的主题和插件:
1 |
|
打开 .zshrc
,手动修改以下配置:
1 |
|
oh-my-zsh
自带的插件定义了常用的别名,可以用 alias
命令查看:
1 |
|
下面是部分自带的插件、需要手动安装的插件介绍:
z
:在常用目录之间直接跳转,使用z <dir_name>
。extract
:一键解压各种形式压缩包,使用x <file_name>
。gitignore
:一键生成 gitignore 模板,使用gi python > .gitignore
。cpv
:带进度条复制文件,使用cpv <a> <b>
。colored-man-pages
:带颜色的man
菜单。sudo
:上一条命令忘记加sudo
,双击ESC
就会自动加上。zsh-autosuggestions
:命令补全插件,需要手动安装。zsh-syntax-highlighting
:命令高亮插件,需要手动安装。tldr
:简化man
菜单,使用tldr <command>
。需要手动安装并更新数据库。
之前在
.bashrc
里的一些配置也要搬过来,主要有 Conda 环境的路径配置和一些 alias,配置完成后使用source ~/.zshrc
命令重启终端即可。之后会进入主题的引导设置,如果想重新配置可以输入p10k configure
命令。有时候配置完 zsh 后会使用不了 pip 等命令,出现 zsh: command not found: xxx 报错,这时候需要在
~/.zshrc
中找到 User configuration 位置,将~/.bash_profile
或者~/.profile
中的跟系统路径有关的命令复制进去。(export $(cat /proc/1/environ |tr 0 n | xargs --null)
)
反向代理
加载预训练模型时,总是不可避免地要去访问国外下载源,而部署在国内网络的服务器则无能为力。此时就需要在主机使用 VPN,通过「反向代理」的方法让服务器也能使用到主机的 VPN。
在本机终端输入以下命令,并保持终端开启:
1 |
|
在服务器终端输入以下命令:
1 |
|
完成后,可以使用 wget google.com
测试是否成功。为了方便在服务器开启服务,可以在 ~./zshrc
中加上别名:
1 |
|
如果上述方法行不通,除了用本机下载预训练模型后
scp
到服务器,还可尝试此方案:如何优雅的下载 huggingface-transformers 模型。最新的总结,包含镜像站:如何快速下载huggingface模型——全方法总结 - 知乎 (zhihu.com)
服务器安装 Clash
这里展示在 Linux 系统中使用 Clash 挂载 VPN 的方法:
下载 Clash Premium:参考 clash-linux-amd64-vX.Y.Z.gz 或 clash-linux-amd64-YYYY.MM.DD.gz
进入服务器,在任意目录下新建文件夹 /clash,解压上述文件:
1
2
3
4# 解压上述文件
gzip -d clash-linux-amd64-vX.Y.Z.gz
# 将解压后的文件重命名为 `clash`,再赋权
chmod 777 clash在该目录下运行解压后的文件:
./clash
- 这个时候会报错,然后在 ~/.config 下会自动创建一个 clash 目录,并自动下载 MMDB 文件
- 如果没有自动下载,则到 仓库 中手动下载然后拖到 ~/.config/clash 下
- 此时这个目录下有三个文件:cache.db + config.yaml + Country.mmdb
在本地找到 VPN 的 Clash 配置文件 config.yaml,复制到 ~/.config/clash/config.yaml 中:
直接配置的服务器可能时断时续,可以打开 Tun 模式使用(只有 Premium 版才能开启),在 YAML 配置文件末尾加入以下内容:
1
2
3
4
5
6
7
8tun:
enable: true
stack: system # gvisor
dns-hijack:
- any:53
auto-route: true # auto set global route
auto-redir: false
auto-detect-interface: true # conflict with interface-name复制完再到 /clash 目录下运行
./clash
,此时就能跑通如果报错显示 7890 或 9090 端口被占用,一般是被僵尸进程占用了,使用
ps aux | grep clash
找到进程号,再kill
即可
成功运行后,在终端中配置端口转发:
1
2export http_proxy=127.0.0.1:7890
export https_proxy=127.0.0.1:7890
大功告成!可以测试连接:
1 |
|
一键配置
下面对于临时使用的命令进行汇总,由 Shell 脚本的形式一键执行。只需在 /home/user
目录下新建一个 run.sh
文件,输入以下内容:
1 |
|
在命令行中执行 sh run.sh
。