☰
【深度学习项目实战·04】VS Code远程开发:在本地编辑,在服务器运行与调试
2026/10/28 1:54:21 网站建设 项目流程

文章目录

    • 01 本篇要解决什么问题
    • 02 背景:界面在本地,哪些东西在远程?
    • 03 实操:连接、选环境、调试与查看服务
      • (1)先确认命令行SSH已经能用
      • (2)给服务器配置一个SSH别名
      • (3)连接远程窗口,打开项目文件夹
      • (4)在远程安装Python扩展并选择远程解释器
      • (5)用固定启动配置做断点调试
      • (6)通过端口转发查看远程服务
      • (7)正式长训练与交互调试分开管理
    • 04 一个具体例子:解释“终端能跑,F5却找不到包”
    • 05 常见问题与自测
    • 06 本篇回顾与下一步

01 本篇要解决什么问题

服务器环境已经装好,但开发时还在本地改文件、手动上传、远程执行之间来回切换,很容易出现“改的不是运行的那份代码”。

Remote-SSH可以让本地VS Code直接打开远程项目,并在服务器上运行终端、解释器和调试器。本篇用前面的小训练完成一次远程编辑与断点调试。

  • 本篇关键词:Remote-SSH、远程窗口、解释器、debugpy、工作目录、端口转发。
  • 完成标志:知道文件、Python、训练进程分别在哪里,能在远程代码中停住断点并检查张量。
  • 一句话概括:远程开发把界面放在本地,把代码执行与项目环境放在服务器,连接后仍需选对远程解释器。

02 背景:界面在本地,哪些东西在远程?

Remote-SSH连接后,VS Code会在远程启动相应组件,打开远程文件。Python相关扩展可在远程扩展宿主运行,实际使用远程Python环境。

对象所在位置
编辑器界面和键盘输入本地电脑
打开的项目文件远程服务器
远程集成终端、Python与训练远程服务器
远程Python依赖远程选中的环境
转发服务的浏览器访问入口本地端口,连接到远程服务

本地安装了某个Python包,不会自动让远程解释器拥有它。连接关系与组件位置可核对Remote-SSH官方说明。

03 实操:连接、选环境、调试与查看服务

(1)先确认命令行SSH已经能用

使用第02篇的实际账号与地址完成SSH登录。若命令行都无法连接,先处理网络、端口和认证,不要把所有错误归因于VS Code扩展。

在本地VS Code安装Microsoft的Remote - SSH扩展。远程Linux还需要满足当前VS Code Server的系统库要求,按Linux前置条件核对;旧发行版不能只因为SSH可登录,就认定远程组件一定兼容。

(2)给服务器配置一个SSH别名

打开本地用户的SSH配置文件,添加以下内容。Windows通常位于用户目录下的.ssh/config,也可以通过Remote-SSH的配置命令选择:

Host dl-server HostName 203.0.113.10 User your_name Port 22 ServerAliveInterval 30 ServerAliveCountMax 3

将文档示例地址、用户名和端口换成实际值。Host是本地别名;HostName才是真实目标地址。若已有密钥认证,可增加指向本地专用私钥的IdentityFile,不要把私钥复制到项目或服务器作为配置步骤。

验证别名:

ssh dl-server

保活参数可以帮助维持连接或及时发现断连,但不保证网络永不断开,也不承担训练状态恢复。

(3)连接远程窗口,打开项目文件夹

执行Remote-SSH: Connect to Host...,选择dl-server。连接成功后,通过窗口中的远程连接标识确认目标,再打开服务器上的~/dl-course-lab实际目录。

新建集成终端,执行:

hostnamepwd

应当得到远程主机名与远程项目路径。这里打开的不是本地同名文件夹;后续编辑保存会作用于远程文件。

(4)在远程安装Python扩展并选择远程解释器

按扩展界面的提示,将Python与Python Debugger扩展安装到远程环境。然后执行Python: Select Interpreter,选择服务器dl-course对应的Python。

远程终端可能还需要加载已有Conda:

source"$HOME/miniconda3/etc/profile.d/conda.sh"conda activate dl-course python-c"import sys; print(sys.executable)"

上述Conda位置按第02篇个人安装示例给出;使用平台Conda时替换为平台的加载方式。终端激活与编辑器选解释器需要分别确认。

先运行:

python examples/smoke_train.py--devicecpu--outputartifacts/remote_cpu

有已分配GPU、并完成第03篇验证后,再切换到CUDA。若平台要求计算节点,按其远程开发或任务调试流程进入正确节点,不能仅因为远程窗口已连接就直接使用登录节点训练。

(5)用固定启动配置做断点调试

在远程项目创建.vscode/launch.json,配套包也提供了同样的模板:

{"version":"0.2.0","configurations":[{"name":"DL course: CPU smoke","type":"debugpy","request":"launch","program":"${workspaceFolder}/examples/smoke_train.py","args":["--device","cpu","--output","${workspaceFolder}/artifacts/debug_smoke"],"cwd":"${workspaceFolder}","console":"integratedTerminal","justMyCode":true}]}

这个配置使用选中的解释器,固定项目根目录作为cwd,并把输出写到单独位置。type使用当前Python调试器对应的debugpy,具体字段可参考官方调试说明。

打开smoke_train.py,在计算loss的位置设置断点,再从“运行和调试”选择该配置。停住后检查:

x.shape x.devicenext(model.parameters()).device loss.item()

刚进入循环、尚未计算loss时它可能不存在,因此要把断点放在合适行。断点调试会改变执行节奏,不适合拿来直接衡量正常训练速度。

(6)通过端口转发查看远程服务

以可选TensorBoard为例,先在远程环境安装并启动:

python-mpipinstalltensorboard python-mtensorboard.main--logdirartifacts--host127.0.0.1--port6006

再用VS Code的端口面板转发6006,访问面板显示的本地地址。也可以在本地另开终端:

ssh -L 16006:127.0.0.1:6006 dl-server

保持该连接,从本地浏览器访问http://127.0.0.1:16006。远程6006与本地16006承担不同角色。

本部分小训练保存JSON而非TensorBoard事件,所以面板可能没有曲线;后续实验记录章节会加入事件写入。端口转发负责连接服务,不会自动生成训练日志。

(7)正式长训练与交互调试分开管理

断点调试用于定位问题。长时间训练应按服务器规则使用调度作业或适当的会话管理,并保留日志、配置和检查点。

关闭VS Code窗口不应当作为训练状态管理办法,也不能假定调试进程一定会继续运行。第02篇的任务运行约定仍然适用。

图:本地界面连接远程项目和解释器;端口转发把本地访问映射到远程服务,与Python环境选择是两条不同链路。

04 一个具体例子:解释“终端能跑,F5却找不到包”

先在远程终端打印:

python-c"import sys; print(sys.executable)"

再在F5调试过程中检查sys.executable。如果一个属于dl-course,另一个属于系统Python,问题就定位到解释器选择,而非服务器一定没安装依赖。

若解释器相同,再检查cwd、参数、环境变量及模块搜索路径。采用上面的固定启动配置,可减少“从不同目录启动同一文件”带来的差异。

05 常见问题与自测

问题1:本地装好Python包,远程为什么还提示缺失?

两个解释器环境相互独立,需要在远程实际使用的环境安装依赖。

问题2:SSH成功,Remote-SSH仍失败,应该检查什么?

查看Remote-SSH输出日志,继续区分远程组件系统要求、网络下载、磁盘与启动问题。

问题3:终端已经激活环境,还要选择解释器吗?

需要确认。调试器和编辑器的解释器选择,不应只从某个已有终端的提示符推断。

问题4:为什么断点旁边显示没有绑定?

可能启动了另一份文件、路径不匹配、代码尚未加载,或调试目标不正确。先确认实际执行的程序与文件路径。

问题5:转发端口后没有曲线,是连接失败吗?

不一定。先区分服务是否可访问,再检查对应目录中是否真的写入了该工具能读取的日志。

06 本篇回顾与下一步

一次可靠远程调试,需要对齐主机、文件、解释器、工作目录和启动参数。状态栏提供连接提示,真正的运行证据来自程序和终端输出。

中文常用英文
远程扩展宿主Remote extension host
解释器选择Interpreter selection
启动配置Launch configuration
断点/调用栈Breakpoint / Call stack
端口转发Port forwarding

下一篇整理常见环境问题,把报错按层定位,并保存足够的复现信息。

参考与延伸阅读

  • VS Code Remote-SSH。
  • 远程Linux前置条件。
  • Python解释器与环境。
  • Python调试配置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询