立即开始
在 GPU 服务器上使用 VS Code Remote SSH 和 Jupyter
从您的笔记本电脑直接在服务器的 GPU 上编辑、运行和调试代码,让 notebook 只能通过 SSH 访问,并高效地传输数据集。
借助 VS Code Remote SSH,您可以像操作本地机器一样使用 GPU 服务器:编辑器运行在您的笔记本电脑上,而终端、Python 解释器和 GPU 都在服务器上。本页先介绍如何配置它,再说明如何通过 SSH 隧道在远程 GPU 上运行 Jupyter、用 tmux 保持会话不中断,以及用 rsync 和 scp 传输数据。本文假定您已有一个 SSH 配置条目,名为 gpu1。
通过 Remote-SSH 将 VS Code 连接到服务器
- 在 VS Code 中安装由 Microsoft 发布的 Remote - SSH 扩展。
- 打开命令面板(F1),运行
,然后选择Remote-SSH : Connect to Host...gpu1。您的~/.ssh/config中的主机都会出现在列表中。 - 首次连接时,VS Code 会在 GPU 服务器的
中安装其服务器组件,这需要一分钟左右。~/.vscode-server - 用 File > Open Folder 打开服务器上的文件夹,例如
/data/projects。 - 在远程端安装 Python 和 Jupyter 扩展:在扩展视图中,它们会显示 Install in SSH: gpu1 按钮。
检查方法:在 VS Code 中打开终端并运行 。您应该会看到服务器的 GPU,窗口左下角会显示 SSH: gpu1。用 Python: Select Interpreter 选择项目的虚拟环境。VS Code 还可以通过这个连接直接打开 .ipynb notebook,无需隧道。
在 VS Code 终端中启动的进程依赖于 VS Code 的连接。请按下文所示在 tmux 中启动训练任务,这样即使笔记本电脑进入睡眠,任务也不会中断。
通过 SSH 隧道运行 JupyterLab
- 在服务器上创建环境并安装 JupyterLab:
sudo apt install -y python3-venv python3 -m venv ~/venvs/lab source ~/venvs/lab/bin/activate pip install jupyterlab - 在 tmux 中启动它,并且只监听回环接口:
它会输出一个包含令牌的 URL,例如tmux new -s lab source ~/venvs/lab/bin/activate jupyter lab --no-browser --ip=127.0.0.1 --port=8888http://127.0.0.1:8888/lab?token=...。先按 Ctrl+B,再按 D,即可脱离会话。 - 在您的笔记本电脑上打开隧道,并让它保持运行:
ssh -N -L 8888:127.0.0.1:8888 gpu1 - 把完整的 URL(包括令牌)粘贴到浏览器中。
检查方法:从 JupyterLab 启动器打开一个 Terminal,运行 :您应该会看到服务器的 GPU。请把您使用的框架安装在同一个环境中,这样 notebook 才能导入它;安装方法见 PyTorch 与 vLLM 指南。
切勿在公网 IP 上用 启动 Jupyter,也绝不要禁用它的令牌或密码。任何能访问到 Jupyter 服务器的人,都能以您的用户权限执行命令。请让它只监听 127.0.0.1,并通过隧道访问。在 Docker 中,请用 发布端口,因为 Docker 发布的端口会绕过 ufw,详见防火墙指南。
用 tmux 保持会话
断开连接后,tmux 会让 shell 及其中的进程继续在服务器上运行。如果系统中没有 tmux,请用 sudo apt install 安装。最常用的命令如下:
| 操作 | 命令或按键 |
|---|---|
| 新建命名会话 | tmux new |
| 脱离会话 | 先按 Ctrl+B,再按 D |
| 列出会话 | tmux ls |
| 重新接入 | tmux attach |
| 新建窗口、切换到下一个窗口 | 先按 Ctrl+B 再按 C;先按 Ctrl+B 再按 N |
| 向上滚动查看历史输出 | 先按 Ctrl+B,再按 [(按 Q 退出) |
| 结束会话 | tmux |
会话在断开连接后仍会保留,但在重启后不会。请同时把训练输出写入文件,例如 python3 train.py 2>&1 | tee train.log,以便日后查看。
用 rsync 和 scp 传输数据
rsync 只复制有变化的内容,并能续传中断的传输,这对数据集和检查点来说很重要。两端都必须安装 rsync:在 Ubuntu 上运行 sudo apt install ;在 Windows 上,请改用 WSL 或 scp。
# upload a dataset (the trailing slash copies the folder's contents)
rsync -avP ./dataset/ gpu1:/data/dataset/
# download checkpoints
rsync -avP gpu1:/data/checkpoints/run-01/ ./run-01/
# preview a mirror before running it for real
rsync -avP --delete --dry-run ./code/ gpu1:/data/projects/code/
保留权限和时间戳, 列出文件, 显示进度并保留部分传输的文件,以便重新运行时续传。 会删除目标端存在而源端没有的文件,因此请先加上 试运行。单个文件用 scp 就够了:
scp model.safetensors gpu1:/data/models/
scp gpu1:/data/results/metrics.csv .
在您的两台服务器之间传输时,在其中一台上运行 rsync,以另一台为目标。如果开通了私有网络,请使用私有地址,让传输不经过公网接口。/data 下的路径假定您已在该目录挂载了 NVMe 数据盘。
故障排查
- VS Code 无法连接,但 ssh gpu1 可以正常连接。运行
,然后重新连接。主目录空间已满也会导致安装失败,可以用Remote-SSH : Kill VS Code Server on Host...df检查。-h ~ - 打开隧道时出现“bind: Address already in use”错误。您笔记本电脑上的另一个程序占用了 8888 端口。请换一个本地端口,例如
,然后在浏览器中打开 8890 端口。-L 8890:127.0.0.1:8888 - Jupyter 不接受令牌。在已激活该环境的情况下,在服务器上运行
jupyter server list,输出当前的 URL 和令牌。
问题仍未解决?
请在控制台提交工单,写明服务器、您运行了什么以及错误输出(如有)。工程师 7×24 小时答复。