Skip to content

使用服务器 ​

GPU 实验基本都在服务器上做。这一页讲怎么登录、怎么在上面写代码和长时间跑实验、怎么传文件,以及共用服务器的规矩。

SSH 登录 ​

SSH 是远程登录服务器的标准方式。Windows(PowerShell、WSL)、Mac、Linux 都自带 ssh 命令。

bash
ssh 用户名@服务器地址              # 第一次登录会询问是否信任该主机,输入 yes,再输入密码
ssh -p 2222 用户名@服务器地址       # 服务器的 SSH 端口不是 22 时用 -p 指定

用密钥免密登录 ​

每次输密码很麻烦,也不安全。用密钥登录:

bash
ssh-keygen -t ed25519                  # 在本机生成密钥,一路回车即可
ssh-copy-id 用户名@服务器地址            # 把公钥复制到服务器(输入一次密码)
ssh 用户名@服务器地址                    # 之后不再需要密码

Windows PowerShell 没有 ssh-copy-id,可以在 WSL 里运行,或者手动把 ~/.ssh/id_ed25519.pub 的内容追加到服务器上的 ~/.ssh/authorized_keys 文件末尾。

私钥(id_ed25519,没有 .pub 的那个)绝对不能发给别人,公钥(.pub)可以。

给服务器起个别名 ​

在本机的 ~/.ssh/config 文件里写:

text
Host lab
    HostName 服务器地址
    User 用户名
    Port 22

之后用 ssh lab 就能登录,scp、VS Code 也能直接用这个别名。

用 VS Code 在服务器上写代码 ​

  1. 在 VS Code 里安装 Remote - SSH 插件。
  2. 按 F1,输入 Remote-SSH: Connect to Host,选择 lab。
  3. 连上后,“打开文件夹”打开的就是服务器上的目录,终端也是服务器的终端,可以像在本地一样编辑、运行、调试。
  4. 在远程窗口里给 Python、Jupyter 等插件点“在 SSH 上安装”。

tmux:断开连接后程序继续运行 ​

SSH 断开(关了笔记本、网络波动)时,在里面运行的程序会被终止。长时间运行的实验一定要放在 tmux 里:

bash
tmux new -s exp          # 新建名为 exp 的会话
# 在里面运行实验……
# 按 Ctrl+b,松开,再按 d:离开会话,程序继续在后台运行
tmux ls                  # 查看所有会话
tmux attach -t exp       # 回到会话,看到程序的输出
tmux kill-session -t exp # 结束会话

tmux 里常用的快捷键(都是先按 Ctrl+b 再按后面的键):c 新建窗口,n/p 切换窗口,% 左右分屏," 上下分屏,方向键在分屏之间切换,[ 进入滚动模式(q 退出)。

传文件 ​

bash
scp local.txt lab:~/project/                 # 本机 → 服务器
scp lab:~/project/results.csv .              # 服务器 → 本机
scp -r lab:~/project/figures ./              # 复制整个目录
rsync -avP ./data/ lab:~/project/data/       # 同步目录,只传有变化的文件,大量文件时比 scp 快,可断点续传

也可以直接把文件拖进 VS Code 远程窗口的资源管理器;图形化工具有 WinSCP(Windows)、FileZilla。

模型和数据集不要在本机下载再上传,直接在服务器上下载(用 ModelScope 或 HF_ENDPOINT 镜像,见网络加速)。

在服务器上用 Jupyter ​

在服务器上启动 Jupyter,通过 SSH 端口转发在本机浏览器里使用:

bash
# 服务器上(在 tmux 里运行)
jupyter lab --no-browser --port 8888

# 本机上
ssh -N -L 8888:localhost:8888 lab

然后在本机浏览器打开 http://localhost:8888,输入服务器终端里显示的 token。更简单的方法是直接在 VS Code 远程窗口里打开 .ipynb 文件。

同样的端口转发方法也适用于访问服务器上的其他网页服务,例如 Ray Dashboard、Prometheus、Grafana。

共用服务器的规矩 ​

服务器是大家共用的,请遵守:

  1. 用 GPU 前先看:运行 nvidia-smi(或安装 nvitop 后运行它),挑没人用的卡,用 CUDA_VISIBLE_DEVICES=1 python train.py 指定显卡。机器上有不同型号的卡时,先 export CUDA_DEVICE_ORDER=PCI_BUS_ID,让编号和 nvidia-smi 一致。
  2. 不占着不用:调试完、实验跑完及时结束进程,释放显存。不要开着一个占满显存的 Jupyter 内核放一整天。
  3. 大文件放数据盘:家目录空间通常有限,模型、数据集、实验输出放在约定的数据目录下,定期清理不要的文件。
  4. 不在公共环境里乱装:Python 包装在自己的虚拟环境里,不要改系统级配置。需要系统软件时找管理员。
  5. 账号不外借:不要把账号密码、私钥给别人,也不要在代码里写明文密码。
  6. 大任务提前沟通:要长时间占用多张卡时,先在组里说一声。

常见问题 ​

现象原因与解决
Connection timed out不在校园网内,或需要先连 VPN;服务器地址或端口写错
Permission denied (publickey)服务器只允许密钥登录,而你的公钥没有放到服务器上
REMOTE HOST IDENTIFICATION HAS CHANGED服务器重装过系统。确认是正常情况后,用 ssh-keygen -R 服务器地址 删除旧记录
运行一段时间后程序没了没放在 tmux 里,SSH 断开时被终止了
VS Code 连不上先确认终端里 ssh lab 能登录;服务器家目录满了也会导致 VS Code 无法安装远程组件

作者:崔涵帅、姚智、王振胜、唐志清 · 边缘智能系统实验室