深色模式
使用服务器
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 在服务器上写代码
- 在 VS Code 里安装 Remote - SSH 插件。
- 按
F1,输入Remote-SSH: Connect to Host,选择lab。 - 连上后,“打开文件夹”打开的就是服务器上的目录,终端也是服务器的终端,可以像在本地一样编辑、运行、调试。
- 在远程窗口里给 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。
共用服务器的规矩
服务器是大家共用的,请遵守:
- 用 GPU 前先看:运行
nvidia-smi(或安装nvitop后运行它),挑没人用的卡,用CUDA_VISIBLE_DEVICES=1 python train.py指定显卡。机器上有不同型号的卡时,先export CUDA_DEVICE_ORDER=PCI_BUS_ID,让编号和nvidia-smi一致。 - 不占着不用:调试完、实验跑完及时结束进程,释放显存。不要开着一个占满显存的 Jupyter 内核放一整天。
- 大文件放数据盘:家目录空间通常有限,模型、数据集、实验输出放在约定的数据目录下,定期清理不要的文件。
- 不在公共环境里乱装:Python 包装在自己的虚拟环境里,不要改系统级配置。需要系统软件时找管理员。
- 账号不外借:不要把账号密码、私钥给别人,也不要在代码里写明文密码。
- 大任务提前沟通:要长时间占用多张卡时,先在组里说一声。
常见问题
| 现象 | 原因与解决 |
|---|---|
Connection timed out | 不在校园网内,或需要先连 VPN;服务器地址或端口写错 |
Permission denied (publickey) | 服务器只允许密钥登录,而你的公钥没有放到服务器上 |
REMOTE HOST IDENTIFICATION HAS CHANGED | 服务器重装过系统。确认是正常情况后,用 ssh-keygen -R 服务器地址 删除旧记录 |
| 运行一段时间后程序没了 | 没放在 tmux 里,SSH 断开时被终止了 |
| VS Code 连不上 | 先确认终端里 ssh lab 能登录;服务器家目录满了也会导致 VS Code 无法安装远程组件 |