> 技术文档 > [实验日志] VS Code 连接服务器上的 Python 解释器远程调试 (含 Pytorch 分布式 torch.distributed.launch 的调试.json配置)_vscode远程调试python

[实验日志] VS Code 连接服务器上的 Python 解释器远程调试 (含 Pytorch 分布式 torch.distributed.launch 的调试.json配置)_vscode远程调试python

目录

0. 前言

1. 环境

2. 准备工作

2.1 安装VS Code

2.2 安装插件

2.3 配置远程服务器

2.4 修改设置

2.5 打开远程调试窗口

3. 调试代码

3.1 输密码

​编辑

3.2 打开服务器文件夹

3.3 配置Python环境

3.4 调试Python代码

3.4.2 调试 pytorch 分布式 torch.distributed.launch 的 debug 配置

补充:使用调试控制台,查看变量tensor的形状

结语


0. 前言

我们跑大型项目的时候,数据和代码都在服务器上。然而,服务器往往是Linux系统,没有图形化界面,本文将以Python语言为示例,讲解一下如何通过VS Code这款免费且好用的IDE进行远程调试代码。

常用的JetBrains家族(IntelliJ IDEA、Pycharm等)的开发工具里已经实现了远程开发功能,选择VS Code 作为开发工具的原因有以下两点:
(1)JetBrains(如Pycharm)需要专业版才有远程调试的功能,而专业版收费高,大部分人平时还是使用社区版。VS Code是微软的一款免费IDE软件,又开源又支持远程调试。
(2)JetBrains工具远程开发时通过FTP、SFTP(File Transfer Protocol,文件传输协议)实现,它们的远程开发的原理是通过文件传输协议连接到远程服务器,通过上传和下载的方式进行远程项目和本地项目的同步,这样的缺点是:不能实时同步、操作繁琐,需要维护两份代码。而VS Code是通过SSH(Secure Shell)的方式连接到远程服务器,换句话说,VS Code在远程开发过程中扮演的角色更像是一款终端模拟工具,它不需要繁琐的上传和下载步骤,实时性更好,只需要在Windows上保存一下,就会瞬间同步到远程服务器,不用建立本地和远程映射,能直接查看和修改服务器上的文件。

1. 环境

本地环境:Windows 10
远程环境:Ubuntu 16.04(64bit)、ubuntu20.04) 亲测都可以
Python版本:3.6 - 3.8 亲测都可以
VS Code:1.43.2 - 1.96.4 亲测都可以

2. 准备工作

2.1 安装VS Code

官网:Download Visual Studio Code - Mac, Linux, Windows

需要安装VS Code,建议选择Syetem Installer。

2.2 安装插件

安装Remote Development这个插件,步骤如下图所示:

  • 点击扩展按钮
  • 搜索Remote Development
  • 安装

2.3 配置远程服务器

在 SSH TARGETS 配置远程服务器,具体步骤如下:

  • 点击(窗口左侧栏)远程资源管理器
  • 点击齿轮图标
  • 打开弹出的config文件,分别配置Host、Hostname、User

这里需要注意一个,Host是一个名称,自己可以随意命名。Hostname是远程服务器的IP,User是用于登录远程服务器的账户名称。

以AutoDL为例,找到自己租的远程服务器实例,SSH登录:

复制登录指令如下:(输入登录指令可以自动生成config)

ssh -p 26982 root@connect.yza1.seetacloud.com

对应到config文件中的Host、Hostname、User:

保存后左侧SSH栏就会出现服务器名称

2.4 修改设置

打开VS Code设置,搜索Show Login Terminal,把\"Always reveal the SSH login terminal\"勾选上,记得一定要操作这一步,不然会一直提示报错

2.5 打开远程调试窗口

把鼠标放在上一步配置的远程连接条目上,右键,有两个条目可以选择,推荐 Connect to Host in New Window。然后就会在窗口打开我们想要的远程连接。

3. 调试代码

3.1 输密码

密码会隐藏看不见,但实际上已经输入好了,粘贴上去直接回车

3.2 打开服务器文件夹

  • 点击Explorer
  • 点击Open Folder

  • 点击确定

3.3 配置Python环境

还得再输入一次密码才能进来

3.4 调试Python代码

选Python debugger

会显示和PyCharm类似的调试配置,前三种最为常用,2对应script,3对应module

我们以2为例,所需要执行的命令如下

python tools/train.py projects/configs/flashocc/flashocc-r50-M0.py

那么对应的调试参数-配置文件内容如下(这部分将运行命令对应到vs code调试参数可以问问GPT,又快又好):

{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"Python 调试程序: tools/train.py\", \"type\": \"python\", \"request\": \"launch\", \"program\": \"${workspaceFolder}/tools/train.py\", \"args\": [ \"${workspaceFolder}/projects/configs/flashocc/flashocc-r50-M0.py\" ], \"env\": { \"PYTHONUNBUFFERED\": \"1\", }, \"console\": \"integratedTerminal\", \"cwd\": \"${workspaceFolder}\" } ]}

3.4.2 调试 pytorch 分布式 torch.distributed.launch 的 debug 配置

如果在pycharm里,是这样的配置:(参考这篇(pycharm远程调试)博客,是同一个项目SparseOcc项目,这是pycharm的分布式调试)

那么换成 VS Code,调试的配置文件.json 就应该是:

{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"Debug SparseOcc Single GPU\", \"type\": \"debugpy\", \"request\": \"launch\", \"program\": \"${workspaceFolder}/tools/train.py\", \"cwd\": \"${workspaceFolder}\", \"args\": [ \"projects/configs/sparseocc/sparseocc_nusc_pem_v2.py\", \"--seed\", \"0\", \"--launcher\", \"pytorch\" ], \"console\": \"integratedTerminal\", \"env\": { \"PYTHONPATH\": \"${workspaceFolder}\", \"MASTER_ADDR\": \"127.0.0.1\", \"MASTER_PORT\": \"29500\", \"RANK\": \"0\", \"WORLD_SIZE\": \"1\", \"LOCAL_RANK\": \"0\" } } ]}

最后亲测成功debug!

得右下角选择远程服务器上的python解释器

保存后点击左侧调试栏里的开始调试,就成功开始调试啦:

别忘了设置断点哦:

补充:使用调试控制台,查看变量tensor的形状

输入xxx.shape,或者:

[tensor.shape for tensor in xxx]

还有一些常用的命令:

# 查看x的类型

type(x)

# 如果x是list

for i in x: print(i.shape)

就能查看对应变量内部所有tensor的形状啦,别的调试方法和PyCharm类似,可参考:

[实验日志] 将pycharm(本地项目)连接到远程服务器(Linux)上跑起来

结语

OK啦,到这里我们就成功设置了VS Code进行Python的远程调试,接下来我们就可以愉快地写代码和debug了。

本文参考以下博客,并融入了自己的思考:
https://zhuanlan.zhihu.com/p/93239107
https://blog.csdn.net/Hreticent/article/details/82968466
https://www.oschina.net/question/3637446_2282455
https://zhuanlan.zhihu.com/p/43656542
VS Code进行Python远程调试_vscode 远程 python-CSDN博客(主要参考)

技术资讯