?launch.json
文件如下"cwd"= "${fileDirname}"
表示代碼調試的根目錄是當前你調試的文件,也就是pretrain.py
所在的目錄。其他路徑參數都是相對這個目錄的
如果改成"cwd"= "${workspaceFolder}"
表示代碼調試的根目錄是打開的工作目錄,也就是你vscode打開的工程文件夾的目錄
"program"
參數是是我們要運行的文件,默認是"program": "${file}"
,也就是你要調試的文件本身,
比如不調試分布式的話,就是pretrain.py,分布式的話要改成"program": "/root/miniconda3/lib/python3.10/site-packages/torch/distributed/run.py"
表示我們其實是要運行這個文件,然后加入args參數,把pretrain.py作為一個參數
注意:pytorch1.9之后torch.distributed.launch
即將被廢棄,取而代之的是torch.distributed.run
https://www.cnblogs.com/tencent-cloud-native/p/15186403.html
而torchrun腳本就是torch.distributed.run的內容,所以在終端運行的話
python -m torch.distributed.run --nproc_per_node=8 pretrain.py --config ./configs/Pretrain.yaml --output_dir output/Pretrain
和
torchrun --nproc_per_node=8 pretrain.py --config ./configs/Pretrain.yaml --output_dir output/Pretrain
二者是等價的,終端直接輸入torchrun
root@autodl-container-115911b7ae-3dcde09d:~# torchrun
usage: torchrun [-h] [--nnodes NNODES] [--nproc_per_node NPROC_PER_NODE][--rdzv_backend RDZV_BACKEND] [--rdzv_endpoint RDZV_ENDPOINT][--rdzv_id RDZV_ID] [--rdzv_conf RDZV_CONF] [--standalone][--max_restarts MAX_RESTARTS] [--monitor_interval MONITOR_INTERVAL][--start_method {spawn,fork,forkserver}] [--role ROLE] [-m] [--no_python][--run_path] [--log_dir LOG_DIR] [-r REDIRECTS] [-t TEE][--node_rank NODE_RANK] [--master_addr MASTER_ADDR][--master_port MASTER_PORT]training_script ...
torchrun: error: the following arguments are required: training_script, training_script_args
root@autodl-container-115911b7ae-3dcde09d:~# which torchrun
/root/miniconda3/bin/torchrun
但vscode調試配置如下,如果直接用"program": "/root/miniconda3/bin/torchrun"也是可以的
?"name": "Python: Current File", 可以改成?"name": "Python: torchrun" 不過這個不影響,只是調試窗口名字
{// 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Python: Current File","type": "python","request": "launch","program": "/root/miniconda3/lib/python3.10/site-packages/torch/distributed/run.py","console": "integratedTerminal","justMyCode": false,"cwd": "${fileDirname}","args": ["--nproc_per_node=1","pretrain.py","--config=./configs/pretrain.yaml","--output_dir=output/Pretrain"],// "env": {"CUDA_VISIBLE_DEVICES":"0"},}]
}
最后:建議在每個工程都創建一個.vscode文件夾,在里面建一個lanuch.json文件,因為每個工程運行腳本肯定都不一樣,不要在/root目錄搞一個.vscode文件夾,不然你每次都是打開/root文件夾都要修改lanuch.json的內容,每次VSCODE都只打開一個工程,不要直接打開root目錄