说在前面
如果想要在服务器中使用以下这种方法来单步调试python文件,那么直接点起单步调试按钮即可:1
python xx.py
在文章中,针对的是以下这种情况来单步调试文件,即无法点击调试按钮就可以开始调试的情况:1
python xx.py --train_file ...
直接点击调试按钮会出现以下这样的画面:
操作步骤
找到最上面的窗口,然后输入Debug: Open launch.json
打开launch.json文件如下:
修改launch.json,添加args字段:
1 | { |
具体示例
2024.02.27更新:示例可能有些问题,请移步这里
脚本文件:1
2
3
4
5
6
7
8
9
10
11
12
13
14python -m torch.distributed.run \
--nproc_per_node 8 --master_port 44144 \
run_pretrain_binary.py \
\
--dataset_name /data10/static_10000 \
--model_name_or_path bert-base-uncased \
--per_device_train_batch_size 32 \
--per_device_eval_batch_size 32 \
--learning_rate 2e-4 \
--max_train_steps 500 \
--num_warmup_steps 50 \
--output_dir /data10/sqy/spikeBert_Sqy/output \
--max_seq_length 128 \
--checkpointing_steps 50
launch.json文件:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48{
"version": "0.2.0",
"configurations": [
{
"name": "Python: 模块",
"type": "python",
"request": "launch",
"module": "torch.distributed.run",
"justMyCode": true
},
{
"name": "Python: Distributed Torch",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/sqy/spikeBert_Sqy/run_pretrain_binary.py",
//"module": "torch.distributed.run",
"console": "integratedTerminal",
"args": [
//"--nproc_per_node=8"
//,"--master_port=44144",
"--dataset_name",
"/data10/static_10000",
"--model_name_or_path",
"/data10/sqy/spikeBert_Sqy/bert-base-uncased",
"--per_device_train_batch_size",
"32",
"--per_device_eval_batch_size",
"32",
"--learning_rate",
"2e-4",
"--max_train_steps",
"500",
"--num_warmup_steps",
"50",
"--output_dir",
"/data10/sqy/spikeBert_Sqy/output",
"--max_seq_length",
"128",
"--checkpointing_steps",
"50"
],
"env": {
"MASTER_PORT": "44144",
"NPROC_PER_NODE": "8"
}
}
]
}
注意:
moudel / program这两者只能存在一个"program":"${workspaceFolder}/sqy/spikeBert_Sqy/run_pretrain_binary.py",我不知道为什么,一旦调试就会进入根目录,所以这里workspaceFolder指的就是根目录,所以记得填写好路径,才能运行"--model_name_or_path","/data10/sqy/spikeBert_Sqy/这里之前也用的是相对路径,导致我报了不少错误,很大的一个debug工程捏,相对路径害死人呜呜
常用 launch.json 配置参数详解
在使用 launch.json 配置调试环境时,会涉及到多个参数,用于定义调试器的行为和目标执行环境。以下是一些常用的配置参数:
- “type”:指定调试器的类型,例如
"node"表示 Node.js 调试器,"python"表示 Python 调试器,"java"表示 Java 调试器等。 - “request”:指定调试的请求类型,可以是
"launch"(启动一个新的进程)或"attach"(附加到已有的进程)。 - “name”:为配置提供一个友好的名称,方便识别不同的调试配置。
- “program”:用于指定程序的入口文件路径,可以是绝对路径或相对于工作目录的路径。
- “args”:传递给程序的命令行参数,以数组形式提供。
- “cwd”:指定程序的工作目录,可以是绝对路径或相对于工作目录的路径。
- “env”:设置程序运行时的环境变量,以对象形式提供。
- “stopOnEntry”:设置为
true时,在启动后会在入口处停止,等待调试器连接。 - “preLaunchTask”:指定在启动调试前运行的任务,通常是一个编译任务。
- “postDebugTask”:指定在调试结束后运行的任务,比如清理任务。
- “outFiles”:设置输出文件的路径,用于映射源代码和编译后的文件。
- “sourceMaps”:控制是否启用源代码映射,可以是
"inline"、"both"或"false"。 - “sourceMapPathOverrides”:用于根据源代码映射调整文件路径。
- “externalConsole”:设置为
true时,将在外部控制台中运行程序。 - “internalConsoleOptions”:控制内部控制台的显示方式,可以是
"neverOpen"、"openOnSessionStart"或"openOnFirstSessionStart"。 - “showAsyncStacks”:设置为
true时,在堆栈跟踪中显示异步调用的信息。 - “stopOnError”:设置为
true时,当发生错误时暂停调试。 - “smartStep”:设置为
true时,跳过无需调试的代码。 - “skipFiles”:指定不需要调试的文件或文件夹。
- “justMyCode”:设置为
true时,只调试自己的代码。